logologo
Úvod
Manuál
Vývoj
Pluginy
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Úvod
Manuál
Vývoj
Pluginy
API
logologo
Workflow
Přehled
Rychlý start

Spouštěče

Přehled
Události databázové tabulky
Plánované úlohy
Události před akcí
Události po akci
Vlastní události akcí
Schvalování
Webhook

Uzel

Přehled

Umělá inteligence (AI)

Velké jazykové modely (LLM)

Řízení toku

Podmínka
Větvení podle podmínek
Smyčka
Proměnná
Paralelní větvení
Volání workflow
Výstup procesu
Mapování JSON proměnných
Zpoždění
Ukončení

Výpočet

Výpočet
Výpočty s datem
Výpočty s JSON

Operace s daty

Přidat data
Aktualizovat data
Načíst data
Odstranit data
SQL operace

Ruční zpracování

Ruční zpracování
Schvalování
Odeslat kopii (CC)

Rozšířené typy

HTTP požadavek
JavaScript skript
Oznámení
Odeslání e-mailu
Odpověď
Zpráva v odpovědi
Proměnná
Záznamy o spuštění
Správa verzí
Pokročilé možnosti

Vývoj rozšíření

Přehled
Rozšířené typy spouštěčů
Rozšířené typy uzlů
API reference
Previous PageRozšířené typy uzlů
TIP

Tento dokument byl přeložen umělou inteligencí. V případě nepřesností se prosím obraťte na anglickou verzi

#Referenční příručka API

#Na straně serveru

Níže je uveden kód, který ukazuje dostupná API ve struktuře serverového balíčku:

import PluginWorkflowServer, {
  Trigger,
  Instruction,
  EXECUTION_STATUS,
  JOB_STATUS,
} from '@nocobase/plugin-workflow';

#PluginWorkflowServer

Třída pluginu pro pracovní postupy.

Během běhu aplikace můžete obvykle získat instanci pluginu pro pracovní postupy (dále jen plugin) voláním app.pm.get<PluginWorkflowServer>(PluginWorkflowServer) kdekoli, kde je dostupná instance aplikace app.

#registerTrigger()

Rozšiřuje a registruje nový typ triggeru.

Podpis

registerTrigger(type: string, trigger: typeof Trigger | Trigger })

Parametry

ParametrTypPopis
typestringIdentifikátor typu triggeru
triggertypeof Trigger | TriggerTyp nebo instance triggeru

Příklad

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

function handler(this: MyTrigger, workflow: WorkflowModel, message: string) {
  // trigger workflow
  this.workflow.trigger(workflow, { data: message.data });
}

class MyTrigger extends Trigger {
  messageHandlers: Map<number, WorkflowModel> = new Map();
  on(workflow: WorkflowModel) {
    const messageHandler = handler.bind(this, workflow);
    // listen some event to trigger workflow
    process.on(
      'message',
      this.messageHandlers.set(workflow.id, messageHandler),
    );
  }

  off(workflow: WorkflowModel) {
    const messageHandler = this.messageHandlers.get(workflow.id);
    // remove listener
    process.off('message', messageHandler);
  }
}

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

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

#registerInstruction()

Rozšiřuje a registruje nový typ uzlu.

Podpis

registerInstruction(type: string, instruction: typeof Instruction | Instruction })

Parametry

ParametrTypPopis
typestringIdentifikátor typu instruction
instructiontypeof Instruction | InstructionTyp nebo instance instruction

Příklad

import PluginWorkflowServer, { Instruction, JOB_STATUS } from '@nocobase/plugin-workflow';

class LogInstruction extends Instruction {
  run(node, input, processor) {
    console.log('my instruction runs!');
    return {
      status: JOB_STATUS.RESOVLED,
    };
  },
};

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

    // register instruction
    workflowPlugin.registerInstruction('log', LogInstruction);
  }
}

#trigger()

Spustí konkrétní pracovní postup. Používá se především v uživatelských triggerech k spuštění odpovídajícího pracovního postupu, když je detekována specifická uživatelská událost.

Podpis

trigger(workflow: Workflow, context: any)

Parametry

ParametrTypPopis
workflowWorkflowModelObjekt pracovního postupu, který má být spuštěn
contextobjectKontextová data poskytnutá při spuštění
Tip

context je v současné době povinná položka. Pokud ji neposkytnete, pracovní postup se nespustí.

Příklad

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

class MyTrigger extends Trigger {
  timer: NodeJS.Timeout;

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

#resume()

Obnoví provádění čekajícího pracovního postupu s konkrétní úlohou uzlu.

  • Obnovit lze pouze pracovní postupy ve stavu spuštěno (EXECUTION_STATUS.STARTED), které čekají.
  • Obnovit lze pouze úlohy uzlů v čekajícím stavu (JOB_STATUS.PENDING).

Podpis

resume(job: JobModel)

Parametry

ParametrTypPopis
jobJobModelAktualizovaný objekt úlohy
Tip

Předaný objekt úlohy je obvykle aktualizovaný objekt a jeho status se obvykle aktualizuje na hodnotu jinou než JOB_STATUS.PENDING, jinak bude nadále čekat.

Příklad

Podrobnosti naleznete ve zdrojovém kódu.

#Trigger

Základní třída pro triggery, sloužící k rozšíření vlastních typů triggerů.

ParametrTypPopis
constructor(public readonly workflow: PluginWorkflowServer): TriggerKonstruktor
on?(workflow: WorkflowModel): voidObsluha událostí po povolení pracovního postupu
off?(workflow: WorkflowModel): voidObsluha událostí po zakázání pracovního postupu

on/off se používají k registraci/zrušení registrace posluchačů událostí při povolení/zakázání pracovního postupu. Předaný parametr je instance pracovního postupu odpovídajícího triggeru, kterou lze zpracovat podle příslušné konfigurace. Některé typy triggerů, které již mají globálně naslouchající události, nemusí tyto dvě metody implementovat. Například u časovaného triggeru můžete zaregistrovat časovač v on a zrušit jeho registraci v off.

#Instruction

Základní třída instruction, sloužící k rozšíření vlastních typů uzlů.

ParametrTypPopis
constructor(public readonly workflow: PluginWorkflowServer): InstructionKonstruktor
runRunnerLogika provádění při prvním vstupu do uzlu
resume?RunnerLogika provádění při vstupu do uzlu po obnovení z přerušení
getScope?(node: FlowNodeModel, data: any, processor: Processor): anyPoskytuje obsah lokálních proměnných pro větev generovanou odpovídajícím uzlem

Související typy

export type Job =
  | {
      status: JOB_STATUS[keyof JOB_STATUS];
      result?: unknown;
      [key: string]: unknown;
    }
  | JobModel
  | null;

export type InstructionResult = Job | Promise<Job>;

export type Runner = (
  node: FlowNodeModel,
  input: JobModel,
  processor: Processor,
) => InstructionResult;

export class Instruction {
  run: Runner;
  resume?: Runner;
}

Pro getScope se můžete podívat na implementaci uzlu cyklu, která slouží k poskytování obsahu lokálních proměnných pro větve.

#EXECUTION_STATUS

Tabulka konstant pro stavy plánu provádění pracovního postupu, sloužící k identifikaci aktuálního stavu odpovídajícího plánu provádění.

Název konstantyVýznam
EXECUTION_STATUS.QUEUEINGVe frontě
EXECUTION_STATUS.STARTEDSpuštěno
EXECUTION_STATUS.RESOLVEDÚspěšně dokončeno
EXECUTION_STATUS.FAILEDSelhalo
EXECUTION_STATUS.ERRORChyba provádění
EXECUTION_STATUS.ABORTEDPřerušeno
EXECUTION_STATUS.CANCELEDZrušeno
EXECUTION_STATUS.REJECTEDOdmítnuto
EXECUTION_STATUS.RETRY_NEEDEDNebylo úspěšně provedeno, je potřeba opakovat

Kromě prvních tří představují všechny ostatní stavy selhání, ale mohou být použity k popisu různých důvodů selhání.

#JOB_STATUS

Tabulka konstant pro stavy úloh uzlů pracovního postupu, sloužící k identifikaci aktuálního stavu odpovídající úlohy uzlu. Stav generovaný uzlem zároveň ovlivňuje stav celého plánu provádění.

Název konstantyVýznam
JOB_STATUS.PENDINGČekající: Provádění dosáhlo tohoto uzlu, ale instruction vyžaduje pozastavení a čekání
JOB_STATUS.RESOLVEDÚspěšně dokončeno
JOB_STATUS.FAILEDSelhalo: Provádění tohoto uzlu nesplnilo konfigurované podmínky
JOB_STATUS.ERRORChyba: Během provádění tohoto uzlu došlo k neošetřené chybě
JOB_STATUS.ABORTEDPřerušeno: Provádění tohoto uzlu bylo ukončeno jinou logikou poté, co bylo v čekajícím stavu
JOB_STATUS.CANCELEDZrušeno: Provádění tohoto uzlu bylo ručně zrušeno poté, co bylo v čekajícím stavu
JOB_STATUS.REJECTEDOdmítnuto: Pokračování tohoto uzlu bylo ručně odmítnuto poté, co bylo v čekajícím stavu
JOB_STATUS.RETRY_NEEDEDNebylo úspěšně provedeno, je potřeba opakovat

#Na straně klienta

Níže je uveden kód, který ukazuje dostupná API ve struktuře klientského balíčku:

import PluginWorkflowClient, {
  Trigger,
  Instruction,
} from '@nocobase/plugin-workflow/client';

#PluginWorkflowClient

#registerTrigger()

Registruje konfigurační panel pro odpovídající typ triggeru.

Podpis

registerTrigger(type: string, trigger: typeof Trigger | Trigger): void

Parametry

ParametrTypPopis
typestringIdentifikátor typu triggeru, konzistentní s identifikátorem použitým pro registraci
triggertypeof Trigger | TriggerTyp nebo instance triggeru

#registerInstruction()

Registruje konfigurační panel pro odpovídající typ uzlu.

Podpis

registerInstruction(type: string, instruction: typeof Instruction | Instruction): void

Parametry

ParametrTypPopis
typestringIdentifikátor typu uzlu, konzistentní s identifikátorem použitým pro registraci
instructiontypeof Instruction | InstructionTyp nebo instance instruction

#registerInstructionGroup()

Registruje skupinu typů uzlů. NocoBase ve výchozím nastavení poskytuje 4 skupiny typů uzlů:

  • 'control':Řídicí
  • 'collection':Operace s kolekcemi
  • 'manual':Ruční zpracování
  • 'extended':Další rozšíření

Pokud potřebujete rozšířit další skupiny, můžete je zaregistrovat pomocí této metody.

Podpis

registerInstructionGroup(type: string, group: { label: string }): void

Parametry

ParametrTypPopis
typestringIdentifikátor skupiny uzlů, konzistentní s identifikátorem použitým pro registraci
group{ label: string }Informace o skupině, v současné době obsahuje pouze název

Příklad

export default class YourPluginClient extends Plugin {
  load() {
    const pluginWorkflow = this.app.pm.get(PluginWorkflowClient);

    pluginWorkflow.registerInstructionGroup('ai', { label: `{{t("AI", { ns: "${NAMESPACE}" })}}` });
  }
}

#Trigger

Základní třída pro triggery, sloužící k rozšíření vlastních typů triggerů.

ParametrTypPopis
titlestringNázev typu triggeru
fieldset{ [key: string]: ISchema }Sada konfiguračních položek triggeru
scope?{ [key: string]: any }Sada objektů, které mohou být použity ve Schema konfiguračních položek
components?{ [key: string]: React.FC }Sada komponent, které mohou být použity ve Schema konfiguračních položek
useVariables?(config: any, options: UseVariableOptions ) => VariableOptionsPřistupovač hodnot pro kontextová data triggeru
  • Pokud useVariables není nastaveno, znamená to, že tento typ triggeru neposkytuje funkci pro získání hodnot a kontextová data triggeru nelze vybrat v uzlech pracovního postupu.

#Instruction

Základní třída instruction, sloužící k rozšíření vlastních typů uzlů.

ParametrTypPopis
groupstringIdentifikátor skupiny typů uzlů, aktuálně dostupné možnosti: 'control'/'kolekce'/'manual'/'extended'
fieldsetRecord<string, ISchema>Sada konfiguračních položek uzlu
scope?Record<string, Function>Sada objektů, které mohou být použity ve Schema konfiguračních položek
components?Record<string, React.FC>Sada komponent, které mohou být použity ve Schema konfiguračních položek
Component?React.FCVlastní komponenta pro vykreslování uzlu
useVariables?(node, options: UseVariableOptions) => VariableOptionMetoda pro uzel k poskytování možností proměnných uzlu
useScopeVariables?(node, options?) => VariableOptionsMetoda pro uzel k poskytování možností lokálních proměnných větve
useInitializers?(node) => SchemaInitializerItemTypeMetoda pro uzel k poskytování možností inicializátoru
isAvailable?(ctx: NodeAvailableContext) => booleanMetoda pro určení, zda je uzel dostupný

Související typy

export type NodeAvailableContext = {
  workflow: object;
  upstream: object;
  branchIndex: number;
};
  • Pokud useVariables není nastaveno, znamená to, že tento typ uzlu neposkytuje funkci pro získání hodnot a data výsledku tohoto typu uzlu nelze vybrat v uzlech pracovního postupu. Pokud je výsledná hodnota singulární (nelze ji vybrat), můžete vrátit statický obsah, který vyjadřuje odpovídající informaci (viz: zdrojový kód uzlu pro výpočet). Pokud je potřeba, aby byla volitelná (např. vlastnost objektu), můžete přizpůsobit výstup odpovídající komponenty pro výběr (viz: zdrojový kód uzlu pro vytvoření dat).
  • Component je vlastní komponenta pro vykreslování uzlu. Pokud výchozí vykreslování uzlu není dostatečné, lze ji zcela přepsat a použít pro vlastní vykreslování pohledu uzlu. Například, pokud potřebujete poskytnout více akčních tlačítek nebo jiných interakcí pro počáteční uzel typu větve, použijte tuto metodu (viz: zdrojový kód paralelní větve).
  • useInitializers se používá k poskytování metody pro inicializaci bloků. Například v manuálním uzlu můžete inicializovat související uživatelské bloky na základě předchozích uzlů. Pokud je tato metoda poskytnuta, bude dostupná při inicializaci bloků v konfiguraci rozhraní manuálního uzlu (viz: zdrojový kód uzlu pro vytvoření dat).
  • isAvailable se primárně používá k určení, zda lze uzel použít (přidat) v aktuálním prostředí. Aktuální prostředí zahrnuje aktuální pracovní postup, předchozí uzly a index aktuální větve.