循环相当编程语言中的 for
/while
/forEach
等语法结构,当需要一定次数或针对某个数据集合(数组)重复执行一些操作时,可以使用循环节点。
在工作流配置界面中,点击流程中的加号(“+”)按钮,添加“循环”节点:
创建循环节点后,会生成一个循环内部的分支,可以在分支中增加任意多个节点,这些节点除了可以使用流程上下文的变量,还可以使用循环上下文的局部变量,例如循环集合中每次循环到的数据对象,或者是循环次数的索引(索引从 0
开始计数)。局部变量的作用域仅限于循环内部,如果有多层循环嵌套,可以按层使用具体循环的局部变量。
循环会以循环对象不同数据类型做不同的处理:
数组:最常见的情况,通常是可以选择流程上下文的变量,比如查询节点的多条数据结果,或者预加载的对多关系数据。如果选择的是数组,循环节点会遍历数组中的每个元素,每次循环都会将当前元素赋值给循环上下文的局部变量。
数字:当选择的变量是一个数字是,会以该数字为循环次数,局域变量中的循环次数的索引也即循环对象的值。
字符串:当选择的变量是一个字符串时,会以该字符串的长度为循环次数,每次按索引处理字符串中的每一个字符。
其他:其他类型的值(包括对象类型)都仅作为单次处理的循环对象,也只会循环一次,通常这种情况不需要使用循环。
除了选择变量,针对数字和字符串类型也可以直接输入常量,例如输入 5
(数字类型),循环节点会循环 5 次,输入 abc
(字符串类型),循环节点会循环 3 次,分别处理 a
、b
、c
三个字符。在选择变量的工具中选择希望使用常量的类型。
例如在订单下单时,需要对订单中的每个商品进行库存检查,如果库存充足则扣减库存,否则订单明细内的商品更新为无效。
创建三张表,商品表 <-(1:m)-- 订单明细表 --(m:1)-> 订单表,数据模型如下:
字段名称 | 字段类型 |
---|---|
订单商品明细 | 多对一(明细) |
订单总价 | 数字 |
字段名称 | 字段类型 |
---|---|
商品 | 一对多(商品) |
数量 | 数字 |
字段名称 | 字段类型 |
---|---|
商品名称 | 单行文本 |
价格 | 数字 |
库存 | 整数 |
创建工作流,触发器选择“数据表事件”,选择“订单”表“新增数据时”触发,并且需要配置上预加载“订单明细”表和明细下的商品表的关系数据:
创建循环节点,选择循环对象为“触发数据 / 订单明细”,即对订单明细表中的每一条数据:
循环节点内部创建一个“条件判断”节点,判断商品的库存是否充足:
如果充足则在“是”的分支中创建一个“计算节点”和一个“更新数据”节点,将计算完扣减的库存更新至对应商品的记录:
否则在“否”的分支中创建一个“更新数据”节点,更新订单明细的状态为“无效”:
总的流程结构如下图:
配置完成并激活该流程后,当创建新订单时,会自动检查订单明细中的商品库存,如果库存充足则扣减库存,否则订单明细内的商品更新为无效(以便计算有效的订单总价)。