UiPath Documentation
maestro-automate
latest
false
Maestro Automate ユーザー ガイド

変数とデータ フロー

ノードの出力と変数を介したノード間のデータの流れと、サブフローと分岐のスコープ ルール

ワークフロー内のノードはデータを自動的に共有しません。ノードが HTTP 応答や計算値などの出力を生成すると、その後のノード (下流のノードと呼ばれる) は、式を使用してその出力を読み取ります。式は、値を読み取ったり計算したりする JavaScript の短い部分です。データ フローとは、ワークフローがノード間で値を渡し、実行中はその値を保持する方法です。

データは次の 2 つの方法でワークフロー内を移動します。

  • ノード出力: 各ノードは、下流のノードが参照できる出力を生成します。
  • 変数: ノード間で値を格納および渡すために定義するワークフロー レベルの値です。

式の構文 では、完全な文法、演算子、および $vars 参照の記述方法について説明します。

動作のしくみ​

ノードの出力​

データを生成するすべてのノードは、 $vars.<nodeName>.outputを通じてそのデータを利用できるようにします。ノード名は、ノードの種類から自動的に割り当てられます。たとえば、最初の HTTP 要求ノードの名前は httpRequest1、2 番目の HTTP 要求ノードの名前は httpRequest2です。

ノードの変数名はノードの ID であり、ノードを選択すると [プロパティ] パネルの [ 詳細 設定] タブに表示されます。[ID] の横にある鉛筆アイコンによってID が変更されます。

// Access HTTP Request response
$vars.httpRequest1.output.body
$vars.httpRequest1.output.code

// Access Script return value
$vars.script1.output

// Access a second HTTP Request
$vars.httpRequest2.output.body
// Access HTTP Request response
$vars.httpRequest1.output.body
$vars.httpRequest1.output.code

// Access Script return value
$vars.script1.output

// Access a second HTTP Request
$vars.httpRequest2.output.body

出力構造はノードの種類によって異なります。ノード参照の各ページには、そのノードの出力が一覧表示されます。

ノード エラー​

ノードに障害が発生し、そのエラー ハンドルが接続されている場合、障害の詳細はノードの出力の横に $vars.<nodeName>.errorに表示されます。エラー パス上のノード (たとえば、失敗をログに記録するスクリプト ノード) で読み取ってください。

// Read the error of a failed HTTP Request
$vars.httpRequest1.error.message   // what went wrong
$vars.httpRequest1.error.status    // the HTTP status, for example 404
// Read the error of a failed HTTP Request
$vars.httpRequest1.error.message   // what went wrong
$vars.httpRequest1.error.status    // the HTTP status, for example 404

エラー オブジェクトは、エラー パス上にのみ存在します。成功パスでは、 $vars.<nodeName>.error は未定義です。エラー オブジェクトには 、そのすべてのフィールドが一覧表示されます。

変数​

変数は、1 回の実行中保持されるワークフロー レベルの値です。これらは [変数] パネルで定義します。パネルは、右側の [プロパティ] タブの横にある [変数] タブから開きます。このパネルには、ワークフローの 入力、 出力、 変数 、および各ノードの出力が一覧表示されます。トグルによって、[ すべての変数] と [選択済み] ノードが切り替わります。ノードの行にある [ノードにフォーカス] アイコンを使用すると、キャンバスがそのノードにズームされます。[選択したノード] がオンの場合、パネルは選択したノードに限定され、そのヘッダーにそのスコープの名前が表示されます (例: スコープ: 手動トリガー)。

パネル内の [変数] の横にある [+] をクリックすると、[変数を追加] ダイアログが開きます。各変数は以下で構成されます。

  • 名前: 式でどのように参照するかを示します (例: $vars.orderTotal)。
  • データ型: String、Number、Boolean、Object、または Array。
  • 説明: 値が表す内容に関する任意のメモ。
  • 既定値: 任意の開始値。

ワークフロー レベルの変数は常に双方向であり、どのノードでも読み書きできます。構成する方向の設定はありません。読み取り専用または書き込み専用の値は、代わりにトリガーの入力または出力変数から取得されます。以下で説明します。

3 種類のデータは、定義する場所によって異なります。

種類定義方向参照構文
変数[変数] パネルの [変数] の横双方向 (読み取りおよび書き込み)$vars.<name>
トリガーの入力トリガー ノード、またはトリガーの横にある [ 変数 ] パネル読み取り専用$vars.<triggerName>.output.<name>
出力変数[終了] ノード、または [出力] の横にある [変数] パネル書き込み専用$vars.<name>

それぞれをどのような場合に使用するか:

  • ノードの出力は、あるノードから次のノードに渡されるデータを適合させます。これは最も一般的なパターンです。
  • 変数は、ワークフロー全体でアクセスできる必要がある値に適合します。
  • 入力と出力は、ワークフロー自体が受け取る内容または返す内容を定義する値に適合します。以下の「トリガーの入力」と「出力変数」で説明しています。

customerEmail、invoiceTotal、apiResponseなどのわかりやすいキャメルケース名は、実行トレースで経時的に判読可能なままです。単一文字の名前や略語はすぐに意味を失います。

トリガーの入力​

入力変数は [変数] セクションで定義 されていません 。これらは、トリガーの [プロパティ] パネルに入力引数として追加されるか、[変数] パネルでトリガーの横に + キーとともに追加され、[入力変数を追加] ダイアログが開きます。どちらの方法でも、それらは読み取り専用になります。トリガーが起動すると、その入力は として使用できます$vars.<triggerName>.output.<inputName>

// Access an input defined on a Manual Trigger named "manualTrigger1"
$vars.manualTrigger1.output.userId
// Access an input defined on a Manual Trigger named "manualTrigger1"
$vars.manualTrigger1.output.userId

これは、すべての種類のトリガーに適用されます。ワークフローに複数のトリガーがある場合、各トリガーは専用の入力を所有し、下流のノードは実行を開始した特定のトリガーを参照します。

出力変数​

出力変数はワークフローの結果を表します。これらのパラメーターは、終了ノードの [パラメーター] タブの [出力変数を追加] とともに追加されるか、[変数] パネルの [出力] の横に [+] が付けられます。これらは書き込み専用です。

// Access an output variable named "finalStatus"
$vars.finalStatus
// Access an output variable named "finalStatus"
$vars.finalStatus

各出力変数は以下で構成されます。

  • 名前: 式でどのように参照するかを示します (例: $vars.finalStatus)。
  • データ型: String、Number、Boolean、Object、または Array。
  • 説明: 値が表す内容に関する任意のメモ。
  • 既定値: 変数が設定されない場合に使用される任意のフォールバックです。

出力変数の値は、他の変数と同じように、ノードの Update Variable セクションから、またはスクリプト ノードの戻り値として設定されます。

変数の定義​

変数定義は [ 変数] パネルに存在します。各定義には変数の名前と型が格納されるため、実行中にその値を一貫して参照できます。

変数の更新​

変数は、ノードの構成またはスクリプト ノードの出力によって更新できます。

任意のノードから​

すべてのノードの [プロパティ] パネルの [詳細設定] タブに [変数を更新] セクションがあり、ここに [変数を追加] をクリックすると割り当てが追加されます。セクションには、書き込み可能な変数のターゲット (ワークフロー変数または出力変数) と、それに割り当てられた JavaScript 式が格納されます。式はノードの完了後に評価されます。

スクリプト ノードから​

スクリプト ノードの戻り値は、下流で $vars.<scriptName>.outputとしてアクセスできます。スクリプト ノードには、変数を直接書き込み用に、他のノードと同じ [変数を更新] セクションもあります。

// The return value becomes $vars.script1.output
return {
  orderTotal: $vars.httpRequest1.output.body.price * $vars.httpRequest1.output.body.quantity
};
// The return value becomes $vars.script1.output
return {
  orderTotal: $vars.httpRequest1.output.body.price * $vars.httpRequest1.output.body.quantity
};

スコープ ルール​

ノードは、以下からの出力にアクセスできます。

  • 同じスコープ内の上流ノード: それ以前に実行されたのと同じレベルのノード。
  • 親コンテナ ノード: ノードがサブフローまたはループ内にある場合、親のスコープにアクセスできます。

スコープとは、ワークフロー内で名前を読み取ることができる部分を意味します。ノードは、以下からの出力にアクセスできません。

  • 別のブランチ内のノード: Decision または Switch によって実行が別のパスに送信された場合、それらのノードの出力は使用できません。
  • 実行されていないノード: 出力はノードの実行後にのみ存在します。

サブフローのスコープ設定​

サブフローは、独自の変数スコープを作成します。サブフロー内のノードは、以下にアクセスできます。

  • 同じサブフロー内の他のノード
  • 親ワークフローのスコープ

サブフロー内で更新される変数には名前空間 (つまり、サブフロー名のプレフィックス) が設定され、親ワークフローとの競合を回避します。たとえば、subflow1 という名前のサブフロー内にcounterされた変数は、サブフローの外部から$vars.subflow1.counterとして参照されます。

サブフローの戻り値は、親ワークフローから $vars.<subflowName>.outputとしてアクセスできます。

並列ブランチ​

並列分岐ごとに専用の変数があります。あるブランチ内で変数を変更しても、その変更は別のブランチで表示されません。マージ ノードは、パスを再結合する必要がある場合に、並列パスからの出力を統合します。

パターン​

動的文字列を構築する​

スクリプト ノード内のテンプレート リテラルは、変数と静的テキストを組み合わせます。

return `Hello ${$vars.firstName}, your order #${$vars.orderId} has shipped.`;
return `Hello ${$vars.firstName}, your order #${$vars.orderId} has shipped.`;

ループ内で値を蓄積する​

アキュムレータパターンは、ループノードの前に初期化され、ループ本体内に追加された配列を使用します。

// Script node inside the Loop body
results.push(item.processedValue);
return results;
// Script node inside the Loop body
results.push(item.processedValue);
return results;

シークレット値をログに表示しないようにする​

シークレット変数の値は UI 上ではマスクされますが、エクスポートされたトレース データに表示される場合があります。ログに記録すると、データ漏洩のリスクが伴います。

実際の例​

API からユーザーを取得し、ユーザーのロールに基づいてルーティングするワークフローには、次の 3 つのノードがあります。

  1. HTTP 要求 (httpRequest1): https://api.example.com/users/42に GET 要求を送信します。
  2. スクリプト (script1): 次のコードでユーザーのロールを抽出します。
const user = $vars.httpRequest1.output.body;
return {
  name: user.name,
  role: user.role,
  isAdmin: user.role === "admin"
};
const user = $vars.httpRequest1.output.body;
return {
  name: user.name,
  role: user.role,
  isAdmin: user.role === "admin"
};
  1. 判断 (decision1): 管理者ステータスの分岐。次の式で指定します。
$vars.script1.output.isAdmin === true
$vars.script1.output.isAdmin === true

True 分岐は管理者アクセス権を付与し、False 分岐は標準アクセス権を付与します。

次のステップ​

このページは役に立ちましたか?

接続

ヘルプ リソース サポート(opens in new window)

学習する UiPath アカデミー(opens in new window)

質問する UiPath フォーラム(opens in new window)

最新情報を取得