- 简介
- 入门指南
- 使用 BPMN 进行流程建模
- 使用 Case Management 进行流程建模
- 使用 Flow 进行流程建模
- 流程实施
- 流程运营
- 流程监控
- 流程优化
- 参考信息
子流,用于使用可变的作用域规则和输入/输出配置,将流程节点分组为父工作流中可重用的独立单元。
内容概览
子流是嵌入到另一个流程中的流程。它将一组节点分组为一个独立的单元,这些单元作为父流程的一部分执行,并将输出返回给父流程。子流可帮助您将复杂的逻辑组织为可重用、可管理的部分。
工作方式
当父流程到达子流节点时,执行将进入子流并按顺序运行其节点。子流有自己的变量作用域,因此其中定义的变量不会与父流程中的变量冲突。子流完成后,其返回值将传递回父流程,并从子流的下一个节点继续执行。
子流内的节点可以访问:
- 同一子流中的其他节点
- 父流程的作用域
父流程可以以$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) — 检查是否存在必填字段,以及订单总金额是否大于零。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并路由到执行路径或错误处理路径。