События коллекции

Введение

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

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

Есть несколько типов изменений коллекции:

  1. После создания данных.
  2. После обновления данных.
  3. После создания или обновления данных.
  4. После удаления данных.

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

Вы можете выбирать момент срабатывания триггера в зависимости от бизнес-потребностей. Когда выбранное изменение включает обновление коллекции, можно также указать изменившиеся поля. Условие триггера выполняется только при изменении выбранных полей. Если поля не выбраны, это означает, что рабочий процесс может запуститься при изменении любого поля.

События коллекции — выбор изменённых полей

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

События коллекции — настройка условий данных

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

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

Срабатывание от массовых операций пока не поддерживается

События коллекции сейчас не поддерживают запуск от массовых операций с данными. Например, при создании статьи и одновременном добавлении нескольких тегов для статьи (данные связи «один-ко-многим») запустится только рабочий процесс создания статьи. Одновременно созданные теги не запустят рабочий процесс создания тегов. При связывании или добавлении данных связи «многие-ко-многим» рабочий процесс промежуточной коллекции также не запускается.

Операции с данными вне приложения не запускают события

Операции с коллекциями через HTTP API интерфейса приложения тоже могут запускать соответствующие события. Но если изменения данных делаются напрямую в базе данных, а не через приложение NocoBase, соответствующие события не запускаются. Например, нативные триггеры БД не будут связаны с рабочими процессами в приложении.

Также использование узла «Действие SQL» для операций в БД эквивалентно прямым операциям в базе и не запускает события коллекций.

Внешние источники данных

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

Пример

Рассмотрим пример сценария расчёта общей суммы и списания остатков после создания нового заказа.

Сначала создадим коллекции «Товары» и «Заказы» со следующими моделями данных:

Имя поляТип поля
Название товараОднострочный текст
ЦенаЧисло
ОстатокЦелое число
Имя поляТип поля
ID заказаПоследовательность
Товар в заказеМногие-к-одному (Товары)
Сумма заказаЧисло

И добавим базовые данные по товарам:

Название товараЦенаОстаток
iPhone 14 Pro799910
iPhone 13 Pro59990

Затем создайте рабочий процесс на основе события коллекции «Заказы»:

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

Ниже пример параметров конфигурации:

  • Коллекция: выберите коллекцию «Заказы».
  • Момент срабатывания: выберите «После создания данных».
  • Условия триггера: оставьте пустым.
  • Предзагрузка данных связей: отметьте «Товары».

Затем настройте остальные узлы по логике рабочего процесса: проверьте, больше ли остаток товара 0. Если да — спишите остаток; иначе заказ считается недействительным и должен быть удалён:

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

Настройки узлов подробно описаны в документации по соответствующим типам узлов.

Включите этот рабочий процесс и проверьте его, создав новый заказ через интерфейс. После заказа «iPhone 14 Pro» остаток соответствующего товара уменьшится до 9. Если оформить заказ на «iPhone 13 Pro», заказ будет удалён из-за недостаточного остатка.

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