OnTaskUpdate
Scope: task Права на выполнение: для всех
Событие, вызываемое при обновлении задачи.
Поля ответа:
Поле | Описание |
---|---|
FIELDS_BEFORE | поля задачи до события. В случае отсутствия доступных полей задачи данное поле будет содержать значение undefined. |
FIELDS_AFTER | поля задачи после события. В случае отсутствия доступных полей задачи данное поле будет содержать значение undefined. |
IS_ACCESSIBLE_BEFORE | была ли доступна задача до события (на чтение). Возможные значения:
|
IS_ACCESSIBLE_AFTER | стала ли доступна задача после события (на чтение). Возможные значения:
|
Пример значений полей:
$arEventFields = array( 'FIELDS_BEFORE' => array('ID' => $taskId), // идентификатор изменяемой задачи 'FIELDS_AFTER' => array('ID' => $taskId), // идентификатор изменяемой задачи 'IS_ACCESSIBLE_BEFORE' => 'undefined', // проверка доступности задачи на чтение не производилась 'IS_ACCESSIBLE_AFTER' => 'undefined' // проверка доступности задачи на чтение не производилась );
Сообщение не промодерировано, возможны ошибки и неточности.
|
Также интересует, как поля FIELDS_BEFORE, FIELDS_AFTER, согласно документации возвращающие поля задачи до события и после соответственно, каждый раз отдают только ID задачи. Непонятно, как получать информацию о том, какие поля обновились, не сохраняя у себя состояния.
|
Сообщение не промодерировано, возможны ошибки и неточности.
|
||
Array ( [event] => ONTASKUPDATE [data] => Array ( [FIELDS_BEFORE] => Array ( [ID] => 39 ) [FIELDS_AFTER] => Array ( [ID] => 39 ) [IS_ACCESSIBLE_BEFORE] => undefined [IS_ACCESSIBLE_AFTER] => undefined ) ... ) | ||
Сообщение не промодерировано, возможны ошибки и неточности.
|
в поля FIELDS_BEFORE и FIELDS_AFTER всегда передается лишь ID задачи, какой бы то ни был апдейт задачи. Как тогда узнавать, что именно произошло с задачей, кроме как вести у себя ее историю и сверяться при изменениях?
|
Сообщение не промодерировано, возможны ошибки и неточности.
|
Извиняюсь, в предыдущем комменте опечатка, подписка на событие вот так происходит (в третьем параметре массив заключил в кавычки):
\Bitrix\Main\EventManager::getInstance()->addEventHandler('tasks', 'OnTaskUpdate', ["TaskManager", "processTask"]); Ну и раз уж речь зашла про подписки на события, то лучше сделать так: (чтобы избавиться от статических методов) \Bitrix\Main\EventManager::getInstance()->addEventHandler('tasks', 'OnTaskUpdate', 'processTask'); // processTask- это название функции function processTask($id, $data) { $manager = TaskManager::getInstance()->processTask($id, $data); // TaskManager в данном случае - это синглтон, у которого есть публичный нестатический метод processTask, а функция processTask - это всего лишь функция-хелпер чтобы избежать вызова статического метода при подписке на события } Ну и если говорить об элегантности и чистой архитектуре, то лучше вообще третьим параметром передавать анонимную функцию, в которой получать экземпляр TaskManager из DI-контейнера (которого к сожалению в битре по умолчанию нет) и передавать ему $id и $data |
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.