Ця документація була автоматично перекладена штучним інтелектом.
Плагін "Подія 'До дії'" надає механізм перехоплення операцій, який може бути активований після надсилання запиту на створення, оновлення або видалення, але до його обробки.
Якщо в активованому робочому процесі виконується вузол "Завершити робочий процес", або якщо будь-який інший вузол не виконується (через помилку чи інше незавершення), дія форми буде перехоплена. В іншому випадку запланована дія буде виконана у звичайному режимі.
Використання цього плагіна разом із вузлом "Повідомлення-відповідь" дозволяє налаштувати повідомлення, яке повертатиметься клієнту, надаючи відповідні підказки. Події "До дії" можна використовувати для бізнес-валідації або логічних перевірок, щоб дозволити або перехопити запити клієнта на створення, оновлення та видалення.
Під час створення робочого процесу оберіть тип "Подія 'До дії'":

У тригері робочого процесу перехоплення насамперед потрібно налаштувати колекцію, що відповідає дії:

Потім оберіть режим перехоплення. Ви можете перехоплювати лише кнопки дій, прив'язані до цього робочого процесу, або перехоплювати всі вибрані дії для цієї колекції (незалежно від того, з якої форми вони походять, і без необхідності прив'язувати відповідний робочий процес):

Наразі підтримуються такі типи дій: "Створити", "Оновити" та "Видалити". Можна одночасно вибрати кілька типів дій.
Якщо в налаштуваннях тригера обрано режим "Запускати перехоплення лише при надсиланні форми, прив'язаної до цього робочого процесу", вам також потрібно повернутися до інтерфейсу форми та прив'язати цей робочий процес до відповідної кнопки дії:

У налаштуваннях прив'язки робочого процесу оберіть відповідний робочий процес. Зазвичай, для контексту даних, що запускають процес, достатньо залишити значення за замовчуванням "Усі дані форми":

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

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

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

Поєднуючи наведені вище базові інструкції, розглянемо сценарій "Надсилання замовлення" як приклад. Припустимо, нам потрібно перевіряти наявність усіх продуктів, обраних користувачем, під час надсилання замовлення. Якщо запасу будь-якого обраного продукту недостатньо, надсилання замовлення перехоплюється, і повертається відповідне повідомлення. Робочий процес буде циклічно перевіряти кожен продукт, доки запаси всіх продуктів не стануть достатніми, після чого він продовжиться та створить дані замовлення для користувача.
Інші кроки такі ж, як і в інструкціях. Однак, оскільки замовлення стосується кількох товарів, окрім додавання зв'язку "багато-до-багатьох" "Замовлення" <-- M:1 -- "Деталь замовлення" -- 1:M --> "Продукт" у моделі даних, вам також потрібно додати вузол "Цикл" у робочому процесі "Подія 'До дії'", щоб ітеративно перевіряти, чи достатньо запасу кожного продукту:

Об'єктом для циклу обирається масив "Деталі замовлення" з надісланих даних замовлення:

Вузол "Умова" всередині циклу використовується для визначення, чи достатньо запасу поточного об'єкта продукту в циклі:

Інші налаштування такі ж, як і в базовому використанні. Коли замовлення остаточно надсилається, якщо будь-який продукт має недостатній запас, надсилання замовлення буде перехоплено, і повернеться відповідне повідомлення. Під час тестування спробуйте надіслати замовлення з кількома продуктами, де один має недостатній запас, а інший — достатній. Ви побачите повернене повідомлення-відповідь:

Як бачите, у повідомленні-відповіді не вказується, що перший продукт "iPhone 15 pro" відсутній на складі, а лише другий продукт "iPhone 14 pro". Це тому, що в циклі перший продукт має достатній запас, тому його не перехоплюють, тоді як другий продукт має недостатній запас, що призводить до перехоплення надсилання замовлення.
Сама подія "До дії" вбудована на етапі обробки запиту, тому її також можна запускати за допомогою викликів HTTP API.
Для робочих процесів, які локально прив'язані до кнопки дії, ви можете викликати їх таким чином (на прикладі кнопки створення для колекції posts):
Де параметр URL triggerWorkflows — це ключ робочого процесу; кілька ключів робочих процесів розділяються комами. Цей ключ можна отримати, навівши курсор миші на назву робочого процесу у верхній частині полотна робочого процесу:

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