Camunda条件事件示例Demo(Conditional Events)
Camunda条件事件(Conditional Events):定义了一个事件,该事件在给定条件被求值为true时被触发。它可以作为事件子流程的起始事件、中间事件和边界事件。开始和边界事件可以是中断的和不中断的。在Camunda中,条件事件是在流程变量的帮助下触发的。
Camunda条件事件包括:Conditional Start Event(启动条件事件)、Intermediate Conditional Catch Event(中间捕获条件事件)、Conditional Boundary Event(边界条件事件)、Conditional Start Event for Event Sub Process(子流程条件事件)。
本文重点介绍Conditional Start Event(启动条件事件)和T Conditional Boundary Event(边界条件事件),其它事件请参考camunda官方文档:https://docs.camunda.org/manual/7.15/reference/bpmn20/events/
一、设计流程图
测试场景:通过报销流程模拟条件事件流程自动发起,如果报销金额大于10000元,将自动发起报销审批子流程,在财务审批环节,如果报销金额金额发生变化,自动触发边界条件事件,退后给审批人。
报销主流程:
报销事件节点配置:
代理类代码如下:
BPMN流程模型文件:
报销审批子流程:
Conditional Start Event(启动条件事件)节点配置:
${money>=10000} 表示报销金额大于等于1万元,流程自动启动。
Conditional Boundary Event(边界条件事件)节点配置:
${money>=20000}表示报销金额大于等于2万元,自动触发边界条件事件。
BPMN流程模型文件:
二、部署流程并测试验证
流程部署后,查看数据库流程订阅事件表act_ru_event_subscr,发现Conditional Start Event(条件启动事件)已持久化到数据库中。
通过demo用户登录camunda平台http://localhost:8080/camunda/app/tasklist/default/#/login,启动主流程模拟测试。
由于报销金额满足条件,所以子流程被自动触发启动:
手动子流程提交到下一节点:
此时,流程流转到了Conditional Boundary Event(边界条件事件)节点上,查看数据库表记录:
为了模拟触发Conditional Boundary Event,在camunda后台修改money变量值:
由于流程变量money变成了20000,满足了Conditional Boundary Event触发条件,所以流程自动流程到对应节点。
三、条件事件使用说明
- Conditional Start Event(启动条件事件)
条件启动事件(Conditional Start Event)可以通过计算某些条件来启动流程。一个流程可以有一个或多个条件启动事件。
如果满足了多个条件,则会触发相应数量的进程。
部署带有条件启动事件的流程定义时,需要考虑以下事项:
在给定的流程定义中,条件启动事件的条件必须是唯一的,也就是说,流程定义不能有多个条件相同的条件启动事件。如果两个或多个条件启动事件包含相同的条件,则引擎会在部署流程定义时抛出异常。
流程版本控制:在部署流程定义的新版本时,将取消前一个版本的条件订阅。新版本中没有出现的条件事件也是如此。
当启动一个流程实例时,可以在RuntimeService上使用以下方法触发一个条件启动事件:
所提供的变量用于计算条件。它们还将作为变量传递给新创建的流程实例。条件启动事件的XML表示是带有conditionalEventDefinition子元素的普通启动事件声明。
可选:将variableName属性添加到conditionalEventDefinition允许指定一个变量名,在该变量名上,条件事件的条件应专门计算。
2、Conditional Boundary Event(边界条件事件)
条件边界事件(Conditional Boundary Event)就像一个观察者,如果满足一个特定的条件,它就会被触发。中断条件事件和非中断条件事件是有区别的。缺省情况下为中断事件。非中断事件导致原始活动未被中断,实例仍处于活动状态。相反,创建了一个额外的执行路径,采用事件的传出转换。一个不中断的条件事件可以被触发多次,只要它所附加的活动是活动的。
在非中断条件事件的XML表示中,cancelActivity属性被设置为false:
参考:
https://docs.camunda.org/manual/7.15/reference/bpmn20/events/conditional-events/