- はじめに
- 基本情報
- BPMN を使用したプロセス モデリング
- ケース管理を使用したプロセス モデリング
- フローを使用したプロセス モデリング
- プロセスの実装
- プロセスの操作
- プロセスの監視
- プロセスの最適化
- 参考情報
プロセス ノードを親ワークフロー内で再利用可能な自己完結型のユニットにグループ化し、変数のスコープ ルールと入出力の設定を使用して使用するサブフロー。
概要
サブフローは、別のプロセスに埋め込まれたプロセスです。一連のノードを自己完結型のユニットにグループ化し、親プロセスの一部として実行して出力を返します。サブフローは、複雑なロジックを再利用可能で管理可能な要素に整理するのに役立ちます。
動作のしくみ
親プロセスがサブフロー・ノードに到達すると、実行はサブフローに入り、そのノードを順番に実行します。サブフローには独自の変数スコープがあるため、サブフロー内で定義された変数が親プロセスの変数と競合することはありません。サブフローが完了すると、その戻り値が親プロセスに戻され、サブフローの後の次のノードから実行が続行されます。
サブフロー内のノードは、以下にアクセスできます。
- 同じサブフロー内の他のノード
- 親プロセスのスコープ
サブフローの戻り値は、親プロセスで $vars.<subflowName>.outputとしてアクセスできます。
サブフローの作成
プロセスにサブフローを追加するには、以下の手順を実行します。
- キャンバス上でノードパレットを開きます。
- [サブフロー] ノードを検索または見つけます。
- それをキャンバスにドラッグし、前のノードに接続します。
フローは、サブフローを折りたたみ可能なコンテナーとしてキャンバスに追加します。選択すると展開され、内部にノードが追加されます。
結果: サブフローは、折りたたみ可能なコンテナーとしてキャンバスに表示されます。その中にノードをドラッグして、サブフローのロジックを定義します。
データの送受信
入力
サブフローの入力は [プロパティ] パネルで定義します。各入力は、親プロセスのスコープから値または式を受け入れます。
サブフロー入力を設定するには、以下の手順を実行します。
- キャンバス上でサブフロー ノードを選択します。
- プロパティ パネルで [サブフロー入力 ] セクションを開きます。
- 入力ごとに名前と値または式を入力します。
結果: 入力は、サブフロー本体内で として設定され、使用できます $vars.<inputName>。
出力
サブフローの戻り値は、親プロセスで $vars.<subflowName>.outputとして使用できます。他のノード出力と同様に、下流のノードの式で参照します。
// Access the output of a subflow named "validateOrder"
$vars.validateOrder.output
$vars.validateOrder.output.isValid
// Access the output of a subflow named "validateOrder"
$vars.validateOrder.output
$vars.validateOrder.output.isValid
変数のスコープ設定
サブフローは、独自の変数スコープを作成します。つまり、サブフロー内で更新される変数には、親プロセスとの競合を避けるために名前空間が設定されます。
サブフローの外部から、サブフローの内部変数を $vars.<subflowName>.<variableName>として参照します。たとえば、subflow1 という名前のサブフロー内にcounterされた変数は、親プロセスから$vars.subflow1.counterとして参照されます。
サブフロー内から、ノードは標準 $vars.<nodeName>.<property> パターンを使用して兄弟ノードの出力にアクセスします。親プロセスのスコープから直接読み取ることもできます。
変数の名前空間は、サブフローの内部変数が同じ名前を共有する親変数を上書きするのを防ぎます。親とサブフローの間で変数名を調整する必要はありません。
実際の例
サブフローを呼び出して、処理前に注文データを検証する親プロセス。
親プロセス:
- HTTP 要求 (
httpRequest1) — 外部 API から注文データを取得します。 - サブフロー (
validateOrder) — 注文データを検証し、結果を返します。 - 判断 (
decision1) — 検証結果に基づいて分岐します。
validateOrder サブフロー内:
-
スクリプト (
script1) — 必須フィールドが存在し、注文金額が 0 を超えていることを確認します。const order = $vars.validateOrder.orderData; const isValid = order.items.length > 0 && order.total > 0 && order.customerId !== undefined; return { isValid: isValid, reason: isValid ? "OK" : "Missing required fields" };const order = $vars.validateOrder.orderData; const isValid = order.items.length > 0 && order.total > 0 && order.customerId !== undefined; return { isValid: isValid, reason: isValid ? "OK" : "Missing required fields" }; -
サブフローは、スクリプトの出力を
$vars.validateOrder.outputとして返します。
親プロセスに戻ります。
[判断] ノードは $vars.validateOrder.output.isValid === true を評価し、フルフィルメント パスまたはエラー処理パスのいずれかにルーティングします。
関連ページ
- 変数とデータ フロー — 変数のスコープ ルール、式の構文、アクセス パターン
$vars - キャンバス — キャンバス、プロパティ パネル、ノード パレット内を移動する
- エラー処理 — ノード (サブフロー内を含む) にエラーハンドルを設定します