Tip

このドキュメントはAIによって翻訳されました。不正確な情報については、英語版をご参照ください

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) {
  // ワークフローをトリガー
  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);
    // イベントをリッスンしてワークフローをトリガー
    process.on(
      'message',
      this.messageHandlers.set(workflow.id, messageHandler),
    );
  }

  off(workflow: WorkflowModel) {
    const messageHandler = this.messageHandlers.get(workflow.id);
    // リスナーを削除
    process.off('message', messageHandler);
  }
}

export default class MyPlugin extends Plugin {
  load() {
    // ワークフロープラグインのインスタンスを取得
    const workflowPlugin =
      this.app.pm.get<PluginWorkflowServer>(PluginWorkflowServer);

    // トリガーを登録
    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() {
    // ワークフロープラグインのインスタンスを取得
    const workflowPlugin = this.app.pm.get<PluginWorkflowServer>(PluginWorkflowServer);

    // 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) {
    // イベントを登録
    this.timer = setInterval(() => {
      // ワークフローをトリガー
      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

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

パラメーター説明
constructor(public readonly workflow: PluginWorkflowServer): Triggerコンストラクター
on?(workflow: WorkflowModel): voidワークフロー有効化後のイベントハンドラー
off?(workflow: WorkflowModel): voidワークフロー無効化後のイベントハンドラー

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

Instruction

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

パラメーター説明
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

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

定数名意味
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

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

定数名意味
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 PluginWorkflowClient, {
  Trigger,
  Instruction,
} from '@nocobase/plugin-workflow/client';

PluginWorkflowClient

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 | InstructionInstructionの型またはインスタンス

registerInstructionGroup()

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

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

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

シグネチャ

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

パラメーター

パラメーター説明
typestringノードグループの識別子。登録時に使用する識別子と一致させます。
group{ label: string }グループ情報。現在はタイトルのみが含まれます。

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

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

Trigger

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

パラメーター説明
titlestringトリガータイプ名
fieldset{ [key: string]: ISchema }トリガー設定項目のコレクション
scope?{ [key: string]: any }設定項目Schema内で使用される可能性のあるオブジェクトのコレクション
components?{ [key: string]: React.FC }設定項目Schema内で使用される可能性のあるコンポーネントのコレクション
useVariables?(config: any, options: UseVariableOptions ) => VariableOptionsトリガーコンテキストデータの値取得機能
  • useVariables が設定されていない場合、このタイプのトリガーは値取得機能を提供せず、ワークフローのノードでトリガーのコンテキストデータを選択することはできません。

Instruction

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

パラメーター説明
groupstringノードタイプグループの識別子。現在選択可能なオプションは、'control'/'collection'/'manual'/'extended' です。
fieldsetRecord<string, ISchema>ノード設定項目のコレクション
scope?Record<string, Function>設定項目Schema内で使用される可能性のあるオブジェクトのコレクション
components?Record<string, React.FC>設定項目Schema内で使用される可能性のあるコンポーネントのコレクション
Component?React.FCノードのカスタムレンダリングコンポーネント
useVariables?(node, options: UseVariableOptions) => VariableOptionノードがノード変数オプションを提供するためのメソッド
useScopeVariables?(node, options?) => VariableOptionsノードがブランチのローカル変数オプションを提供するためのメソッド
useInitializers?(node) => SchemaInitializerItemTypeノードが初期化オプションを提供するためのメソッド
isAvailable?(ctx: NodeAvailableContext) => booleanノードが利用可能かどうかを判断するメソッド

関連タイプ

export type NodeAvailableContext = {
  workflow: object;
  upstream: object;
  branchIndex: number;
};
  • useVariables が設定されていない場合、このノードタイプは値取得機能を提供せず、ワークフローのノードでこのタイプのノードの結果データを選択することはできません。結果値が単一(選択不可)の場合、対応する情報を表現する静的なコンテンツを返せば十分です(参照:計算ノードのソースコード)。選択可能にする必要がある場合(例:オブジェクト内の特定のプロパティ)、対応する選択コンポーネントの出力をカスタマイズできます(参照:データ追加ノードのソースコード)。
  • Component はノードのカスタムレンダリングコンポーネントです。デフォルトのノードレンダリングでは不十分な場合、完全に上書きしてカスタムノードビューのレンダリングに使用できます。例えば、ブランチタイプの開始ノードに対して、より多くの操作ボタンやその他のインタラクションを提供したい場合は、このメソッドを使用する必要があります(参照:並列ブランチのソースコード)。
  • useInitializers は、初期化ブロックを提供するためのメソッドです。例えば、手動ノードでは、上流ノードに基づいて関連するユーザーブロックを初期化できます。このメソッドが提供されている場合、手動ノードのインターフェース設定でブロックを初期化する際に利用可能になります(参照:データ追加ノードのソースコード)。
  • isAvailable は、ノードが現在の環境で使用(追加)できるかどうかを判断するために主に使用されます。現在の環境には、現在のワークフロー、上流ノード、現在のブランチインデックスなどが含まれます。