Activiti 5.3提供了子流程的实现,包括两种基于子流程的实现:
一种是内嵌子流程:子流程元素<subProcess>内嵌在主流程元素<process>之内,只能在该流程中使用该子流程,外部是无法访问到的。这种子流程一般作为局部通用逻辑处理,或者因为特定业务需要,使得比较复杂的单个主流程设计清晰直观;
另一种是调用子流程:首先实现一个流程,在另一个流程中可以调用该流程,通常可以定义一些通用的流程作为这种调用子流程,供其他多个流程定义复用。这种子流程使用<callActivity>元素来进行调用,间接地嵌入到主流程中,用起来比较方便。
内嵌子流程
实现的基于内嵌子流程的流程,示例如图所示:
对应的流程定义文件SubProcessTest.MySubprocess.bpmn20.xml,内容如下所示:
流程定义中,实现了3个TaskListener,对应的代码分别如下所示:
测试用例,代码如下所示:
运行结果信息,如下所示:
调用子流程
实现的子流程,示例如图所示:

对应的流程定义文件Subprocess.Check.bpmn20.xml,如下所示:
上面的流程定义,和通常定义流程的方式是相同的。流程中,对应的JavaDelegate的实现类,代码如下所示:
该BusinessCheck类简单用来校验用户数据。
下面看一下主流程,如图所示:

上面的callSubprocess结点对应的就是流程定义中的<callActivity>元素,调用了外部流程。对应的流程定义文件Subprocess.Mainprocess.bpmn20.xml,如下所示:
需要说明的是,对于主流程与子流程之间进行数据交换,需要在<callActivity>元素中进行配置,通过执行“传入”、“传出”变量的方式来进行。片段如下所示:
我们可以通过在主流程中设置一个变量为varOutFromMainprocess,并指定对应的输入数据,根据流程定义,会将变量varOutFromMainprocess对应的值,传递给子流程中的变量varInSubprocess,只需要在子流程中获取变量varInSubprocess的值即可。从子流程中传出数据的道理是类似的。上面实现了2个JavaDelegate处理类,代码分别如下所示:
实现的测试用例,代码如下所示:
代码中org.shirdrn.workflow.activiti.AbstractTest类可以参考:Activiti 5.3:流程活动自动与手工触发执行里面。上述测试程序运行结果如下所示:
本文详细介绍了Activiti 5.3中的子流程实现,包括内嵌子流程和调用子流程。内嵌子流程用于局部通用逻辑,而调用子流程则可复用。示例展示了如何定义子流程,任务监听器的使用,以及主流程与子流程间的数据交换。同时提供了测试用例和运行结果。
3106

被折叠的 条评论
为什么被折叠?



