Событие по расписанию

Введение

Событие по расписанию — это триггер, запускаемый по условию времени. Поддерживаются два режима:

  • Пользовательское время: регулярный запуск по системному времени, как в cron.
  • Поле времени коллекции: запуск по значению поля времени в коллекции при наступлении соответствующего момента.

Когда система достигает момента времени (с точностью до секунды), соответствующего условиям триггера, запускается соответствующий рабочий процесс.

Базовое использование

Создание события по расписанию

При создании рабочего процесса в списке рабочих процессов выберите тип «Событие по расписанию»:

Создание события по расписанию

Режим пользовательского времени

Для регулярного режима сначала нужно задать время старта — любой момент (с точностью до секунды). Время старта можно установить в будущем или в прошлом. Если задано прошлое время, система проверит наступление момента по настроенному условию повторения. Если условие повторения не настроено и время старта уже в прошлом, рабочий процесс больше запускаться не будет.

Есть два способа настроить правило повторения:

  • По интервалу: запуск через фиксированный интервал после времени старта, например каждый час, каждые 30 минут и т.д.
  • Расширенный режим: по правилам cron, можно настроить цикл по фиксированным датам и времени по шаблону.

После настройки правила повторения можно настроить условие завершения: либо в фиксированный момент времени, либо по ограничению количества выполнений.

Режим поля времени коллекции

Использование поля времени коллекции для определения времени старта — это режим триггера, который объединяет обычные события по расписанию и поля времени коллекций. Этот режим может упростить узлы в некоторых процессах и более интуитивен в настройке. Например, чтобы менять статус просроченных неоплаченных заказов на «отменён», достаточно настроить событие по расписанию в режиме поля времени коллекции и выбрать старт через 30 минут после создания заказа.

Полезные замечания

События по расписанию при неактивном или остановленном сервисе

Если условие времени выполнено, но сервис приложения NocoBase в этот момент неактивен или остановлен, задача, которая должна была сработать, будет пропущена. После перезапуска сервиса пропущенные задачи повторно не запускаются. Поэтому при использовании нужно предусмотреть обработку таких ситуаций или запасной механизм.

Количество повторов

Когда настроено условие завершения «по количеству повторов», считается общее количество выполнений по всем версиям одного и того же рабочего процесса. Например, если в версии 1 событие по расписанию уже выполнилось 10 раз и ограничение повторов также равно 10, рабочий процесс больше не будет запускаться. Даже если скопировать его в новую версию, запуск не произойдёт, пока количество повторов не будет увеличено до значения больше 10. Однако при копировании как нового рабочего процесса счётчик выполнений сбрасывается в 0. Без изменения конфигурации новый рабочий процесс сможет отработать ещё 10 раз.

Разница между интервалом и расширенным режимом в правилах повторения

Интервал в правиле повторения отсчитывается относительно времени последнего срабатывания (или времени старта), тогда как расширенный режим срабатывает в фиксированные моменты времени. Например, если настроен запуск каждые 30 минут и последнее срабатывание было в 2021-09-01 12:01:23, то следующее будет в 2021-09-01 12:31:23. Расширенный режим, то есть режим cron, настраивается на фиксированные точки времени, например запуск на 1-й и 31-й минутах каждого часа.

Пример

Предположим, нужно каждую минуту проверять заказы, не оплаченные более 30 минут с момента создания, и автоматически менять их статус на «отменён». Реализуем это в обоих режимах.

Режим пользовательского времени

Создайте рабочий процесс на основе события по расписанию. В конфигурации триггера выберите режим «Пользовательское время», установите время старта в любую точку не позже текущего времени, в правиле повторения выберите «Каждую минуту», а условие завершения оставьте пустым:

Событие по расписанию — настройка триггера: режим пользовательского времени

Затем настройте остальные узлы по логике процесса: вычислите момент 30 минут назад и измените статус неоплаченных заказов, созданных до этого момента, на «отменён»:

Событие по расписанию — логика процесса: режим пользовательского времени

После включения рабочий процесс будет запускаться каждую минуту от времени старта, вычислять момент 30 минут назад и обновлять статус заказов, созданных до этого времени, на «отменён».

Режим поля времени коллекции

Создайте рабочий процесс на основе события по расписанию. В конфигурации триггера выберите режим «Поле времени коллекции», укажите коллекцию «Заказы», задайте время старта через 30 минут после времени создания заказа и в правиле повторения выберите «Без повторения»:

Событие по расписанию — настройка триггера: режим поля времени коллекции

Затем настройте остальные узлы по логике процесса, чтобы обновлять статус заказа с ID из данных триггера и со статусом «неоплачен» на «отменён»:

Событие по расписанию — узел «Обновить запись»: режим поля времени коллекции

В отличие от режима пользовательского времени, здесь не нужно вычислять момент 30 минут назад, потому что контекст данных триггера уже содержит строку данных, удовлетворяющую временному условию, и можно напрямую обновлять статус соответствующего заказа.