Camunda 子流程实现实现示例Demo(外部子流程Call Activity)
Camunda子流程有两种实现方式:嵌套子流程(Embedded Subprocess)和外部子流程(Call Activity)。以下介绍Camunda外部子流程(Call Activity)的实现方式,通过示例介绍主流程如何发起子流程,主子流程间变量如何传递。
一、什么是调用子流程
BPMN 2.0区分了嵌入式子流程(Embedded Subprocess)和调用活动(Call Activity)。从概念上看,当流程执行到达活动时,两者都将调用子流程。
不同之处在于,调用活动引用流程定义外部的流程,而子流程嵌入在原始流程定义中。调用活动的主要用例是拥有可重用的流程定义,可以从多个其他流程定义调用该定义。子流程的流程定义是在运行时解析的。如果需要,也可以独立调用子流程。
当流程执行到达调用活动时,将创建一个新的流程实例,该实例用于执行子流程,可能会像在常规流程中那样创建并行子执行。主流程实例将一直等待,直到子流程完全结束,然后继续原始流程。
二、流程模拟验证
模拟公文处理流程:拟稿人起草公文——》部门会签——》领导签发,其中部门会签通过外部子流程实现。
第一步、设计流程图
设计公文审批主流程:
设计公文会签子流程:
第二步、主子流程关联配置
点击子流程节点,配置要调用哪个子流程。在调用活动中,calledElement属性包含流程定义键,作为对子流程的引用。这意味着总是调用子流程的最新流程定义版本。要调用子流程的另一个版本,可以在调用活动中定义属性calledElementBinding、calledElementVersion和calledElementVersionTag。这些属性是可选的。
第三步、主子流程变量传递配置
您可以将流程变量传递给子流程,反之亦然。数据在启动时复制到子进程中,在结束时复制回主进程中。
如下图所示,定义主流程变量a1和a2 要分别传递给子流程b1和b2。
如下图所示,定义子流程变量c1要传递给主流程c2。
如下图所示,在子流程中通过script脚本模拟生成变量c1,实际业务应用中可以把表单字段传递过来。
主流程BPMN流程模型文件:
子流程BPMN流程模型文件:
第四步、发起主流程
通过demo用户登录camunda平台http://localhost:8080/camunda/app/tasklist/default/#/login,发起主流程:
填写流程变量a1和a2:
启动流程后,此时流程在主流程第一个活动节点,点击提交流程,将自动激活子流程。
查看此时主流程的流程变量:
第五步、启动子流程
主流程点击提交,流程执行到达子流程调用活动,将创建一个新的流程实例,该实例用于执行子流程,此时主流程实例将一直等待,直到子流程完全结束,然后继续原始流程。通过user1登录查看子流程待办,并提交待办任务。
查看子流程的流程变量,发现主流程变量a1和a2分别传递了过来,自动映射为b1和b2。
user1登录系统,查看子流程待办任务,提交任务,子流程结束,流程自动回到主流程。
此时查看主流程变量,发现子流程变量c1成功返回给了主流程,自动映射为名称c2 。
通过以上演示了camunda如何配置子流程、如何发起子流程、主子流程间如何传递变量,详细请查看官方文档。
参考:
http://www.yunchengxc.com