如何搭建一个子流程任务
1 概述
“外部子流程”功能可以让您在一个流程中调用另一个流程,具体可通过“调用流程”节点实现。
主流程:发起调用的流程,可以是任意类型的流程。
子流程:被调用的流程,目前仅支持触发类型为“空触发”的流程;注意,子流程就是一个普通流程,可独立使用。
2 功能特性
执行控制:一个主流程可以发起多个子流程,可控制这些子流程同时执行或按序执行;调起子流程后,可以控制主流程是否要等待全部子流程执行完毕后,再继续执行后续任务。
参数传递:父、子流程间可以互相传递数据,但仅限于发起子流程时、子流程结束时两个时刻。
通常而言,主流程是否等待子流程执行完成,取决于主流程后续的任务是否依赖子流程运行的结果。
3 关键配置项
“外部子流程”功能需要在主流程种进行配置。
- 子流程:指定被调起的流程,目前限制子流程触发类型为“空触发”。
- 实例控制:指定发起流程实例数量,并传递核心数据;取值须为数组,否则主流程异常结束,数组中一个元素发起一个子流程实例。
- 子流程启动者:指定每个子流程的发起人;取值须为整型数组,长度与“实例控制”相同,否则主流程异常结束,数组元素为用户ID。
- 流转规则(是否等待):指定主流程是否等待子流程执行,取值如下:
- 等待:子流程执行完成后,主流程进入下一节点
- 不等待:子流程发起后,主流程进入下一节点
- 多例处理:指定子流程的发起方式,取值为如下:
- 并行:同时发起所有子流程实例
- 串行:按序发起子流程实例,上一个子流程实例执行完成后,下一个子流程实例启动
- 输入参数:发起子流程时,指定主流程如何向子流程传入参数。
- 输出参数:子流程执行结束时,指定子流程如何向主流程回写参数。
实例控制、子流程发起者、输入参数、输出参数需使用“公式编辑器”,所输入内容AI速搭会使用 模板模式 进行解析。
4 最佳实践
4.1 使用步骤
4.2 关键问题
理解下文内容前,需要先理解JavaScript中的 For循环语法 ,我们会将循环中的序号当做index,对应的数组元素当做item。
4.2.1 初始化子流程
在配置“实例控制”、“子流程启动者”时,需确保这两个配置项最终为长度一致的数组。 AI速搭会为“实例控制”中每个元素发起一个子流程实例,并在“子流程启动者”中取对应的用户ID做为子流程发起人(例:为“实例控制”数组第3个元素发起子流程时,取“子流程启动者”数组中第三个整型做为发起人的用户ID)。 以伪代码说明如下:
for (i = 0; i < 实例控制.length; i++) {
...
var index = i;
var item = 实例控制[index]
var 发起人ID = 子流程启动者[index];
发起子流程(item, 发起人ID);
...
}
4.2.2 执行控制
执行控制由“是否等待”、“多例处理”共同决定,一共存在4中场景:
- 主流程等待+子流程并行:主流程同时调起所有子流程实例,全部子流程实例执行完成后,主流程进入下个节点。
- 主流程等待+子流程串行:主流程按“实例控制”中元素顺序,发起第一个子流程实例,后续子流程实例等上个实例完成后依次发起,全部子流程实例执行完成后,主流程进入下个节点。
- 主流程不等待+子流程并行:主流程同时调起所有子流程实例后,立即进入下个节点,不再关注子流程状态,各个子流程实例独立执行。
- 主流程不等待+子流程串行:暂不支持。
4.2.3 主流程向子流程传入参数
发起子流程时,会根据主流程“实例控制”、“输入参数”配置向子流程传入参数。参数保存于子流程的“全局流程参数”中,需提前配置。
子流程参数可在页面点选,对应的取值可通过模板模式配置,可使用index关键字、item关键字,主流程的全局参数、实例变量、节点变量等。其中,index、item分别代表“实例控制”数组的序号和元素。
以伪代码说明如下:
配置为:
子流程参数1 << ${index}
子流程参数2 << ${item}
子流程参数3 << ${填写节点数据[index]}额外内容
对应伪代码为:
for (i = 0; i < 实例控制.length; i++) {
...
var index = i;
var item = 实例控制[index]
子流程参数1 = index;
子流程参数2 = item;
子流程参数3 = 填写节点数据[index] + "额外内容";
...
}
4.2.4 子流程向主流程回写参数
子流程结束时,如果主流程是等待模式,会根据主流程“输出参数”配置自动向主流程写回参数。参数保存于主流程的“全局流程参数”中,需提前配置。
主流程参数可在页面点选,对应的取值可通过模板模式配置,可使用子流程的全局参数、实例变量。存在多个子流程实例同时将参数写回一个主流程实例的情况,如果被写回的主流程参数是数组,则多个子流程参数会依次添加;如果被写回的主流程参数是非数组,则多个子流程参数会发生覆盖。
以伪代码说明如下:
配置为:
主流程字符串参数 << ${子流程参数1}
主流程数组参数 << ${子流程参数2}
对应伪代码为:
主流程字符串参数 = 子流程参数1;
主流程数组参数.push(子流程参数2);
注意:配置参数回写时,在模板中使用的变量必须是属于子流程的,切忌使用父流程中变量,将解析不到取值。
4.3 完整案例
暂无
5 数量限制
- 单日、单流程实例,可创建任务数不超过5000;
- 单日、单流程,可创建流程实例数不超过20000;
私有化场景下,该限制可进行配置。