UiPath Documentation
maestro
latest
false
Maestro 用户指南
重要 :
新发布内容的本地化可能需要 1-2 周的时间才能完成。

变量和数据流

数据如何通过节点输出和变量在节点之间流动,以及子流和分支的作用域规则。

内容概览

Flow 中的节点不会自动共享数据。当节点生成输出(如 HTTP 响应或计算值)时,下游节点通过表达式显式访问该输出。变量和数据流决定了您在节点之间连接数据以及在整个流程中保留值的方式。

数据在流程中移动的方式有两种:

  • 节点输出— 每个节点都产生下游节点可以引用的输出
  • 变量— 您定义的用于在节点之间存储和传递值的流程级变量

有关完整的表达式语法、运算符以及如何编写$vars引用,请参阅表达式语法

工作方式

节点输出

每个生成数据的节点都通过$vars.<nodeName>.output提供数据。节点名称是根据节点类型自动分配的,例如,第一个 HTTP 请求节点名为httpRequest1 ,第二个节点为httpRequest2

选中节点后,您可以在属性面板中看到节点的变量名称。

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

// 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.statusCode

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

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

输出结构取决于节点类型。有关其特定输出形状,请参阅每个节点的参考页面。

变量

变量是在单次执行期间保留的流程级值。您可以在“变量”面板中定义这些变量。

每个变量都包含:

  • 名称— 在表达式中引用的方式(例如$vars.orderTotal
  • 类型— 字符串、数字、布尔值、对象或数组

流程级变量始终是双向的,任何节点都可以读取或写入它们。没有可配置的方向设置。只读或只写入值来自触发器输入或输出变量,如下所述。

流程根据您定义以下三种数据的位置来对其进行区分:

种类定义于方向参考语法
变量变量面板双向(读取和写入)$vars.<name>
触发器输入在触发器节点上只读$vars.<triggerName>.output.<name>
输出变量结束节点上只写$vars.<name>

何时使用变量与节点输出:

  • 节点输出适合从一个节点传递到下一个节点的数据。这是最常见的模式。
  • 变量适应的值必须可在整个流程中访问。
  • 输入和输出适合定义流程本身接收或返回内容的值 — 请参阅下面的触发器输入和输出变量。

清晰地命名变量:带有连字符或驼峰式命名法的描述性小写名称(例如customerEmailinvoiceTotalapiResponse )随着时间的推移,会在执行追踪记录中保持清晰。单字母名称和缩写很快就会失去意义。

触发器输入

“变量”部分未定义输入变量 — 它们直接添加到触发器节点的输入上,这使其处于只读状态。当触发器触发时,其输入可用作 $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
  • 数据类型- 字符串、数字、布尔值、对象或数组
  • 说明— 关于值代表什么的可选注释
  • 默认值— 在没有任何内容设置变量时使用的可选回退

输出变量值的设置方式与任何其他变量相同 - 来自节点的“更新变量”部分,或作为“脚本”节点的返回值。

变量定义

变量定义位于“变量”面板中。每个定义都会存储变量名称和类型,以便在运行期间可以一致地引用值。

变量更新

变量可以通过节点配置或脚本节点输出进行更新。

从任何节点 — 更新变量部分

每个节点在属性面板中都有一个“更新变量”部分。该部分存储可写变量目标(流程变量或输出变量)以及分配给该变量的 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
};

作用域规则

节点可以访问来自以下位置的输出:

  • 同一作用域中的上游节点— 在其之前执行的同一级别的节点
  • 父容器节点— 如果节点位于子流或循环内,则它可以访问父项的作用域

节点无法访问来自以下位置的输出:

  • 不同分支中的节点— 如果决策或切换将执行发送至不同路径,则这些节点的输出不可用
  • 尚未执行的节点— 输出仅在节点运行后存在

子流范围

子流创建自己的变量作用域。子流内的节点可以访问:

  • 同一子流中的其他节点
  • 父流程的作用域

在子流内更新的变量具有命名空间,以避免与父流程冲突。例如,名为subflow1的子流中的变量counter从子流外部被引用为$vars.subflow1.counter

父流程可以以$vars.<subflowName>.output形式访问子流的返回值。

并行分支

并行分支具有独立的执行上下文。在一个分支内变更变量不会使该更改在另一个分支中可见。当路径需要重新连接时,“合并”节点会合并来自并行路径的输出。

模式

构建动态字符串

“脚本”节点中的模板字面量结合了变量和静态文本:

return `Hello ${firstName}, your order #${orderId} has shipped.`;
return `Hello ${firstName}, your order #${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;

不要将密码值写入日志

密码变量值在用户界面中处于掩码状态,但可能会出现在导出的追踪数据中。将它们记录下来存在数据泄露风险。

实际示例

从 API 中获取用户并根据用户角色进行路由的流程:

步骤 1 — HTTP 请求( httpRequest1 ):GET https://api.example.com/users/42

步骤 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"
};

步骤 3 — 决策( decision1 ):管理员状态分支

表达式: $vars.script1.output.isAdmin === true

  • True → 授予管理员访问权限
  • False → 授予标准访问权限
  • 表达式语法$vars语法、运算符、您在其中编写表达式、常见错误
  • 脚本节点— 编写 JavaScript、返回值、 $vars访问权限
  • 决策节点— 根据表达式分支
  • Canvas — 属性面板,变量面板

此页面有帮助吗?

连接

需要帮助? 支持

想要了解详细内容? UiPath Academy

有问题? UiPath 论坛

保持更新