logologo
Начало
Руководство
Разработка
Плагины
API
Главная
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Начало
Руководство
Разработка
Плагины
API
Главная
logologo
Рабочий процесс
Обзор
Быстрый старт

Триггеры

Обзор
Событие коллекции
Запланированная задача
Событие до действия
Событие после действия
Событие пользовательского действия
Одобрение
Webhook

Узлы

Обзор

Искусственный интеллект

Большая языковая модель

Управление потоком

Условие
Ветвление по нескольким условиям
Цикл
Переменные
Параллельное ветвление
Вызов рабочего процесса
Вывод потока
Сопоставление переменных JSON
Задержка
Конец

Вычисления

Вычисление
Вычисление даты
Вычисление JSON

Операции с данными

Создание данных
Обновление данных
Запрос данных
Удаление данных
Операция SQL

Ручная обработка

Ручная обработка
Одобрение
Копия (CC)

Расширенные типы

HTTP-запрос
JavaScript-скрипт
Уведомление
Отправка почты
Ответ
Сообщение ответа
Переменные
История выполнения
Управление версиями
Расширенные параметры

Разработка расширений

Обзор
Расширение типов триггеров
Расширение типов узлов
Справочник API
Previous PageОбзор
Next PageРасширение типов узлов
Уведомление о переводе ИИ

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

#Расширение типов триггеров

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

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

Типы триггеров регистрируются в таблице триггеров плагина на основе строкового идентификатора. Плагин рабочего процесса имеет несколько встроенных триггеров:

  • 'collection': Срабатывает при операциях с коллекциями;
  • 'schedule': Срабатывает по расписанию (запланированные задачи);
  • 'action': Срабатывает после выполнения действия;

Расширенные типы триггеров должны иметь уникальные идентификаторы. Реализация подписки/отписки для триггера регистрируется на стороне сервера, а реализация интерфейса конфигурации — на стороне клиента.

#Серверная часть

Любой триггер должен наследоваться от базового класса Trigger и реализовывать методы on/off, которые используются для подписки и отписки от определенных событий среды соответственно. В методе on вам нужно вызвать this.workflow.trigger() внутри функции обратного вызова события, чтобы в конечном итоге запустить событие. Кроме того, в методе off необходимо выполнить соответствующую очистку, связанную с отпиской.

this.workflow — это экземпляр плагина рабочего процесса, переданный в конструктор базового класса Trigger.

import { Trigger } from '@nocobase/plugin-workflow';

class MyTrigger extends Trigger {
  timer: NodeJS.Timeout;

  on(workflow) {
    // register event
    this.timer = setInterval(() => {
      // trigger workflow
      this.workflow.trigger(workflow, { date: new Date() });
    }, workflow.config.interval ?? 60000);
  }

  off(workflow) {
    // unregister event
    clearInterval(this.timer);
  }
}

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

import WorkflowPlugin from '@nocobase/plugin-workflow';

export default class MyPlugin extends Plugin {
  load() {
    // get workflow plugin instance
    const workflowPlugin = this.app.pm.get(WorkflowPlugin) as WorkflowPlugin;

    // register trigger
    workflowPlugin.registerTrigger('interval', MyTrigger);
  }
}

После запуска и загрузки сервера триггер типа 'interval' может быть добавлен и выполнен.

#Клиентская часть

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

Например, для вышеупомянутого триггера с запланированным выполнением определите необходимый параметр конфигурации интервала времени (interval) в форме интерфейса конфигурации:

import { Trigger } from '@nocobase/workflow/client';

class MyTrigger extends Trigger {
  title = 'Interval timer trigger';
  // fields of trigger config
  fieldset = {
    interval: {
      type: 'number',
      title: 'Interval',
      name: 'config.interval',
      'x-decorator': 'FormItem',
      'x-component': 'InputNumber',
      default: 60000,
    },
  };
}

Затем зарегистрируйте этот тип триггера в экземпляре плагина рабочего процесса внутри расширенного плагина:

import { Plugin } from '@nocobase/client';
import WorkflowPlugin from '@nocobase/plugin-workflow/client';

import MyTrigger from './MyTrigger';

export default class extends Plugin {
  // You can get and modify the app instance here
  async load() {
    const workflow = this.app.pm.get(WorkflowPlugin) as WorkflowPlugin;
    workflow.registerTrigger('interval', MyTrigger);
  }
}

После этого новый тип триггера станет виден в интерфейсе конфигурации рабочего процесса.

Примечание

Идентификатор типа триггера, зарегистрированный на стороне клиента, должен совпадать с идентификатором на стороне сервера, иначе это приведет к ошибкам.

Другие подробности по определению типов триггеров см. в разделе Справочник по API рабочего процесса.