@redesupar

Как отправить уведомление после смены статус задачи на закрыто?

Не могу понять, почему не получается? статусы у меня такие же

AddEventHandler("tasks", "OnTaskUpdate", "OnTaskUpdateHandler");

function OnTaskUpdateHandler($taskId, $arFields) {
    $taskData = CTaskItem::getInstance($taskId, 1);
    $taskStatus = $taskData->data["STATUS"];

    if ($taskStatus == 5) { // Проверяем, что статус задачи равен "Закрыто"
        $taskCreatedBy = $taskData->data["CREATED_BY"]; // Получаем ID постановщика задачи

        $notificationParams = array(
            "TO_USER_ID" => $taskCreatedBy, // Постановщик задачи  
            "NOTIFY_TYPE" => IM_NOTIFY_FROM,
            "NOTIFY_MODULE" => "tasks",
            "NOTIFY_EVENT" => "task_update",
            "NOTIFY_MESSAGE" => "Задача #".$taskId." была закрыта.",
        );

        CIMNotify::Add($notificationParams); // Отправляем уведомление  
    }
}
  • Вопрос задан
  • 39 просмотров
Решения вопроса 1
gromdron
@gromdron Куратор тега Битрикс24
Работаю с Bitrix24
Без лишних слов, вот так:

// Подписываемся на событие через современный механизм
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandlerCompatible("tasks", "OnTaskUpdate", "OnTaskUpdateHandler");

function OnTaskUpdateHandler($taskId, $editedFields, $originalFields)
{
	// Если статус не меняется, ничего делать не нужно
	if ( !array_key_exists('STATUS', $editedFields) )
	{
		return true;
	}

	// Если статус меняется НЕ в состояние completed - ничего делать не нужно 
	if ( intval($editedFields["STATUS"]) != \Bitrix\Tasks\Internals\Task\Status::COMPLETED )
	{
		return true;
	}

	// Если вы меняете что-то другое, например название завершенной задачи, а статус просто летит за компанию, то делать ничего не нужно
	if ( $editedFields["STATUS"] == $editedFields["originalFields"] )
	{
		return true;
	}

	// Наш обработчик не имеет смысла, если модуль "Веб-мессенджер" не подключен
	if (!\Bitrix\Main\Loader::includeModule('im'))
	{
		return true;
	}

	/**
	 * Посмотреть поля можно через этот метод.
	 * Они будут в той же директории где и текущий файл, в файле log.log
	 */
	//\Bitrix\Main\Diag\Debug::dumpToFile(
	//	[
	//		'$taskId'        => $taskId,
	//		'$arFields'      => $arFields,
	//		'$eventTaskData' => $eventTaskData
	//	],
	//	date('d.m.Y H:i:s'),
	//	str_replace($_SERVER['DOCUMENT_ROOT'], '', __DIR__.'/log.log')
	//);

    $notificationParams = [
		"TO_USER_ID"   => $originalFields["CREATED_BY"],
		"FROM_USER_ID" => $originalFields["CREATED_BY"],
		"NOTIFY_TYPE" => IM_NOTIFY_SYSTEM,
		"NOTIFY_MODULE" => 'tasks', 
		"NOTIFY_MESSAGE" => "Задача #".$taskId." была закрыта.",
	];

	\CIMNotify::Add($notificationParams);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы