APIリファレンス

サーバーサイド

サーバーサイドのパッケージ構造で利用できるAPIは、以下のコードで示されています。

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

PluginWorkflowServer

ワークフロープラグインのクラスです。

通常、アプリケーションの実行時に、アプリケーションインスタンスの app を取得できる場所であればどこでも、app.pm.get<PluginWorkflowServer>(PluginWorkflowServer) を呼び出してワークフロープラグインのインスタンスを取得できます(以降、このインスタンスを plugin と表記します)。

registerTrigger()

新しいトリガータイプを拡張して登録します。

シグネチャ

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

パラメーター

パラメーター説明
typestringトリガータイプの識別子
triggertypeof Trigger | Triggerトリガーの型またはインスタンス

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()

新しいノードタイプを拡張して登録します。

シグネチャ

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

パラメーター

パラメーター説明
typestringInstructionタイプの識別子
instructiontypeof Instruction | InstructionInstructionの型またはインスタンス

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()

特定のワークフローをトリガーします。主に、カスタムトリガーで特定のカスタムイベントをリッスンしたときに、対応するワークフローをトリガーするために使用されます。

シグネチャ

trigger(workflow: Workflow, context: any)

パラメーター

パラメーター説明
workflowWorkflowModelトリガーするワークフローオブジェクト
contextobjectトリガー時に提供されるコンテキストデータ
ヒント

現在、context は必須項目です。提供されない場合、ワークフローはトリガーされません。

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()

特定のノードジョブで待機中のワークフローの実行を再開します。

  • 待機状態(EXECUTION_STATUS.STARTED)にあるワークフローのみが再開できます。
  • 保留状態(JOB_STATUS.PENDING)にあるノードジョブのみが再開できます。

シグネチャ

resume(job: JobModel)

パラメーター

パラメーター説明
jobJobModel更新されたジョブオブジェクト
ヒント

渡されるジョブオブジェクトは通常、更新されたオブジェクトであり、その status は通常 JOB_STATUS.PENDING 以外の値に更新されます。そうしないと、引き続き待機状態のままになります。

詳細はソースコードを参照してください。

Trigger

カスタムトリガータイプを拡張するためのトリガー基底クラスです。

import { Trigger } from '@nocobase/plugin-workflow';
パラメーター説明
constructor(public readonly workflow: PluginWorkflowServer): Triggerコンストラクター
on?(workflow: WorkflowModel): voidワークフロー有効化後のイベントハンドラー
off?(workflow: WorkflowModel): voidワークフロー無効化後のイベントハンドラー

on / off は、ワークフローの有効化/無効化時にイベントリスナーを登録/登録解除するために使用されます。渡されるパラメーターは、トリガーに対応するワークフローインスタンスであり、設定に基づいて処理できます。すでにグローバルにイベントをリッスンしている一部のトリガータイプでは、これらの2つのメソッドを実装する必要がない場合があります。例えば、タイマートリガーでは、on でタイマーを登録し、off でタイマーを登録解除できます。

Instruction

カスタムInstructionタイプを拡張するためのInstruction基底クラスです。

import { Instruction } from '@nocobase/plugin-workflow';
パラメーター説明
constructor(public readonly workflow: PluginWorkflowServer): Instructionコンストラクター
runRunnerノードへの初回エントリー時の実行ロジック
resume?Runner中断からの再開後にノードに入る実行ロジック
getScope?(node: FlowNodeModel, data: any, processor: Processor): any対応するノードが生成するブランチのローカル変数コンテンツを提供します

関連タイプ

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

getScope については、ループノードの実装を参照してください。これは、ブランチのローカル変数コンテンツを提供するために使用されます。

EXECUTION_STATUS

ワークフロー実行プランのステータス定数テーブルで、対応する実行プランの現在のステータスを識別するために使用されます。

import { EXECUTION_STATUS } from '@nocobase/plugin-workflow';
定数名意味
EXECUTION_STATUS.QUEUEINGキューイング中
EXECUTION_STATUS.STARTED実行中
EXECUTION_STATUS.RESOLVED正常完了
EXECUTION_STATUS.FAILED失敗
EXECUTION_STATUS.ERRORエラー
EXECUTION_STATUS.ABORTED中断済み
EXECUTION_STATUS.CANCELEDキャンセル済み
EXECUTION_STATUS.REJECTED拒否済み
EXECUTION_STATUS.RETRY_NEEDED未成功実行、リトライが必要

最初の3つを除き、その他はすべて失敗状態を表しますが、異なる失敗理由を記述するために使用できます。

JOB_STATUS

ワークフローノードジョブのステータス定数テーブルで、対応するノードジョブの現在のステータスを識別するために使用されます。ノードによって生成されたステータスは、実行プラン全体のステータスにも影響を与えます。

import { JOB_STATUS } from '@nocobase/plugin-workflow';
定数名意味
JOB_STATUS.PENDING保留中:このノードまで実行が到達しましたが、Instructionにより一時停止して待機することが要求されています
JOB_STATUS.RESOLVED正常完了
JOB_STATUS.FAILED失敗:このノードの実行が設定条件を満たしませんでした
JOB_STATUS.ERRORエラー:このノードの実行中に未処理のエラーが発生しました
JOB_STATUS.ABORTED中止:このノードは保留状態の後、他のロジックによって実行が終了されました
JOB_STATUS.CANCELEDキャンセル:このノードは保留状態の後、手動で実行がキャンセルされました
JOB_STATUS.REJECTED拒否:このノードは保留状態の後、手動で続行が拒否されました
JOB_STATUS.RETRY_NEEDED未成功実行、リトライが必要

クライアントサイド

クライアントサイドのパッケージ構造で利用できるAPIは、以下のコードで示されています。

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

PluginWorkflowClientV2

ワークフロークライアントプラグインのクラスです。通常、this.app.pm.get('workflow') で取得できます。

registerTrigger()

トリガータイプの設定パネルを登録します。

シグネチャ

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

パラメーター

パラメーター説明
typestringトリガータイプの識別子。サーバーサイドで登録した識別子と一致させます
triggertypeof Trigger | Triggerトリガーの型またはインスタンス

registerInstruction()

ノードタイプの設定パネルを登録します。

シグネチャ

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

パラメーター

パラメーター説明
typestringノードタイプの識別子。サーバーサイドで登録した識別子と一致させます
instructiontypeof Instruction | Instructionノードの型またはインスタンス

registerInstructionGroup()

ノードタイプのグループを登録します。NocoBaseはデフォルトで以下の4つのノードタイプグループを提供しています。

  • 'control':制御系
  • 'collection':コレクション操作系
  • 'manual':手動処理系
  • 'extended':その他の拡張系

他のグループを拡張する必要がある場合は、このメソッドを使用して登録できます。

シグネチャ

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

パラメーター

パラメーター説明
typestringノードグループの識別子
group{ label: string }グループ情報。現在はタイトルのみが含まれます

import { Plugin } from '@nocobase/client-v2';

export default class YourPluginClient extends Plugin {
  async load() {
    const pluginWorkflow = this.app.pm.get('workflow');
    pluginWorkflow.registerInstructionGroup('ai', { label: `{{t("AI", { ns: "${NAMESPACE}" })}}` });
  }
}

isWorkflowSync()

ワークフローが同期モードかどうかを判定します。

シグネチャ

isWorkflowSync(workflow: object): boolean

Trigger

カスタムトリガータイプを拡張するためのトリガー基底クラスです。

パラメーター説明
titlestringトリガータイプ名
description?stringトリガータイプの説明
PresetFieldsetLoader?LoaderOf作成時のプリセット設定フォーム(遅延読み込み)
FieldsetLoader?LoaderOfトリガーの完全な設定フォーム(遅延読み込み)
TriggerFieldsetLoader?LoaderOf手動実行時の入力フォーム(遅延読み込み)
validate(config: Record<string, unknown>) => boolean設定のバリデーション。設定が有効な場合 true を返します
createDefaultConfig?() => Record<string, unknown>デフォルトの設定値を提供します
useVariables?(config, options?: UseVariableOptions) => VariableOption[] | nullトリガーコンテキストデータの変数オプション
getCreateModelMenuItem?(args) => SubModelItem | SubModelItem[] | nullキャンバス上でサブモデルを作成するためのメニュー項目
useTempAssociationSource?(config, workflow?) => TriggerTempAssociationSource | null一時的な関連データソースを提供します

関連タイプ

export type LoaderOf<P = {}> = () => Promise<{ default: ComponentType<P> }>;
  • useVariables が設定されていない場合、このトリガータイプは値取得機能を提供しないことを意味し、ワークフローのノードでトリガーのコンテキストデータを選択することはできません。

Instruction

カスタムノードタイプを拡張するためのInstruction基底クラスです。

パラメーター説明
titlestringノードタイプ名
typestringノードタイプの識別子
groupstringノードタイプグループの識別子。オプション:'control'/'collection'/'manual'/'extended'
description?stringノードタイプの説明
icon?JSX.Elementノードアイコン
FieldsetLoader?LoaderOfノード設定ドロワーのフォーム(遅延読み込み)
PresetFieldsetLoader?LoaderOf作成時のプリセット設定フォーム(遅延読み込み)
ComponentLoader?LoaderOf<{ data: any }>キャンバス上でのカスタムノードレンダリング(遅延読み込み)。ブランチノードなど特殊なレンダリングが必要な場合に使用します
branching?boolean | object | ((config) => boolean | object)ノードがブランチノードかどうかを宣言します
end?boolean | ((node) => boolean)ノードが終端ノードかどうかを宣言します
testable?booleanノードがテスト実行をサポートするかどうかを宣言します
createDefaultConfig?() => objectデフォルトの設定値を提供します
useVariables?(node, options?: UseVariableOptions) => VariableOptionノードが変数オプションを提供するためのメソッド
useScopeVariables?(node, options?) => VariableOption[] | MetaTreeNode[]ノードがブランチスコープの変数オプションを提供するためのメソッド
isAvailable?(ctx: NodeAvailableContext) => booleanノードが利用可能かどうかを判断するメソッド
getCreateModelMenuItem?({ node, workflow }) => SubModelItem | nullキャンバス上でサブモデルを作成するためのメニュー項目
useTempAssociationSource?(node) => TempAssociationSource | null一時的な関連データソースを提供します

関連タイプ

export type NodeAvailableContext = {
  engine: WorkflowPlugin;
  workflow: object;
  upstream: object;
  branchIndex: number;
};
  • useVariables が設定されていない場合、このノードタイプは値取得機能を提供しないことを意味し、ワークフローのノードでこのタイプのノードの結果データを選択することはできません。結果値が単一(選択不可)の場合、対応する情報を表現する静的なコンテンツを返すことができます(参照:計算ノードのソースコード)。選択可能にする必要がある場合(例:オブジェクトのプロパティ)、対応する選択コンポーネントの出力をカスタマイズできます(参照:データ取得ノードのソースコード)。
  • ComponentLoader はノードのカスタムレンダリングコンポーネントです。デフォルトのノードレンダリングでは不十分な場合、完全にオーバーライドしてカスタムノードビューのレンダリングに使用できます。例えば、ブランチタイプのノードに追加のブランチレンダリングを提供する場合などです(参照:条件ノードのソースコード)。
  • isAvailable は、ノードが現在の環境で使用(追加)できるかどうかを判断するために主に使用されます。現在の環境には、ワークフロープラグインのインスタンス、現在のワークフロー、上流ノード、現在のブランチインデックスが含まれます。

変数入力コンポーネント

ワークフローは、ノード/トリガー設定フォームでユーザーがワークフロー変数を選択できるようにするための変数入力コンポーネントセットを提供しています。

import {
  WorkflowVariableInput,
  WorkflowVariableTextArea,
  WorkflowTypedVariableInput,
  WorkflowVariableWrapper,
} from '@nocobase/plugin-workflow/client-v2';

WorkflowVariableInput

変数を選択してから続けてコンテンツを入力できる変数入力コンポーネントです。変数参照と自由テキストを混在させる必要がある単一行入力シナリオに適しています。

import { WorkflowVariableInput } from '@nocobase/plugin-workflow/client-v2';

<Form.Item name={['config', 'target']} label="Target">
  <WorkflowVariableInput />
</Form.Item>

WorkflowVariableInput

Props

パラメーター説明
value?string変数パスの値。例:{{$jobsMapByNodeKey.xxx.field}}
onChange?(value: string) => void値変更時のコールバック
variableOptions?UseWorkflowVariableOptions変数フィルターオプション(型フィルタリング、深度など)
disabled?boolean無効化するかどうか
placeholder?stringプレースホルダーテキスト

WorkflowVariableTextArea

カーソル位置に変数参照を挿入できる複数行テキストエリアです。HTTPボディやテンプレートテキストなどの自由テキストシナリオに適しています。

import { WorkflowVariableTextArea } from '@nocobase/plugin-workflow/client-v2';

<Form.Item name={['config', 'body']} label="Body">
  <WorkflowVariableTextArea autoSize={{ minRows: 5 }} />
</Form.Item>

WorkflowVariableTextArea

Props

パラメーター説明
value?stringテキスト値(変数参照を含む場合があります)
onChange?(value: string) => void値変更時のコールバック
variableOptions?UseWorkflowVariableOptions変数フィルターオプション
delimiters?readonly [string, string]変数デリミター。デフォルトは ['{{', '}}']

antd TextArea の他のProps(autoSizeplaceholder など)を継承します。

WorkflowTypedVariableInput

「定数」モードと「変数参照」モードを切り替えられる型付き入力コンポーネントです。変数モードでは変数の選択のみが可能で、選択後に続けて入力することはできません。定数モードでは stringnumberbooleandateobject の5つの型がサポートされています。

import { WorkflowTypedVariableInput } from '@nocobase/plugin-workflow/client-v2';

<Form.Item name={['config', 'value']} label="Value">
  <WorkflowTypedVariableInput />
</Form.Item>

WorkflowTypedVariableInput

Props

パラメーター説明
variableOptions?UseWorkflowVariableOptions変数フィルターオプション

TypedVariableInput の他のProps(内部使用の extraNodesmetaTreenamespaces を除く)を継承します。

WorkflowVariableWrapper

異なるコンテキストで異なる入力コンポーネントを置き換えるための汎用ラッパーです。例えば、同じフィールドがトリガーノード設定とノード設定ドロワーで異なる入力方法を必要とする場合、このコンポーネントを使用してネイティブ入力を変数モード切替可能な入力にラップできます。

import { WorkflowVariableWrapper } from '@nocobase/plugin-workflow/client-v2';

<Form.Item name={['config', 'timeout']} label="Timeout">
  <WorkflowVariableWrapper
    render={({ value, onChange }) => (
      <InputNumber value={value} onChange={onChange} min={0} />
    )}
  />
</Form.Item>

Props

パラメーター説明
value?TValue | string | null現在の値(定数値または変数パス文字列)
onChange?(value: TValue | string | null) => void値変更時のコールバック
variableOptions?UseWorkflowVariableOptions変数フィルターオプション
render(props: { value?, onChange? }) => ReactNodeネイティブ入力コンポーネントをレンダリングします
clearValue?TValue | null変数モードから定数モードに切り替える際の初期値。デフォルトは null

コレクション関連コンポーネント

ワークフローは、コレクション関連のヘルパーコンポーネントセットも提供しています。

import {
  CollectionCascader,
  AppendsSelect,
  FieldsSelect,
  SortFieldsInput,
  PaginationFields,
} from '@nocobase/plugin-workflow/client-v2';
  • CollectionCascader — データソース対応のコレクションセレクター(カスケーダー)
  • AppendsSelect — 関連フィールドプリロードセレクター(ツリーセレクト)
  • FieldsSelect — コレクションフィールドの複数選択セレクター
  • SortFieldsInput — ソートフィールド入力
  • PaginationFields — ページネーションパラメーターのフォーム項目