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

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

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

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

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

Кнопки, которые можно привязать к событию "До выполнения действия", в настоящее время поддерживают только кнопки "Отправить" (или "Сохранить"), "Обновить данные" и "Удалить" в формах создания или обновления. Кнопка "Запустить рабочий процесс" не поддерживается (ее можно привязать только к "Событию после выполнения действия").
В "Событии до выполнения действия" существуют два условия, которые приведут к перехвату соответствующей операции:
После выполнения условий перехвата соответствующее действие больше не будет выполняться. Например, если отправка заказа перехвачена, соответствующие данные заказа не будут созданы.
В рабочем процессе типа "Событие до выполнения действия" для различных операций в триггере доступны различные данные, которые можно использовать в качестве переменных в процессе:
| Тип действия \ Переменная | "Оператор" | "Идентификатор роли оператора" | Параметр действия: "ID" | Параметр действия: "Отправленный объект данных" |
|---|---|---|---|---|
| Создать запись | ✓ | ✓ | - | ✓ |
| Обновить запись | ✓ | ✓ | ✓ | ✓ |
| Удалить одну или несколько записей | ✓ | ✓ | ✓ | - |
Переменная "Данные триггера / Параметры действия / Отправленный объект данных" в событии "До выполнения действия" не является фактическими данными из базы данных, а представляет собой только параметры, отправленные с действием. Если вам нужны фактические данные из базы данных, вы должны запросить их с помощью узла "Запрос данных" в рабочем процессе.
Кроме того, для операции удаления, когда речь идет об одной записи, "ID" в параметрах действия является простым значением, а когда речь идет о нескольких записях, "ID" в параметрах действия является массивом.
После настройки триггера вы можете настроить соответствующую логику принятия решений в рабочем процессе. Обычно используется режим ветвления узла "Условие", чтобы на основе результатов конкретных бизнес-условий решить, "Завершить рабочий процесс" или нет, и вернуть предустановленное "Сообщение ответа":

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

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

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

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

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

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

Как видите, в ответном сообщении не указано, что первого продукта "iPhone 15 pro" нет в наличии, а только то, что второго продукта "iPhone 14 pro" недостаточно. Это связано с тем, что в цикле первого продукта было достаточно, поэтому он не был перехвачен, а второго продукта было недостаточно, что привело к перехвату отправки заказа.
Само событие "До выполнения действия" внедряется на этапе обработки запроса, поэтому оно также поддерживает запуск через вызовы HTTP API.
Для рабочих процессов, локально привязанных к кнопке действия, вы можете вызывать их следующим образом (на примере кнопки создания для коллекции posts):
Где параметр URL triggerWorkflows — это ключ рабочего процесса; несколько ключей рабочих процессов разделяются запятыми. Этот ключ можно получить, наведя курсор мыши на имя рабочего процесса в верхней части холста рабочего процесса:

После выполнения вышеуказанного вызова будет запущено событие "До выполнения действия" для соответствующей коллекции posts. После синхронной обработки соответствующего рабочего процесса данные будут созданы и возвращены в обычном режиме.
Если настроенный рабочий процесс достигает "Конечного узла", логика будет такой же, как и при работе с интерфейсом: запрос будет перехвачен, и данные не будут созданы. Если статус конечного узла настроен как "сбой", возвращаемый код состояния ответа будет 400; если "успешно", то 200.
Если перед конечным узлом также настроен узел "Сообщение ответа", сгенерированное сообщение также будет возвращено в результате ответа. Структура для ошибки выглядит следующим образом:
Структура сообщения, когда "Конечный узел" настроен на успешное выполнение:
Поскольку в рабочий процесс можно добавить несколько узлов "Сообщение ответа", структура данных возвращаемого сообщения представляет собой массив.
Если событие "До выполнения действия" настроено в глобальном режиме, при вызове HTTP API вам не нужно использовать параметр URL triggerWorkflows для указания соответствующего рабочего процесса. Достаточно просто вызвать соответствующее действие коллекции, чтобы запустить его.
При запуске события "До выполнения действия" через вызов HTTP API также необходимо обращать внимание на статус включения рабочего процесса и на соответствие конфигурации коллекции, иначе вызов может не завершиться успешно или привести к ошибке.