UFLO 2 : 11.动态分支节点

       动态分支节点与分支节点作用类似,都是用来将流经的串行的流程实例拆分成若干并行的流程实例,但不同的是动态分支节点是动态的,也就是说它允许流程模版在运行时根据某些参数动态生成分支的数量,而不是像分支节点那样,需要将流出的分支连线画好,根据设计的流出连接来决定产生并行分支的数量。动态分支节点在工具栏上的图标如下图所示。

       添加一个动态分支节点,在属性窗口当中可以看到它有一个专有的属性窗口配置面签,通过该页签中提供的配置功能,可以对当前动态分支节点配置其特有的属性,相关属性说明如下表所示:

属性名类型描述
集合类型流程变量来源——流程变量字符串该属性定义流程变量表达式运行时计算的值类型要求必须是集合类型(java.util.Collection类型或Object[]类型),这个运行时产生的集合类型的值内部元素的数量,决定流程实例在流经当前节点时会产生多少条并行的分支流程实例,再配置后面的写入分支的变量名属性,将该集合中每个元素取出来,以“写入分支的变量名”属性定义的值作为变量名,写入产生的各个分支当中。
集合类型流程变量来源——实现类Bean字符串该属性定义的是一个实现了com.bstek.uflo.process.handler.ForeachHandler接口配置在Spring当中的bean的ID,这个配置在Spring中的Bean将在运行时调用其handle方法,可以看到该方法返回的同样是一个集合类型的值(java.util.Collection类型),同样这个运行时产生的集合类型的值内部元素的数量,决定流程实例在流经当前节点时会产生多少条并行的分支流程实例,再配置后面的写入分支的变量名属性,将该集合中每个元素取出来,以“写入分支的变量名”属性定义的值作为变量名,写入产生的各个分支当中。
写入分支的变量名字符串在通过“集合类型流程变量来源”产生一个集合类型的值后,引擎将会把该集合中的值拆分成与该集合大小相同量级,再产生与该集合大小数量相同的并行分支,每个分支都以流程变量形式写入该集合对应的一个元素的值,流程变量的名称就是这里的属性定义的值。

       与分支节点不同的是,动态分支节点下产生的并行分支数量是由运行时产生的集合类型的值的集合的大小决定,所以动态分支节点下有且只会有一条流出的连线,动态产生的分支将会以这条唯一的分支为模版,动态产生运行时需要的各个并行分支。动态分支节点对于我们大多数人来说可能是UFLO当中最为复杂的一个节点了,为了便于大家理解该节点,这里画了张示意图,用于说明动态分支节点作用,如下图所示。

  从上图当中可以看到,动态分支上产生的是一个字符串数组类型的集合变量,这个数组中有三个值,分别是“aaa”、“bbb”和"ccc",同时写入分支的变量名又定义为"test",这样在运行时,上图中在动态分支与聚合两节点之间将会产生三条并行的流程实例,在这三条并行流程实例中分别都有一个名为test的流程变量,这个名为test的流程变量的值在三个不同分支中分别是“aaa”、“bbb”和"ccc",运行时效果示意图如下所示:

       示意图中向我们清楚的展示了动态产生的三个并行分支,且每个分支上都有一个名为test的流程变量,它们的值就是集合中三个元素的值。

      在动态分支节点上可添加的流入与流出连线数量如下表所示:

连线类型
数量
流入连线1~n
流出连线1

Attachments:

foreach.png (image/png)
demo.png (image/png)
demo1.png (image/png)