Документация для разработчиков

OnTaskUpdate

Событие, вызываемое при обновлении задачи.

Поля ответа:

Поле Описание
FIELDS_BEFORE поля задачи до события. В случае отсутствия доступных полей задачи данное поле будет содержать значение undefined.
FIELDS_AFTER поля задачи после события. В случае отсутствия доступных полей задачи данное поле будет содержать значение undefined.
IS_ACCESSIBLE_BEFORE была ли доступна задача до события (на чтение). Возможные значения:
  • Y (Yes) - да;
  • N (No) - нет;
  • undefined - не определено или проверка не производилась.
IS_ACCESSIBLE_AFTER стала ли доступна задача после события (на чтение). Возможные значения:
  • Y (Yes) - да;
  • N (No) - нет;
  • undefined - не определено или проверка не производилась.

Пример значений полей:

$arEventFields = array(
    'FIELDS_BEFORE' => array('ID' => $taskId), // идентификатор изменяемой задачи
    'FIELDS_AFTER' => array('ID' => $taskId), // идентификатор изменяемой задачи
    'IS_ACCESSIBLE_BEFORE' => 'undefined', // проверка доступности задачи на чтение не производилась
    'IS_ACCESSIBLE_AFTER' => 'undefined' // проверка доступности задачи на чтение не производилась
);


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Атем Прозоров
Сообщение непромодерировано, возможны ошибки и неточности.
Извиняюсь, в предыдущем комменте опечатка, подписка на событие вот так происходит (в третьем параметре массив заключил в кавычки):

\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
0
Атем Прозоров
Сообщение непромодерировано, возможны ошибки и неточности.
// Подписка на событие:

\Bitrix\Main\EventManager::getInstance()->addEventHandler('tasks', 'OnTaskUpdate', '["TaskManager", "processTask"]');

// Обработка события (кастомный класс TaskManager)

class TaskManager
{
   public static function processTask($id, $data)
   {
       // $id - это идентификатор обрабатываемой задачи

       // $data - это поля, которые были переданы в обработчик

       \CEventLog::Add([
           "SEVERITY" => "INGO",
           "AUDIT_TYPE_ID" => "Debug",
           "MODULE_ID" => "main",
           "ITEM_ID" => $id,
           "DESCRIPTION" => json_encode($data),
       ]);

       // Теперь заходим в админку Настройки - инструменты - журнал событий и смотрим там реально какие данные были переданы в обработчик

      // вот так можно получить задачу
      $taskData = \Bitrix\Tasks\Internals\TaskTable::getList(['filter' => ['ID' => $id], 'select' => ['ID', 'TITLE']])->fetch(); // TaskTable - это обычный датаменеджер D7, соответственно можно использовать все его методы (getById и тд)
      // Кстати если нужны пользовательские поля, то их тоже можно запросить в селекте
   }
}
© «Битрикс», 2001-2019, «1С-Битрикс», 2019
Наверх