简介
边界事件:边界事件属于一种特殊的中间事件。
区别是: 中间事件 可以单独作为流程元素存在于流程中,而 边界事件 必须附属于某个流程元素(如任务、子流程等)。边界事件是Catching事件。
边界出错事件
说明
依附于子流程或者TASK上发生异常触发事件。
本质上是捕获BPMNError,如果配置了错误引用,则只会捕获指定code,没有则是捕获全部
依附在任务上
1.记录一个插曲,我是在任务办理阶段 想着抛出一BPMNError异常 以为就可以正常走边界异常这条线
结果始终没生效
委托类可以可以正常执行的 所以参考:org.flowable.engine.impl.bpmn.helper.ClassDelegate#execute
发现真正触发边界的是以下标红的方法 当出现异常可以选择是抛出还是走边界异常。
try {
activityBehaviorInstance.execute(execution);
} catch (BpmnError error) {
ErrorPropagation.propagateError(error, execution);
} catch (RuntimeException e) {
if (!ErrorPropagation.mapException(e, (ExecutionEntity) execution, mapExceptions))
throw e;
}
针对某些api并没有这样的捕获处理.所以自己定义,或者将来在最外层定义一个拦截器(必须最外层哦)。以下我的测试
必须最外层哦:比如我在ExecutinListener监听器try catch。try cath因为走了异常边界没有往上抛异常 还是会继续执行api办理的后续流程。导致出错。
最外层的意思就是以前那条线出现异常不能往下走,则尝试走异常边界
/**
* 任务办理
* @param completeReqDTO
*/
@Override
@Transactional
public void complete(CompleteReqDTO completeReqDTO) throws BusinessException {
//在flowable生命周期里面执行
processEngine.getProcessEngineConfiguration().getCommandExecutor().execute(new Command