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

Список событий

Событие Вызывается Метод С версии
OnBeforeTaskAdd Перед добавлением задачи. CTasks::Add 10.0.5
OnBeforeTaskDelete Перед удалением задачи. CTasks::Delete 10.0.5
OnBeforeTaskUpdate Перед обновлением задачи. CTasks::Update 10.0.5
OnTaskAdd После добавления задачи. CTasks::Add 10.0.5
OnTaskDelete После удаления задачи. CTasks::Delete 10.0.5
OnTaskUpdate После обновления задачи. CTasks::Update 10.0.5
OnBeforeTaskNotificationSend Перед отправкой уведомлений в IM. CTaskNotifications::SendMessage 12.5.0
OnBeforeTaskElapsedTimeAdd Перед добавлением записи о затраченном времени в лог действий над задачей. CTaskElapsedTime::Add 14.0.16
OnBeforeTaskElapsedTimeUpdate Перед изменением записи о затраченном времени в логе действий над задачей. CTaskElapsedTime::Update 14.0.16
OnBeforeTaskElapsedTimeDelete Перед удалением записи о затраченном времени из лога действий над задачей. CTaskElapsedTime::Delete 14.0.16
OnTaskElapsedTimeAdd После добавления в лог действий над задачей записи о затраченном времени. CTaskElapsedTime::Add 12.5.0
OnTaskElapsedTimeUpdate После изменения в логе действий над задачей записи о затраченном времени. CTaskElapsedTime::Update 12.5.0
OnTaskElapsedTimeDelete После удаления из лога действий над задачей записи о затраченном времени. CTaskElapsedTime::Delete 12.5.0
OnBaseAllowedActionsMapInit При инициализации карты дозволенных действий над задачей. CTaskItem::getBaseAllowedActions 12.5.3
OnTaskReminderAdd При добавлении напоминания к задаче. CTaskReminders::Add 14.5.10


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

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

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

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

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Константин Савин
Сообщение не промодерировано, возможны ошибки и неточности.
$eventManager->addEventHandler('tasks', 'OnTaskUpdate', 'onAfterUpdate');
   function onAfterUpdate($taskID, array $fields): array
   {
       TaskTable::update($fields['ID'],['TITLE' => 'Обновлено из обработчика']);
return $fields;
   }
0
Константин Савин
Сообщение не промодерировано, возможны ошибки и неточности.
$eventManager->addEventHandler('tasks', 'OnTaskUpdate', 'onAfterUpdate');
   function onAfterUpdate($taskID, array $fields): array
   {
       $idTask = 66;
       $fields = TaskTable::getById($idTask)->fetch();
       Debug::dumpToFile($fields);
       return $fields;
   }
0
Константин Савин
Сообщение не промодерировано, возможны ошибки и неточности.
$eventManager->addEventHandler('tasks', 'OnTaskUpdate', 'onAfterUpdate');
   function onAfterUpdate($taskID, array $fields): array
   {
       Debug::dumpToFile('ok');
       return $fields;
   }
2
Надежда Курганова
Сообщение не промодерировано, возможны ошибки и неточности.
Может кому-то поможет:
Раньше везде корректно работало  \Bitrix\Tasks\ActionFailedException, сейчас надо типизировать под конкретные действия:
use Bitrix\Tasks\Control\Exception\TaskAddException;
use Bitrix\Tasks\Control\Exception\TaskNotFoundException;
use Bitrix\Tasks\Control\Exception\TaskUpdateException;
Если этого не сделать, то, например, в OnBeforeTaskUpdate вызовом throw new \Bitrix\Tasks\ActionFailedException не удастся вывести своё сообщение об ошибке.
0
Надежда Курганова
Сообщение не промодерировано, возможны ошибки и неточности.
Цитата
Никита Кургалин написал:
Если нужно добавить исключение, нужно использовать "ActionFailedException"
Использую, но текст выводится стандартный: https://photo-screen.ru/i/HjOvTZV5D
Как вывести свой? Событие OnBeforeTaskUpdate при попытке сменить крайний срок задачи
0
Андрей Гомзин
Сообщение не промодерировано, возможны ошибки и неточности.
В событии OnBeforeTaskUpdate
не хватает параметра, который бы показывал, изменена задача вручную или в результате работы автоматики, например - смена статуса задачи на завершенный при переводе привязанной сделки в успех. Бывает ситуация, когда закрытие привязанных к сделкам задач неприемлемо при переводе сделки в успех, тогда можно было бы по этому параметру отменять изменение статуса задачи.
Обнаружил, что при автозакрытии задачи через сделку, приходят дополнительно параметры "START_DATE_PLAN":null, "END_DATE_PLAN":null, если ранее в задаче не использовались плановые даты начала и завершения. Однако определять источник изменений по ним выглядит крайне ненадежным, т.к. иногда эти поля все же могут использоваться.
Получилось решить только проставлением в поле сделки таймстампа при событии OnBeforeCrmDealUpdate, и последующим его сравнением с таймстампом при вызове OnBeforeTaskUpdate
0
Юрий Гранд
Сообщение не промодерировано, возможны ошибки и неточности.
ВНИМАНИЕ!

При событии OnBeforeTaskUpdate есть баг.
Если в метод CTask::Update() (и CTaskItem::update() соответственно), будут переданы только основные поля задачи, без пользовательских, то добавлять в обработчике события OnBeforeTaskUpdate значения пользовательских полей становится бессмысленно, так как они будут проигнорированы.

Такое можно словить при обработке смены статуса задачи. В этом случае советую использовать метод:
Код
$USER_FIELD_MANAGER->Update("TASKS_TASK", $taskId, $ufFields, $userId);
К сожалению это костыль, так как если у вас будет очередь обработчиков, и один из последующих отменит сохранение задачи, то значение уже изменённых пользовательских полей не поменяется поэтому советую этот метод выполнять в последнем обработчике события, такой можно сделать указав в методе добавления обработчика параметр sort чем больше тем лучше, например 99999
Код
AddEventHandler(
 string from_module_id,
 string MESSAGE_ID,
 mixed callback,
 int sort = 100,
 mixed full_path = false
);

//d7
\Bitrix\Main\EventManager::addEventHandler(
 string from_module_id,
 string MESSAGE_ID,
 mixed callback,
 includeFile = false,
 int sort = 100
);
8
Никита Кургалин
Если нужно добавить исключение, нужно использовать "ActionFailedException":
Код
throw new \Bitrix\Tasks\ActionFailedException("Для завершения задачи нужно оставить комментарий");
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх