Практические советы

Как использовать триггеры для решения конкретных задач?

Ссылка на объект и поля объекта

Получить ссылку на объект, по событию которого сработал триггер можно по ключевому слову 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