前言
基于activit7.0.M4使用过程中,发现实际使用效果与网上描述不一致,特此记录。
事件网关(eventBasedGateway)
图标:
说明:事件网关是专门为中间捕获事件设置的,它允许设置多个输出流指向多个不同的中间捕获事件(最少两个)。在流程执行到事件网关后,流程处于“等待”状态。等待捕获事件的触发。
使用注意点:
事件网关时专门使用与中间捕获事件的排斥网关,跟排斥网关决定流程走向的区别是基于捕获的顺序,谁先捕获事件,流程就运行到哪个捕获事件所在的流程。当其中一个中间捕获事件触发后,其余输出流的中间捕获事件便不在进行监听,自动销毁。
例如如下流程,当流程启动后,便在信号捕获事件和定时捕获事件处处于等待,如果在10秒内没接收到信号testsignal,事件网关自动销毁了信号捕获事件,执行用户任务1节点,用户任务2节点就不再触发。
如果在10分钟内接收到信号testsignal,捕获事件被触发,定时捕获事件自动销毁,不再执行用户任务1,而是执行用户任务2
部分代码
<bpmn2:eventBasedGateway id="Gateway_1xg8ktq">
<bpmn2:extensionElements>
<custom:customProperties />
</bpmn2:extensionElements>
<bpmn2:incoming>Flow_1notrqy</bpmn2:incoming>
<bpmn2:outgoing>Flow_05rzdfz</bpmn2:outgoing>
<bpmn2:outgoing>Flow_1yz8jzi</bpmn2:outgoing>
</bpmn2:eventBasedGateway>
<bpmn2:intermediateCatchEvent id="Event_0ywagrb">
<bpmn2:incoming>Flow_05rzdfz</bpmn2:incoming>
<bpmn2:outgoing>Flow_1yh31zh</bpmn2:outgoing>
<bpmn2:timerEventDefinition>
<bpmn2:timeDuration xsi:type="bpmn2:tFormalExpression">PT10S</bpmn2:timeDuration>
</bpmn2:timerEventDefinition>
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="Flow_05rzdfz" sourceRef="Gateway_1xg8ktq" targetRef="Event_0ywagrb" />
<bpmn2:intermediateCatchEvent id="Event_03dkqpz">
<bpmn2:incoming>Flow_1yz8jzi</bpmn2:incoming>
<bpmn2:outgoing>Flow_1o1r30z</bpmn2:outgoing>
<bpmn2:signalEventDefinition signalRef="Signal0.7560552897034409" />
</bpmn2:intermediateCatchEvent>
<bpmn2:sequenceFlow id="Flow_1yz8jzi" sourceRef="Gateway_1xg8ktq" targetRef="Event_03dkqpz" />
<bpmn2:userTask id="Activity_0iiplyc" name="用户任务1" activiti:assignee="admin">
<bpmn2:incoming>Flow_1yh31zh</bpmn2:incoming>
<bpmn2:outgoing>Flow_06d15o8</bpmn2:outgoing>
</bpmn2:userTask>
<bpmn2:sequenceFlow id="Flow_1yh31zh" sourceRef="Event_0ywagrb" targetRef="Activity_0iiplyc" />
<bpmn2:userTask id="Activity_0aio57q" name="用户任务2" activiti:assignee="admin">
<bpmn2:incoming>Flow_1o1r30z</bpmn2:incoming>
<bpmn2:outgoing>Flow_0qm6yxk</bpmn2:outgoing>
</bpmn2:userTask>
<bpmn2:signal id="Signal0.3024538477809273" name="testsignal" />