- はじめに
- 開発
- デプロイして実行する
- 例
- 参照
サブフロー
Group nodes into a subflow that runs as one step inside a workflow, pass data in and out of it, and scope its variables.
A subflow is a workflow embedded within another workflow, called the parent workflow. It groups a set of nodes into a self-contained unit that runs as part of the parent and returns output to it. Subflows organize complex logic into self-contained, manageable groups.
動作のしくみ
親ワークフローがサブフロー・ノードに到達すると、実行はサブフローに入り、そのノードを順番に実行します。サブフローには独自のスコープがあり、ワークフロー内で名前を読み取ることができる部分であるため、サブフロー内で定義された変数が親ワークフローの変数と競合することはありません。サブフローが完了すると、その出力は親ワークフローに返され、次のノードで実行を続行します。
サブフロー内のノードは、以下にアクセスできます。
- 同じサブフロー内の他のノード。
- 親ワークフローのスコープ。
親ワークフローからサブフローの出力には、 $vars.<subflowName>.outputとしてアクセスできます。
サブフローの追加
サブフロー ノードは [ノードを追加] パネルから追加され、[Maestro Flow] カテゴリに表示され、前のノードに接続します。キャンバス上には、スタックレイヤーアイコンの付いたノードとして表示されます。ノードのホバー ツールバーにある [ドリル イン ] ボタンを使用すると、サブフローの内部が独自のキャンバスとして開きます。左上の階層リンク (ホーム アイコンとサブフロー名) は、親ワークフローに戻ります。内部は、開始ノードが終了ノードに接続された状態から始まり、下部のツールバーがメイン キャンバスと同じであるため、ノードは同じ方法で追加されます。
データの送受信
入力
サブフロー ノードの [プロパティ] パネルの [入力 ] セクションでは、サブフローの入力変数を定義し、親スコープの式をそれらにマッピングします。入力変数を追加 - 入力を追加します。各入力には、名前、型、および 値 (親ワークフローのスコープで評価される式) があります。[値] フィールドの [挿入] メニューに、そのスコープの値 (サブフローや $metadataの前のノードなど) が一覧表示されます。
サブフロー内では、入力はサブフローの 開始 ノードの出力です。[ 挿入] メニューに、そのノードが <subflowName>Startとしてリストされます (例: $vars.subflow1Start.output.orderData)。[スタート] ノードには [入力引数を追加] もあります。
出力
サブフロー ノードの [ 出力 ] セクションでは、サブフローの出力変数を定義します。出力変数を追加 して 1 つ追加し、値はサブフロー内の終了ノードの出力マッピングを介してマッピングされます。出力は親ワークフローで $vars.<subflowName>.outputとして使用でき、各出力変数はそのフィールドです (例: $vars.subflow1.output.isValid)。サブフローの後の任意のノードは、他のノード出力と同様に、式でそれを参照できます。
// 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> パターンを使用して兄弟ノードの出力にアクセスします。親ワークフローのスコープから直接読み取ることもできます。
変数の名前空間は、サブフローの内部変数が同じ名前を共有する親変数を上書きするのを防ぎます。親とサブフローの間で変数名を調整する必要はありません。
実際の例
親ワークフローは、サブフローを呼び出して、処理前に注文データを検証します。
親ワークフローには次の 3 つのノードがあります。
- HTTP 要求 (
httpRequest1): 外部 API から注文データを取得します。 - サブフロー (
validateOrder): 注文データを検証し、結果を返します。 - 判断 (
decision1): 検証結果に基づいて分岐します。
validateOrderサブフローには、スクリプト (script1) というノードが 1 つあり、このノードは、必須フィールドが存在すること、および注文合計がゼロを超えていることを確認します。
const order = $vars.validateOrderStart.output.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.validateOrderStart.output.orderData;
const isValid = order.items.length > 0
&& order.total > 0
&& order.customerId !== undefined;
return { isValid: isValid, reason: isValid ? "OK" : "Missing required fields" };
サブフロー ノードの [ 出力 ] セクションは、Boolean データ型の isValid という名前の出力変数を定義し、サブフロー内の [終了] ノードはそれを にマッピング $vars.script1.output.isValid。親ワークフローに戻ると、判断ノードは $vars.validateOrder.output.isValid === true を評価し、フルフィルメント パスまたはエラー処理パスのいずれかにルーティングします。
次のステップ
- 変数とデータ フロー: 変数のスコープ ルール、式の構文、
$varsアクセス パターン。 - フロー キャンバス: キャンバス、[プロパティ] パネル、[ノードを追加] パネル。
- エラー処理: ノード (サブフロー内を含む) にエラー ハンドルを設定します。
- コミュニティ: UiPath フォーラムで質問したり、他のビルダーとワークフローを共有したりできます。