一.边界错误事件
流程:
3.边界错误事件属性配置界面:
4.子流程服务节点配置:
public class TestServiceListener implements JavaDelegate {
@Override
public void execute(DelegateExecution execution) {
System.out.println("coming");
throw new BpmnError("abc");
}
}
流程进入到子流程的服务任务节点后会抛出BPMN异常"abc",此时错误边界事件会捕捉到这个异常,然后流转到"接收边界错误事件"节点。
说明:
若配置了边界错误事件的"错误引用"属性,则此引用必须包含抛出的异常信息,比如"错误引用"属性配置了"aaa",但是却抛出的是"abc"异常,异常无法别捕捉,则会产生错误。该属性可以为空,此时捕捉任何异常流转到"接收边界错误事件"节点。
PS:接收的是 BpmnError 异常
二、边界消息事件
1.图标:
2.流程图:
3.边界消息事件属性配置界面:
上述消息引用的选择需要在整个流程层次上提前定义才可以进行选择,如下:
此时,在边界消息事件组件上进行"信号引用"属性进行选择了。
触发:
runtimeService.messageEventReceived("messageName",executionId);
边界消息事件只能根据executionId进行触发。
三、信号边界事件和中间信号捕获事件,两种方式使用方法几乎一样的,区别就是信号边界事件只能用在某个节点上,中间信号捕获事件只能单独作为一个节点使用。具体可看下方示例:
图标:
流程中的两种使用方式:
边界信号事件:用在节点上
中间信号捕获事件:单独作为一个节点信息
边界事件节点属性配置:
"信号引用"属性节点在未配置前是无法选择的,需要提前配置,如下:
然后就可以选择刚刚配置的信号属性信息了。
激活信号事件:
List<Execution> executionList=runtimeService.createExecutionQuery().signalEventSubscriptionName("Signal")
.list();
// 此种方法只能针对没有TenantId的流程实例信息,有TenantId的不生效
runtimeService.signalEventReceived(signalName);
// 此种方法针对没有TenantId的流程实例
runtimeService.signalEventReceivedWithTenantId(signalName,TenantId);
信号事件是全局的,不局限于某个或某些流程实例,只要有相应"signalName"的都会收到信号事件