Эта документация была автоматически переведена ИИ.
Все изменения данных в системе, которые вносят пользователи, обычно выполняются посредством какого-либо действия, как правило, путем нажатия кнопки. Эта кнопка может быть кнопкой отправки в форме или кнопкой действия в блоке данных. Событие после действия позволяет привязать соответствующие рабочие процессы к этим кнопкам, чтобы после успешного выполнения действия пользователя запускался определенный процесс.
Например, при добавлении или обновлении данных вы можете настроить для кнопки опцию «Привязать рабочий процесс». После завершения действия будет запущен привязанный рабочий процесс.
На уровне реализации, поскольку обработка событий после действия происходит на уровне промежуточного ПО (middleware Koa), вызовы HTTP API NocoBase также могут запускать определенные события после действия.
Это встроенный плагин, установка не требуется.
При создании рабочего процесса выберите тип «Событие после действия»:

Для событий после действия при создании вы также можете выбрать режим выполнения: «Синхронный» или «Асинхронный»:

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

Затем выберите режим запуска, доступны два режима: локальный и глобальный:

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

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

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


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

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

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

Если опустить последующую обработку финансовым отделом, то настройка процесса подачи заявления на возмещение расходов завершена. Когда сотрудник заполняет и отправляет заявление на возмещение расходов, запускается соответствующий рабочий процесс. Если сумма расходов меньше 500, запись будет создана автоматически и будет ожидать дальнейшей обработки финансовым отделом. В противном случае она будет рассмотрена руководителем, и после одобрения также будет создана запись и передана в финансовый отдел для обработки.
Процесс из этого примера также может быть настроен на обычной кнопке «Отправить». Вы можете решить, нужно ли сначала создавать запись, а затем выполнять последующие процессы, исходя из конкретного бизнес-сценария.
Запуск событий после действия не ограничивается операциями пользовательского интерфейса; их также можно запускать через вызовы HTTP API.
При запуске событий после действия через вызовы HTTP API вам также необходимо обратить внимание на статус включения рабочего процесса и на то, соответствует ли конфигурация коллекции, в противном случае вызов может не пройти успешно или может возникнуть ошибка.
Для рабочих процессов, локально привязанных к кнопке действия, вы можете вызвать их следующим образом (на примере кнопки создания коллекции posts):
Где параметр URL triggerWorkflows — это ключ рабочего процесса, несколько рабочих процессов разделяются запятыми. Этот ключ можно получить, наведя указатель мыши на имя рабочего процесса в верхней части холста рабочего процесса:

После успешного выполнения вышеуказанного вызова будет запущено событие после действия для соответствующей коллекции posts.
Поскольку внешние вызовы также должны основываться на идентификации пользователя, при вызове через HTTP API, как и при обычных запросах из интерфейса, необходимо предоставить информацию для аутентификации, включая заголовок запроса Authorization или параметр token (токен, полученный при входе в систему), а также заголовок запроса X-Role (имя текущей роли пользователя).
Если вам необходимо запустить событие для данных связи «один к одному» (связь «один ко многим» пока не поддерживается) в этой операции, вы можете использовать ! в параметре для указания данных триггера поля связи:
После успешного выполнения вышеуказанного вызова будет запущено событие после действия для соответствующей коллекции categories.
Если событие настроено в глобальном режиме, то нет необходимости использовать параметр URL triggerWorkflows для указания соответствующего рабочего процесса; достаточно просто вызвать соответствующее действие коллекции для запуска.
Как показано на рисунке ниже:

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