- Модуль: 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);
}