Практические советы
Как использовать триггеры для решения конкретных задач?
Ссылка на объект и поля объекта
Получить ссылку на объект, по событию которого сработал триггер можно по ключевому слову self
# Ссылка на объект, в котором возникло событие
self
# Обращение к системным полям задачи
#
# Список системных полей:
# id - id задачи
# parent - родительская задача
# subject - заголовок задачи
# description - описание задачи
# type - тип задачи
# project - проект
# category - категория задачи
# status - статус задачи
# version - версия/релиз/спринт
# priority - приоритет задачи
# assigned_to - исполнитель задачи
# author - автор задачи
# responsible -
# start_date - планируемая дата начала задачи (для Ганта)
# due_date - планируемая дата завершения задачи (для Ганта)
# duration - планируемая длительность задачи в днях (для Ганта)
# schedule_manually - режим русного планирования (булево да/нет) (для Ганта)
# ignore_non_working_days - пропускать нерабочие дни (булево да/нет) (для Ганта)
# done_ratio - % выполнения заадчи
# estimated_hours - предполагаемое время выыполнения задачи в часах
# derived_estimated_hours - фактическое время выполнения задачи
# remaining_hours - предполагаемое оставшееся время выполнения задачи в часах
# derived_remaining_hours - фактическое оставшееся время выполнения задачи
# budget -
# story_points - оценка в сторипоинтах
self.id # Доступ к полю объекта ID
self.status = Status.find :in_progress # Доступ к полю объекта Status
# Доступ к кастомным полям
# К примеру есть кастомное поле:
# | ID | Название | Символ |
# |------------------------------------
# | 99 | Задача на паузе | paused |
# Тогда работать с ним можно так:
self.cf_99 = true # 99 - это ID кастомного поля
self.cf_paused = false # paused - это символьный идентификатор кастомного поля
Поиск задачи по номеру, изменение и сохранение её
В этом примере производится поиск задачи по ID, у найденной задачи устанавливается описание заничением даты создания задачи и производится сохранение задачи.
Пример работы с датами и отрезками времени
В этом примере показано, как можно работать с датами и временем, форматированием даты/времени и вычислять отрезки времени.
Добавить запись в журнал (деятельность)
Этот пример показывает, как в триггере можно создать запись в журнале задачи.
Важно понимать, что если в теле триггера помимо добавления комментария к задаче будут произвдены изменения полей задачи, то все эти изменения включая комментарий будут объединены в одну запись в журнале задачи (деятельности) и соотнесены с тем пользователем, который был передан методу add_journal.
Если вы хотите зарегистрировать изменения задачи от лица определенного пользователя, то нужно вызвать add_journal без параметра notes. Этим вы сообщите системе, что в журнале автором изменений следует поставить указанного в add_journal пользователя.
Обработка и отображение ошибок
Если вам потребуется в триггере сгенерировать ошибку и сообщить об этом пользователю, то вот совет.
Сериализация данных
Иногда необходимо вывести данные объекта целиком для отладки. Лучшим решением для этого является сериализация объекта в JSON.
Значения полей исходного объекта
Иногда в теле триггера производятся изменения значений полей, но при этом вам. требуется получить значения полей объекта до изменения. Для этого можно воспользоваться следующим советом:
Проверка на незаполненное значение
Неустановленное значение поля объекта легко проверить с помощью nil, так как этот способ работает независимо от типа поля.
Использование символьных идентификаторов для статусов
Символьные идентификаторы статусов позволяют писать более лаконичный и читаемый код.
Имена переменных могут быть на кириллице
Для повышения читаемости кода триггеров вы можете использовать кириллические имена переменных.
Доступные объекты
Иногда в триггерах приходится обращаться к другим объектам системы. Здесь мы покажем какие объекты доступны для использования
Изменение пользователя
Внимание! Подобные действия являются нетипичными для использования в триггерах. Здесь мы приводим пример возможностей триггеров. Используйте, пожалуйста, данные возможности аккуратно. Представленный код триггера позволяет найти пользователя по какому-либо параметру и произвести изменение его данных.
Отправка HTTP запросов и вебхуков
Иногда возникает необходимость прямо в триггере сделать запрос на какой-либо внешний сервис с целью передать информацию об изменении задачи (отправить уведомление в мессенджер) или, наоборот, получить какую-то внешнюю информацию для сохранения в задаче. Все это делается с помощью HTTP запросов
Last updated