Цитата | ||
---|---|---|
Владимир Сахно написал: К сожалению, с настройкой задач в портале ситуация плачевная. Вы либо принимаете логику работы от разработчика полностью, либо будете вынуждены переделывать модуль под себя (с потерей поддержки). Чтобы не быть голословным, приведу простой пример. Требуется запретить завершать задачу без оставления комментария. Казалось бы это элементарно. Добавляем обработчик события "OnBeforeTaskUpdate" для модуля "tasks", в обработчике проверяем, является ли текущий пользователь последним прокомментировавшим. И если нет, то генерируем исключение с описанием ошибки. Ожидаем, что платформа должна каким-то образом обработать это исключение и показать наше сообщение пользователю. Ага, конечно, размечтались. Мало того, что пользователь никак не уведомляется, так еще js-код на клиенте отрабатывает как будто все нормально - кнопку Завершить убирает, статус меняет. Но реально задача не завершается. И победить это зло очень непросто. Требуется изменение ядерного метода CTaskItem::proceedAction, в который вносить изменения простым смертным "не положено", а у "избранных" разработчиков платформы до этого руки дойдут непонятно когда. Да и это не все. Чтобы все сделать красиво нужно модифицировать два компонента "tasks.task.detail" и "tasks.task.detail.parts". А это значит, что их снять с поддержки. Вообщем, резюме такое - подстраивайтесь под них, либо готовьте бюджет на разработку своего блэк-джека и ...
Вы хотите ответственного назначать по умолчанию другого пользователя. Не пойму, он у вас всегда один будет? Если не один то по какому принципу назначать ответственного автоматически? |
В последних обновлениях стало возможным. Достаточно в событии сгенерировать исключение ActionFailedException.
Код |
---|
AddEventHandler("tasks", "OnBeforeTaskUpdate", "TaskUpdate"); function TaskUpdate($ID, &$arFields, &$arTaskCopy) { if ($arFields["STATUS"] == 5) //если статус задачи "Завершена" { if (($arTaskCopy["COMMENTS_COUNT"] == 0) || (empty($arTaskCopy["COMMENTS_COUNT"]))) //без комментария не завершаем задачу { throw new \Bitrix\Tasks\ActionFailedException("Для завершения задачи нужно оставить комментарий"); } } } |