Уведомление о переводе ИИ

Эта документация была автоматически переведена ИИ.

Событие "До выполнения действия"

Workflow: Событие перед действиемCommunity Edition+

Введение

Плагин "Событие до выполнения действия" предоставляет механизм перехвата операций, который может быть запущен после отправки запроса на создание, обновление или удаление записи, но до его обработки.

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

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

Настройка триггера

Создание триггера

При создании рабочего процесса выберите тип "Событие до выполнения действия":

Создать событие до выполнения действия

Выбор коллекции

В триггере рабочего процесса перехвата первым делом необходимо настроить коллекцию, соответствующую действию:

Настройка события перехвата_Коллекция

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

Режим перехвата

Настройка события перехвата_Режим перехвата

В настоящее время поддерживаются следующие типы действий: "Создать", "Обновить" и "Удалить". Можно выбрать несколько типов действий одновременно.

Настройка действия

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

Добавить заказ_Привязать рабочий процесс

В настройках привязки рабочего процесса выберите соответствующий рабочий процесс. Обычно для контекста запуска данных достаточно выбрать значение по умолчанию "Все данные формы":

Выбрать рабочий процесс для привязки

Примечание

Кнопки, которые можно привязать к событию "До выполнения действия", в настоящее время поддерживают только кнопки "Отправить" (или "Сохранить"), "Обновить данные" и "Удалить" в формах создания или обновления. Кнопка "Запустить рабочий процесс" не поддерживается (ее можно привязать только к "Событию после выполнения действия").

Условия для перехвата

В "Событии до выполнения действия" существуют два условия, которые приведут к перехвату соответствующей операции:

  1. Рабочий процесс доходит до любого узла "Завершить рабочий процесс". Как и в предыдущих инструкциях, если данные, запустившие рабочий процесс, не соответствуют предустановленным условиям в узле "Условие", процесс перейдет в ветку "Нет" и выполнит узел "Завершить рабочий процесс". В этот момент рабочий процесс завершится, и запрошенное действие будет перехвачено.
  2. Любой узел в рабочем процессе завершается с ошибкой, включая ошибки выполнения узла или другие исключительные ситуации. В этом случае рабочий процесс завершится с соответствующим статусом, и запрошенное действие также будет перехвачено. Например, если рабочий процесс вызывает внешние данные через "HTTP-запрос" и запрос завершается неудачей, рабочий процесс завершится со статусом "сбой", и соответствующий запрос на действие также будет перехвачен.

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

Параметры, связанные с соответствующим действием

В рабочем процессе типа "Событие до выполнения действия" для различных операций в триггере доступны различные данные, которые можно использовать в качестве переменных в процессе:

Тип действия \ Переменная"Оператор""Идентификатор роли оператора"Параметр действия: "ID"Параметр действия: "Отправленный объект данных"
Создать запись-
Обновить запись
Удалить одну или несколько записей-
Примечание

Переменная "Данные триггера / Параметры действия / Отправленный объект данных" в событии "До выполнения действия" не является фактическими данными из базы данных, а представляет собой только параметры, отправленные с действием. Если вам нужны фактические данные из базы данных, вы должны запросить их с помощью узла "Запрос данных" в рабочем процессе.

Кроме того, для операции удаления, когда речь идет об одной записи, "ID" в параметрах действия является простым значением, а когда речь идет о нескольких записях, "ID" в параметрах действия является массивом.

Вывод ответного сообщения

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

Настройка рабочего процесса перехвата

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

Сообщение об ошибке

Статус ответного сообщения

Если узел "Завершить рабочий процесс" настроен на выход со статусом "Успешно", и этот узел выполняется, запрос на действие все равно будет перехвачен, но возвращенное ответное сообщение будет отображаться со статусом "Успешно" (а не "Ошибка"):

Сообщение об успешном выполнении

Пример

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

Остальные шаги аналогичны описанным в инструкциях. Однако, поскольку заказ включает в себя несколько товаров, помимо добавления отношения "многие ко многим" "Заказ" <-- M:1 -- "Позиция заказа" -- 1:M --> "Продукт" при моделировании данных, вам также необходимо добавить узел "Цикл" в рабочий процесс "Событие до выполнения действия", чтобы итеративно проверять, достаточно ли запасов каждого продукта:

Пример_Рабочий процесс циклической проверки

В качестве объекта для цикла выбирается массив "Позиции заказа" из отправленных данных заказа:

Пример_Настройка объекта цикла

Узел условия в циклическом процессе используется для определения, достаточно ли запасов текущего объекта продукта в цикле:

Пример_Условие в цикле

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

Пример_Сообщение ответа после отправки

Как видите, в ответном сообщении не указано, что первого продукта "iPhone 15 pro" нет в наличии, а только то, что второго продукта "iPhone 14 pro" недостаточно. Это связано с тем, что в цикле первого продукта было достаточно, поэтому он не был перехвачен, а второго продукта было недостаточно, что привело к перехвату отправки заказа.

Внешний вызов

Само событие "До выполнения действия" внедряется на этапе обработки запроса, поэтому оно также поддерживает запуск через вызовы HTTP API.

Для рабочих процессов, локально привязанных к кнопке действия, вы можете вызывать их следующим образом (на примере кнопки создания для коллекции posts):

curl -X POST -H 'Authorization: Bearer <your token>' -H 'X-Role: <roleName>' -d \
  '{
    "title": "Hello, world!",
    "content": "This is a test post."
  }'
  "http://localhost:3000/api/posts:create?triggerWorkflows=workflowKey"

Где параметр URL triggerWorkflows — это ключ рабочего процесса; несколько ключей рабочих процессов разделяются запятыми. Этот ключ можно получить, наведя курсор мыши на имя рабочего процесса в верхней части холста рабочего процесса:

Рабочий процесс_Ключ_Способ просмотра

После выполнения вышеуказанного вызова будет запущено событие "До выполнения действия" для соответствующей коллекции posts. После синхронной обработки соответствующего рабочего процесса данные будут созданы и возвращены в обычном режиме.

Если настроенный рабочий процесс достигает "Конечного узла", логика будет такой же, как и при работе с интерфейсом: запрос будет перехвачен, и данные не будут созданы. Если статус конечного узла настроен как "сбой", возвращаемый код состояния ответа будет 400; если "успешно", то 200.

Если перед конечным узлом также настроен узел "Сообщение ответа", сгенерированное сообщение также будет возвращено в результате ответа. Структура для ошибки выглядит следующим образом:

{
  "errors": [
    {
      "message": "message from 'Response message' node"
    }
  ]
}

Структура сообщения, когда "Конечный узел" настроен на успешное выполнение:

{
  "messages": [
    {
      "message": "message from 'Response message' node"
    }
  ]
}
Примечание

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

Если событие "До выполнения действия" настроено в глобальном режиме, при вызове HTTP API вам не нужно использовать параметр URL triggerWorkflows для указания соответствующего рабочего процесса. Достаточно просто вызвать соответствующее действие коллекции, чтобы запустить его.

curl -X POST -H 'Authorization: Bearer <your token>' -H 'X-Role: <roleName>' -d \
  '{
    "title": "Hello, world!",
    "content": "This is a test post."
  }'
  "http://localhost:3000/api/posts:create"
Примечание

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