错误开始事件
定义
错误开始事件可以触发一个异常子流程,它总是在另外一个流程在异常结束的时候触发。BPMN2.0 规定了错误开始事件只能使用在事件子流程(Event Sub-Process)中,该该事件不能
使用在其它流程中,包括最高级流程(Top-Level Process)、嵌套子流程(Sub-Process)和调用子流程(Call Activity)。
注意,BPMN 错误与 Java 异常不是一回事,BPMN 错误事件是建模业务异常(business exceptions)的方式,二者没有直接关联。
图形图标
错误开始事件是一个圆圈,包含一个错误事件标记。标记是白色未填充的,来表示捕获(接收)行为。
XML内容
<error id="errorStart" errorCode="501" />
<process id="errorStartEventProcess">
<startEvent id="errorStartEvent" >
<errorEventDefinition errorRef="theError" />
</startEvent>
</process>
在以上 xml 代码片段中,首先定义了一个 id 属性值为 theError 的错误,然后在开始事件中使用 errorEventDefinition 元素引用该 error,从而构成了一个错误开始事件。
注意:错误开始事件不能独立存在,必须是其他事件的子流程。
界面操作
错误定义
错误选择
使用示例
两种方式触发错误开始事件
1、错误结束事件抛出错误(注:错误结束事件也选择的是同一个错误定义)
2、自动执行主流程的服务任务抛出错误,接下来子流程的错误开始事件捕获到错误后执行。
@Slf4j
public class AutomaticReviewService implements JavaDelegate {
@Override
public void execute(DelegateExecution execution) {
String healthCodeStatus = (String) execution.getVariable("healthCodeStatus");
if (!"green".equals(healthCodeStatus)) {
String errorCode = "500";
log.error("健康码异常,抛出BPMN错误,errorCode为:{}", errorCode);
throw new BpmnError(errorCode);
}
}
}
视频地址:
演示demo
本文中内容和案例出自贺波老师的书《深入Activiti流程引擎:核心原理与高阶实战》,书中的介绍更全面、详细,推荐给大家。
深入Activiti流程引擎