logologo
Start
Manual
Utveckling
Plugins
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Start
Manual
Utveckling
Plugins
API
logologo
Arbetsflöden
Översikt
Snabbstart

Triggers

Översikt
Datatabellhändelser
Schemalagda jobb
Före-åtgärd-händelser
Efter-åtgärd-händelser
Anpassade åtgärdshändelser
Godkännande
Webhooks

Noder

Översikt

AI

LLM

Flödeskontroll

Villkor
Fler-villkors-gren
Loop
Variabler
Parallell gren
Anropa arbetsflöde
Flödes-output
JSON-variabelmappning
Fördröjning
Avsluta

Beräkning

Beräkning
Datumberäkning
JSON-beräkning

Dataåtgärder

Lägg till data
Uppdatera data
Fråga data
Ta bort data
SQL-åtgärder

Manuell hantering

Manuell hantering
Godkännande
CC

Utökade typer

HTTP-förfrågningar
JavaScript-skript
Notiser
Skicka e-post
Svar
Svarsmeddelande
Variabler
Exekveringshistorik
Versionshantering
Avancerade alternativ

Utökningsutveckling

Översikt
Utöka trigger-typer
Utöka nodtyper
API-referens
Previous PageUtöka nodtyper
TIP

Detta dokument har översatts av AI. För eventuella felaktigheter, se den engelska versionen

#API-referens

#Serversidan

De API:er som är tillgängliga i serverpaketstrukturen visas i följande kod:

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

#PluginWorkflowServer

Klassen för arbetsflödes-plugin.

Vanligtvis, under applikationens körtid, kan ni anropa app.pm.get<PluginWorkflowServer>(PluginWorkflowServer) var som helst där ni kan få applikationsinstansen app för att hämta instansen av arbetsflödes-pluginen (nedan kallad plugin).

#registerTrigger()

Utökar och registrerar en ny typ av utlösare.

Signatur

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

Parametrar

ParameterTypBeskrivning
typestringIdentifierare för utlösartyp
triggertypeof Trigger | TriggerUtlösartyp eller instans

Exempel

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

function handler(this: MyTrigger, workflow: WorkflowModel, message: string) {
  // utlös arbetsflödet
  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);
    // lyssna på en händelse för att utlösa arbetsflödet
    process.on(
      'message',
      this.messageHandlers.set(workflow.id, messageHandler),
    );
  }

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

export default class MyPlugin extends Plugin {
  load() {
    // hämta instans av arbetsflödes-plugin
    const workflowPlugin =
      this.app.pm.get<PluginWorkflowServer>(PluginWorkflowServer);

    // registrera utlösare
    workflowPlugin.registerTrigger('myTrigger', MyTrigger);
  }
}

#registerInstruction()

Utökar och registrerar en ny nodtyp.

Signatur

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

Parametrar

ParameterTypBeskrivning
typestringIdentifierare för instruktionstyp
instructiontypeof Instruction | InstructionInstruktionstyp eller instans

Exempel

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() {
    // hämta instans av arbetsflödes-plugin
    const workflowPlugin = this.app.pm.get<PluginWorkflowServer>(PluginWorkflowServer);

    // registrera instruktion
    workflowPlugin.registerInstruction('log', LogInstruction);
  }
}

#trigger()

Utlöser ett specifikt arbetsflöde. Används främst i anpassade utlösare för att utlösa det motsvarande arbetsflödet när en specifik anpassad händelse upptäcks.

Signatur

trigger(workflow: Workflow, context: any)

Parametrar

ParameterTypBeskrivning
workflowWorkflowModelArbetsflödesobjektet som ska utlösas
contextobjectKontextdata som tillhandahålls vid utlösning
Tips

context är för närvarande ett obligatoriskt fält. Om det inte tillhandahålls kommer arbetsflödet inte att utlösas.

Exempel

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

class MyTrigger extends Trigger {
  timer: NodeJS.Timeout;

  on(workflow) {
    // registrera händelse
    this.timer = setInterval(() => {
      // utlös arbetsflödet
      this.plugin.trigger(workflow, { date: new Date() });
    }, workflow.config.interval ?? 60000);
  }
}

#resume()

Återupptar ett väntande arbetsflöde med en specifik noduppgift.

  • Endast arbetsflöden i väntande tillstånd (EXECUTION_STATUS.STARTED) kan återupptas.
  • Endast noduppgifter i väntande tillstånd (JOB_STATUS.PENDING) kan återupptas.

Signatur

resume(job: JobModel)

Parametrar

ParameterTypBeskrivning
jobJobModelDet uppdaterade uppgiftsobjektet
Tips

Det skickade uppgiftsobjektet är vanligtvis ett uppdaterat objekt, och dess status uppdateras vanligtvis till ett värde som inte är JOB_STATUS.PENDING, annars kommer det att fortsätta att vänta.

Exempel

Se källkoden för mer information.

#Trigger

Basklass för utlösare, används för att utöka anpassade utlösartyper.

ParameterTypBeskrivning
constructor(public readonly workflow: PluginWorkflowServer): TriggerKonstruktor
on?(workflow: WorkflowModel): voidHändelsehanterare efter att ett arbetsflöde har aktiverats
off?(workflow: WorkflowModel): voidHändelsehanterare efter att ett arbetsflöde har inaktiverats

on/off används för att registrera/avregistrera händelselyssnare när ett arbetsflöde aktiveras/inaktiveras. Den skickade parametern är arbetsflödesinstansen som motsvarar utlösaren, och kan hanteras enligt den relevanta konfigurationen. Vissa utlösartyper som redan har globalt lyssnade händelser behöver inte implementera dessa två metoder. Till exempel, i en schemalagd utlösare kan ni registrera en timer i on och avregistrera den i off.

#Instruction

Basklass för instruktionstyper, används för att utöka anpassade instruktionstyper.

ParameterTypBeskrivning
constructor(public readonly workflow: PluginWorkflowServer): InstructionKonstruktor
runRunnerExekveringslogik för första inträdet i noden
resume?RunnerExekveringslogik för inträde i noden efter återupptagande från ett avbrott
getScope?(node: FlowNodeModel, data: any, processor: Processor): anyTillhandahåller lokalt variabelinnehåll för den gren som genereras av den motsvarande noden

Relaterade typer

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;
}

För getScope kan ni referera till implementeringen av loopnoden, som används för att tillhandahålla lokalt variabelinnehåll för grenar.

#EXECUTION_STATUS

En konstanttabell för statusar för arbetsflödesexekveringsplaner, används för att identifiera den aktuella statusen för den motsvarande exekveringsplanen.

KonstantnamnBetydelse
EXECUTION_STATUS.QUEUEINGI kö
EXECUTION_STATUS.STARTEDPåbörjad
EXECUTION_STATUS.RESOLVEDSlutförd
EXECUTION_STATUS.FAILEDMisslyckad
EXECUTION_STATUS.ERRORExekveringsfel
EXECUTION_STATUS.ABORTEDAvbruten
EXECUTION_STATUS.CANCELEDAnnullerad
EXECUTION_STATUS.REJECTEDAvvisad
EXECUTION_STATUS.RETRY_NEEDEDEj slutförd, kräver omförsök

Förutom de tre första representerar alla andra ett misslyckat tillstånd, men kan användas för att beskriva olika orsaker till felet.

#JOB_STATUS

En konstanttabell för statusar för arbetsflödesnoduppgifter, används för att identifiera den aktuella statusen för den motsvarande noduppgiften. Statusen som genereras av noden påverkar också statusen för hela exekveringsplanen.

KonstantnamnBetydelse
JOB_STATUS.PENDINGVäntande: Exekveringen har nått denna nod, men instruktionen kräver att den pausas och väntar
JOB_STATUS.RESOLVEDSlutförd
JOB_STATUS.FAILEDMisslyckad: Exekveringen av denna nod uppfyllde inte de konfigurerade villkoren
JOB_STATUS.ERRORFel: Ett ohanterat fel uppstod under exekveringen av denna nod
JOB_STATUS.ABORTEDAvbruten: Exekveringen av denna nod avslutades av annan logik efter att ha varit i väntande tillstånd
JOB_STATUS.CANCELEDAnnullerad: Exekveringen av denna nod avbröts manuellt efter att ha varit i väntande tillstånd
JOB_STATUS.REJECTEDAvvisad: Fortsättningen av denna nod avvisades manuellt efter att ha varit i väntande tillstånd
JOB_STATUS.RETRY_NEEDEDEj slutförd, kräver omförsök

#Klientsidan

De API:er som är tillgängliga i klientpaketstrukturen visas i följande kod:

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

#PluginWorkflowClient

#registerTrigger()

Registrerar konfigurationspanelen för utlösartypen.

Signatur

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

Parametrar

ParameterTypBeskrivning
typestringIdentifierare för utlösartyp, konsekvent med den identifierare som används för registrering
triggertypeof Trigger | TriggerUtlösartyp eller instans

#registerInstruction()

Registrerar konfigurationspanelen för nodtypen.

Signatur

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

Parametrar

ParameterTypBeskrivning
typestringIdentifierare för nodtyp, konsekvent med den identifierare som används för registrering
instructiontypeof Instruction | InstructionNodtyp eller instans

#registerInstructionGroup()

Registrerar en nodtypsgrupp. NocoBase tillhandahåller som standard 4 nodtypsgrupper:

  • 'control': Kontroll
  • 'collection': samling-operationer
  • 'manual': Manuell hantering
  • 'extended' : Andra utökningar

Om ni behöver utöka med andra grupper kan ni använda denna metod för att registrera dem.

Signatur

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

Parametrar

ParameterTypBeskrivning
typestringIdentifierare för nodgrupp, konsekvent med den identifierare som används för registrering
group{ label: string }Gruppinformation, innehåller för närvarande endast titeln

Exempel

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

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

#Trigger

Basklass för utlösare, används för att utöka anpassade utlösartyper.

ParameterTypBeskrivning
titlestringNamn på utlösartyp
fieldset{ [key: string]: ISchema }samling av utlösarkonfigurationsposter
scope?{ [key: string]: any }samling av objekt som kan användas i konfigurationspostens Schema
components?{ [key: string]: React.FC }samling av komponenter som kan användas i konfigurationspostens Schema
useVariables?(config: any, options: UseVariableOptions ) => VariableOptionsVärdeåtkomst för utlösarens kontextdata
  • Om useVariables inte är inställt betyder det att denna typ av utlösare inte tillhandahåller en funktion för värdehämtning, och utlösarens kontextdata kan inte väljas i arbetsflödets noder.

#Instruction

Basklass för instruktioner, används för att utöka anpassade nodtyper.

ParameterTypBeskrivning
groupstringIdentifierare för nodtypsgrupp, för närvarande tillgängliga alternativ: 'control'/'collection'/'manual'/'extended'
fieldsetRecord<string, ISchema>samling av nodkonfigurationsposter
scope?Record<string, Function>samling av objekt som kan användas i konfigurationspostens Schema
components?Record<string, React.FC>samling av komponenter som kan användas i konfigurationspostens Schema
Component?React.FCAnpassad renderingskomponent för noden
useVariables?(node, options: UseVariableOptions) => VariableOptionMetod för noden att tillhandahålla nodvariabelalternativ
useScopeVariables?(node, options?) => VariableOptionsMetod för noden att tillhandahålla lokala variabelalternativ för grenar
useInitializers?(node) => SchemaInitializerItemTypeMetod för noden att tillhandahålla initialiseringsalternativ
isAvailable?(ctx: NodeAvailableContext) => booleanMetod för att avgöra om noden är tillgänglig

Relaterade typer

export type NodeAvailableContext = {
  workflow: object;
  upstream: object;
  branchIndex: number;
};
  • Om useVariables inte är inställt betyder det att denna nodtyp inte tillhandahåller en funktion för värdehämtning, och resultatdata från denna typ av nod kan inte väljas i arbetsflödets noder. Om resultatvärdet är singulärt (inte valbart), kan ni returnera statiskt innehåll som uttrycker den motsvarande informationen (se: källkod för beräkningsnod). Om det behöver vara valbart (t.ex. en egenskap i ett objekt), kan ni anpassa utdata från den motsvarande valkomponenten (se: källkod för nod för att skapa data).
  • Component är en anpassad renderingskomponent för noden. När standardrendering av noden inte räcker till kan den helt åsidosättas för anpassad nodvyrendering. Om ni till exempel behöver tillhandahålla fler åtgärdsknappar eller andra interaktioner för startnoden av en grenstyp, måste ni använda denna metod (se: källkod för parallell gren).
  • useInitializers används för att tillhandahålla en metod för att initialisera block. Till exempel, i en manuell nod kan ni initialisera relaterade användarblock baserat på uppströmsnoder. Om denna metod tillhandahålls, kommer den att vara tillgänglig vid initialisering av block i den manuella nodens gränssnittskonfiguration (se: källkod för nod för att skapa data).
  • isAvailable används främst för att avgöra om en nod kan användas (läggas till) i den aktuella miljön. Den aktuella miljön inkluderar det aktuella arbetsflödet, uppströmsnoder och det aktuella grenindexet.