• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/classes/general/taskwebservice.php
  • Класс: CTasksWebService
  • Вызов: CTasksWebService::GetListItemChangesSinceToken
function GetListItemChangesSinceToken($listName, $viewFields = '', $query = '', $rowLimit = 0, $changeToken = '')
{
	if (!$this->__Init())
		return $this->error;

	if (!$listName_original = CIntranetUtils::checkGUID($listName))
		return new CSoapFault('Data error', 'Wrong GUID - '.$listName);

	$listName = ToUpper(CIntranetUtils::makeGUID($listName_original));

	$arFilter = array();

	if ($changeToken)
	{
		$bitrixTimestamp = $changeToken + CTasksTools::getTimeZoneOffset();
		$arFilter['>CHANGED_DATE'] = ConvertTimeStamp($bitrixTimestamp, 'FULL');
		if (!$arFilter['>CHANGED_DATE'])
		{
			return new CSoapFault(
					'Params error',
					'Wrong changeToken: '.$changeToken
			);
		}
	}

	$last_change = 0;
	$data = new CXMLCreator('listitems');
	$data->setAttribute('MinTimeBetweenSyncs', 0);
	$data->setAttribute('RecommendedTimeBetweenSyncs', 180);
	$data->setAttribute('TimeStamp', $this->__makeDateTime());
	$data->setAttribute('EffectivePermMask', 'FullMask');
	$data->setAttribute('IncludeAttachmentUrls', 'False');

	$data->addChild($obChanges = new CXMLCreator('Changes'));

	if (!$changeToken)
	{
		$obChanges->addChild($this->__getFieldsDefinition());
	}

	$data->addChild($obData = new CXMLCreator('rs:data'));

	$counter = 0;

	$arFilter['MEMBER'] = BitrixTasksUtilUser::getId();

	$dbRes = CTasks::GetList(array("ID" => "ASC"), $arFilter, array());

	while ($arRes = $dbRes->Fetch())
	{
		$rsFiles = CTaskFiles::GetList(array(), array("TASK_ID" => $arRes["ID"]));
		$arRes["FILES"] = array();

		while ($arFiles = $rsFiles->fetch())
			$arRes["FILES"][] = $arFiles["FILE_ID"];

		$arRes['TITLE'] = BitrixMainTextEmoji::decode($arRes['TITLE']);

		$obData->addChild($this->__getRow($arRes, $listName, $last_change));
		$counter++;
	}

	$deletedIds = $this->getDeletedTasks($arFilter);
	foreach ($deletedIds as $deletedId)
	{
		$obId = new CXMLCreator('Id');
		$obId->setAttribute('ChangeType', 'Delete');
		$obId->setData($deletedId);
		$obChanges->addChild($obId);
	}

	$obData->setAttribute('ItemCount', $counter);

	$data->setAttribute('xmlns:rs', 'urn:schemas-microsoft-com:rowset');
	$data->setAttribute('xmlns:z', '#RowsetSchema');

	if ($last_change > 0)
		$obChanges->setAttribute('LastChangeToken', $last_change);

	return array('GetListItemChangesSinceTokenResult' => $data);
}