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

Maestro 用户指南

上次更新日期 2026年5月25日

多实例标记

概述

使用标记配置任务,使“列表”变量中的每个元素运行一次,从而创建多次顺序或并行执行。访问“BPMN 入门”章节中的“标记”,获取标记和概念指导。

何时使用多实例标记

当您有一个项目列表并且需要为每个项目运行一次同一任务时,请使用多实例标记 — 例如:

  • 验证发票 ID 列表中的每个发票
  • 通过为每条记录调用外部 API,丰富一组记录
  • 向列表中的每位收件人发送通知

如果没有标记,您需要使用序列流构建手动循环,这样更难读取和跟踪。多实例标记有助于保持流程图的简洁,并在执行追踪记录中查看每个项目的状况。每个项目的运行情况都会单独显示,并显示各自的状态和输出。

如果注重顺序或每次运行都依赖于上一次运行,请使用“顺序”模式。如果项目相互独立且希望达到更大的吞吐量,请使用“并行”模式。

支持的集合类型

Maestro 将以下集合类型视为可循环的多实例执行。如果您的变量是以下类型之一,则可以直接在“项目”字段中使用它:

  • System.Collections.Generic.List<T>
  • System.Collections.Generic.IList<T>
  • System.Collections.Generic.IEnumerable<T>
  • System.Collections.IEnumerable
  • System.Data.DataTable
  • Newtonsoft.Json.Linq.JArray
  • collectionDataTypeList为开头的类型
  • collectionDataTypeArray为开头的类型
  • 原始 .NET 数组,例如 int[]string[]、、bool[]double[]decimal[]long[]

保持每个项目的工作幂等且持续时间短。如果您需要在所有迭代完成后将结果收集到单个变量,请使用“输出”和“更新变量”部分。

如何添加多实例标记

重要提示:

在将任务转换为多实例任务之前,请配置任务的“操作” 。多实例配置会在您应用标记时绑定到任务的输出。如果此时未选择任何操作,则绑定将绑定到任务的默认输出占位符,而不是操作的实际输出,之后选择操作不会刷新此绑定。然后,每次迭代都会写入未绑定的输出,从而在运行时在聚合变量中生成null条目。如果您已经先将任务转换为多实例任务,请参阅聚合变量包含空值,以获取取消设置的解决方法并重新应用。

  1. 在画布上选择一个任务,并在“属性”面板中配置其“操作” 。确认“输出”部分反映了您选择的操作,例如,智能体操作公开类型化的response输出和Error输出。仅在输出部分与操作匹配后继续。

  2. 在任务上方的元素工具栏中,选择“更改元素”

  3. 选择“顺序多实例”或“并行多实例”。

    标记将显示在任务形状的底部。

  4. 在“属性”面板中,展开“多实例”。

  5. 在“项目”中,选择您要迭代的列表变量,例如 vars.invoiceList

    这会指示 Maestro 要处理哪个集合。若无“项目”值,任务将作为常规任务运行一次,而非每个元素运行一次。Maestro 为列表中的每个元素创建一次执行。

  6. 可以选择性地展开“错误处理”并启用“失败时重试”,以独立重试各个项目运行。有关配置选项,请参阅“元素级重试”。

备注:

只有任务支持多实例。您选择的标记类型(顺序或并行)将决定执行顺序。

引用当前项目

多实例”部分仅需要“项目”列表,您可以在其中指示 Maestro 要迭代哪个集合。迭代器表达式会进入不同的位置:任务的“输入”部分,每次运行时,都会将当前项目映射到特定输入。

您使用的表达式取决于标记是直接应用于任务,还是任务在从多实例任务调用的子流程中运行。

场景表达式使用位置
直接应用于任务的标记iterator.item在任务的“输入”字段中
任务在从多实例任务调用的子流程中运行iterator[0].item在子流程任务的“输入”字段中
备注:

iterator[0].item 中的 [0] 是指任务在子流程中运行时的最外部的迭代器作用域。在标准单级多实例中,您将始终使用 [0],没有 iterator[1]

要传递当前的整个元素,请使用 iterator.item。要传递单个属性,请使用 iterator.item.propertyName。以下是相关示例:

  • iterator.item.invoiceId
  • iterator.item.customer.email
  • { id: iterator.item.id, flags: ["recheck"] }

引用任务中的当前项目

将多实例标记直接应用于任务时,请在“属性”面板的“输入”部分使用 iterator.item,将当前元素传递到每次运行。

“属性”面板引用

  • 操作:选择任务的运行方式(Integration Service 操作、智能体操作,如果仅用于建模,则为“”)。

  • 输入:显示由所选操作定义的参数。对于要填充当前列表项目的每个参数,如需传递整个元素,请将其值设置为 iterator.item,如需传递特定属性,请设设置为 iterator.item.propertyName

  • 输出:定义每次迭代返回的内容。为任务配置操作后,该操作的输出(通常为response ,对于智能体操作为Error )将自动显示在此处,并且每个输出通过“值芯片”与其来源绑定。要在每次迭代中除了操作的输出之外添加额外值,请选择“+ 添加新值”并为其命名。如果此处列出的条目未反映您的操作公开的内容(例如,芯片显示通用占位符类型,而不是操作的实际输出类型),请参阅聚合变量包含 null 值

  • 更新变量:所有迭代完成后,指定哪个流程变量存储聚合输出。选择“设置变量值” ,然后选择目标变量,例如vars.validationResults 。该变量保存一个数组,每次迭代只有一个条目:如果每次迭代返回字符串,则为字符串数组;如果每次迭代返回对象,则为对象数组。在顺序模式下,条目遵循输入的顺序。在并行模式下,顺序与迭代完成的顺序相同,但无法保证顺序。

在子流程中引用当前项目

当任务在从多实例任务调用的子流程中运行时,当前项目无法直接作为 iterator.item 使用。相反,请在子流程任务的“输入”中使用 iterator[0].item,访问从父多实例任务传递的元素。

“属性”面板引用

  • 操作:配置任务与外部系统、API 或智能体交互的方式。

  • 输入:为任务所需的每个值添加输入。如需传递当前的整个元素,请将值设置为 iterator[0].item,如需传递特定属性,则设置为 iterator[0].item.propertyName

    示例 — 如果您的列表包含带有 id 字段的对象,请在“属性”面板的“输入”部分添加一个条目:

    • 输入字段名称:currentItemId
    • 值: iterator[0].item.id

    .id 替换为列表对象中的实际属性名称。

示例

示例:验证发票列表

此示例显示如何配置“服务”任务,以便为列表中的每个发票运行一次任务。

1. 准备一个列表变量
  1. 打开“数据管理器”
  2. 创建变量:
    • 名称invoiceList
    • 类型:对象数组或字符串数组
    • 默认值:["INV-001", "INV-002", "INV-003"]
2. 添加“服务”任务并配置操作
  1. “服务”任务添加到画布,并将其命名为“验证发票”。

  2. 选中任务后,打开“属性”面板中的“操作”部分,并配置为每张发票运行的智能体:

    • 操作:选择“开始并等待智能体“。
    • 智能体:选择负责验证发票的智能体。智能体必须已存在于您的租户中。您可以在 Agent Builder 中创建智能体。

  3. 确认“输出”部分反映了智能体操作 — response输出应及其实际输出类型与Error一起出现。仅在与此匹配后继续。

3. 将任务转换为多实例任务
  1. 选定任务后,打开元素工具栏并选择更改元素顺序多实例
  2. “属性”面板中,展开“多实例”然后将“项目”设置为vars.invoiceList
4. 将当前项目映射到输入

选择操作后,“输入”部分将显示该操作定义的参数,例如 RPA 工作流的输入参数或智能体的参数。

对于要使用当前列表项目填充的每个参数,选择其值字段并输入iterator.item

  • 如需传递当前的整个元素,请使用 iterator.item,例如字符串 "INV-001"(如果您的列表包含字符串)。
  • 如需传递特定属性,请使用 iterator.item.propertyName,例如 iterator.item.id(如果您的列表包含对象)。

5. 调试流程
  1. 选择“调试”→“分步调试”。
  2. Maestro 会为每个列表项目运行一次“验证发票”。

结果:执行追踪记录会显示每张发票运行一次,每次都会标记其项目值。

要同时而不是按顺序运行所有项目,请在步骤 2 中选择“并行多实例”。另请参阅下面的扇出示例

示例:扇出并收集结果

场景:您从外部 API 收到发票 ID 的列表,需要独立验证每个 ID,然后在下游步骤中使用汇总结果。

  1. 确保列表变量(例如vars.invoiceIds )由上一个步骤填充,例如调用外部 API 的“服务”任务。

  2. 添加名为“验证发票”服务任务,并在常规任务中配置验证单个发票的操作。确认“输出”部分反映了操作 — response条目应显示操作的实际输出类型。

  3. 选定任务后,选择“更改元素”“并行多实例”

  4. “多实例”部分中,将“项目”设置为vars.invoiceIds

  5. “输入”部分中,将iterator.item映射到操作的发票 ID 参数 — 例如,将invoiceId输入设置为iterator.item

  6. “输出”部分中,验证操作的response输出是否已列出并且绑定到操作的结果。如果每次迭代都需要额外的聚合值,请选择“+新增”并进行定义。如果列出的输出与您的操作公开的输出不匹配,则表示在配置操作之前应用了标记;请参阅聚合变量包含空值

  7. “更新变量”部分中,选择“设置变量值” ,然后选择用于存储聚合结果的变量,例如vars.validationResults 。所有迭代完成后,每个发票的此变量包含一个条目 — 如果您的操作返回字符串,则为字符串数组;如果您的操作返回对象,则为对象数组。

运行时行为

  1. 扇出/扇入:Maestro 为每个项目创建一个活动实例,并在所有实例完成后完成组。
  2. 排序:“顺序”模式下保证;在“并行”模式下不保证。
  3. 并发:并行模式会并发运行项目,受平台限制和资源可用性的约束。
  4. 失败:每个项目的结果都是独立的。定义下游逻辑,用于处理部分失败(例如,根据阈值继续、重试或停止)。
  5. 可观察性:每次项目运行都在执行追踪记录中单独跟踪,显示每个项目的状态和结果。

故障排除

聚合变量包含 null 值

即使每次迭代都成功运行,由“更新变量”生成的聚合变量在每次迭代时都包含null (例如[null, null, null] )。

当在选择其“操作”之前将任务转换为多实例时,会发生这种情况。多实例配置已绑定到任务的默认输出占位符,而不是操作的实际输出,之后选择操作不会刷新此绑定。每次迭代都会写入未绑定的输出和聚合器记录null

要修复现有任务:

  1. 在元素工具栏中,选择“更改元素” ,然后将任务转换回常规任务。
  2. 确认已选择操作,并且确认“输出”部分反映了该操作(例如,操作输入response ,加上智能体操作Error )。
  3. 使用“更改元素”“顺序多实例”“并行多实例”再次将任务转换为多实例。
  4. “输出”部分中,验证条目仍与操作的输出匹配。

为防止在新任务上出现这种情况,请务必在将任务转换为多实例任务之前配置操作

项目输入将被忽略,任务运行一次

该任务运行一次,并且“项目”值被视为常规输入。

当传递给项目的变量不是受支持的集合类型之一时,就会发生这种情况。根据“支持的集合类型”检查数据管理器中的变量类型。如果您已将列表定义为纯字符串,请将其转换为字符串数组对象数组

输出条目未反映操作的输出

“输出”部分不会显示您期望从所选操作中获得的条目——例如,智能体操作应该公开responseError ,但只显示通用的response占位符。

在所选择的操作完成传播之前捕获输出。通过更改元素→ 常规任务取消多实例标记,确认输出部分反映操作,然后重新应用标记。

最佳实践

  1. 在扇出之前验证集合(检查空、null 或过大的列表)。
  2. 保持每个项目的工作时间短且具有容错功能。在适当的情况下添加重试。
  3. 仅聚合您需要的内容。 大型聚合可能会影响性能和可读性。
  4. 明确成功标准。多实例任务完成后,添加“排他网关”,用于评估聚合输出变量,例如,只有成功结果数量达到阈值时,才会路由到下一个步骤。
备注:

并行多实例以 50 个为一组执行元素。如果每个项目是大型或复杂对象(多个键值对或嵌套结构),也请确保集合总大小低于 50,因为项目大小会影响可以并发维持的数量。

阅读“标记(BPMN 入门)”以获取标记和概念指导,阅读“BPMN 支持”以了解 Maestro 中支持的 BPMN 元素完整列表。

在子流程或调用活动中工作? 有关变量作用域、输入/输出映射和“结束事件”变量,请参阅“子流程”

此页面有帮助吗?

连接

需要帮助? 支持

想要了解详细内容? UiPath Academy

有问题? UiPath 论坛

保持更新