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

Триггер

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

Узел

Обзор

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

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

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

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

Вычисление

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

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

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

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

Ручная обработка
Согласование
Копия (CC)

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

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

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

Обзор
Расширенные типы триггеров
Расширенные типы узлов
Справочник 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 рабочего процесса.