1. 排他网关
(1) 说明
排他网关,也叫异或网关,用于对流程中的决策建模。当执行到达这个网关时,会按照所有出口顺序流定义的顺序对它们进行计算。选择第一个条件计算为true的顺序流继续流程。
(2)示例
<process id="demo" name="demo" isExecutable="true">
<startEvent id="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30"/>
<endEvent id="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
<serviceTask id="sid-90c65ef2-17f9-40fa-997f-d814538466c1" flowable:exclusive="true" name="处理2" flowable:class="com.example.flowableproject.config.CustomJavaDelegate2"/>
<exclusiveGateway id="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f"/>
<serviceTask id="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" flowable:exclusive="true" name="处理1" flowable:class="com.example.flowableproject.config.CustomJavaDelegate1"/>
<sequenceFlow id="sid-161956d3-9bad-444f-8b3d-bc7936b1cd0c" sourceRef="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30" targetRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f"/>
<sequenceFlow id="sid-265bddbe-52da-4a39-bc92-504cbb1b647a" sourceRef="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" targetRef="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
<sequenceFlow id="sid-bbf50145-cfca-475f-9634-29016514b070" sourceRef="sid-90c65ef2-17f9-40fa-997f-d814538466c1" targetRef="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
<sequenceFlow id="sid-2cfef263-5efb-4b41-a53c-c3fb5e04894d" sourceRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f" targetRef="sid-1ff27804-804a-477a-9bbf-d1bc08481af0">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${days<=3}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-ed977f14-11c8-42f5-964e-d30a5a9709dc" sourceRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f" targetRef="sid-90c65ef2-17f9-40fa-997f-d814538466c1">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${days>3}]]></conditionExpression>
</sequenceFlow>
</process>
变量a小于等于3走业务1流程;变量a大于3走业务2流程。
2. 并行网关
(1) 说明
并行网关允许将流程分成多条分支,也可以把多条分支汇聚到一起,并行网关的功能是基于进入和外出顺序流的。并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。
(2)示例
<process id="demo" name="demo" isExecutable="true">
<startEvent id="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30"/>
<endEvent id="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
<serviceTask id="sid-90c65ef2-17f9-40fa-997f-d814538466c1" flowable:exclusive="true" name="业务2" flowable:class="com.example.flowableproject.config.CustomJavaDelegate2"/>
<serviceTask id="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" flowable:exclusive="true" name="业务1" flowable:class="com.example.flowableproject.config.CustomJavaDelegate1"/>
<sequenceFlow id="sid-161956d3-9bad-444f-8b3d-bc7936b1cd0c" sourceRef="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30" targetRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f"/>
<sequenceFlow id="sid-2cfef263-5efb-4b41-a53c-c3fb5e04894d" sourceRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f" targetRef="sid-1ff27804-804a-477a-9bbf-d1bc08481af0"/>
<sequenceFlow id="sid-ed977f14-11c8-42f5-964e-d30a5a9709dc" sourceRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f" targetRef="sid-90c65ef2-17f9-40fa-997f-d814538466c1"/>
<parallelGateway id="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f"/>
<parallelGateway id="sid-3bd44f49-b429-4e7b-9075-a3e3354203c4"/>
<sequenceFlow id="sid-9eb7f88c-4645-4e5b-a0e5-783247494a4d" sourceRef="sid-3bd44f49-b429-4e7b-9075-a3e3354203c4" targetRef="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
<sequenceFlow id="sid-89985f4a-e470-4564-b119-3b43a7c0c293" sourceRef="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" targetRef="sid-3bd44f49-b429-4e7b-9075-a3e3354203c4"/>
<sequenceFlow id="sid-daaa7ecb-d315-4e0a-bcd9-7d56e6cb08ec" sourceRef="sid-90c65ef2-17f9-40fa-997f-d814538466c1" targetRef="sid-3bd44f49-b429-4e7b-9075-a3e3354203c4"/>
</process>
业务1、业务2都处理,并且当业务1、业务2都完成后才会汇聚走下面的业务流程。
3. 包含网关
(1) 说明
包含网关可以看做是排他网关和并行网关的结合体。 和排他网关一样,你可以在外出顺序流上定义条件,包含网关会解析它们。 但是主要的区别是包含网关可以选择多于一条顺序流,这和并行网关一样。
(2)示例
<process id="demo" name="demo" isExecutable="true">
<startEvent id="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30"/>
<endEvent id="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
<serviceTask id="sid-90c65ef2-17f9-40fa-997f-d814538466c1" flowable:exclusive="true" name="业务2" flowable:class="com.example.flowableproject.config.CustomJavaDelegate2"/>
<serviceTask id="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" flowable:exclusive="true" name="业务1" flowable:class="com.example.flowableproject.config.CustomJavaDelegate1"/>
<sequenceFlow id="sid-161956d3-9bad-444f-8b3d-bc7936b1cd0c" sourceRef="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30" targetRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f"/>
<sequenceFlow id="sid-2cfef263-5efb-4b41-a53c-c3fb5e04894d" sourceRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f" targetRef="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" name="小于等于3">
<conditionExpression><![CDATA[${days<=3}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-ed977f14-11c8-42f5-964e-d30a5a9709dc" sourceRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f" targetRef="sid-90c65ef2-17f9-40fa-997f-d814538466c1" name="大于等于3">
<conditionExpression><![CDATA[${days>=3}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-9eb7f88c-4645-4e5b-a0e5-783247494a4d" sourceRef="sid-3bd44f49-b429-4e7b-9075-a3e3354203c4" targetRef="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
<sequenceFlow id="sid-89985f4a-e470-4564-b119-3b43a7c0c293" sourceRef="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" targetRef="sid-3bd44f49-b429-4e7b-9075-a3e3354203c4"/>
<sequenceFlow id="sid-daaa7ecb-d315-4e0a-bcd9-7d56e6cb08ec" sourceRef="sid-90c65ef2-17f9-40fa-997f-d814538466c1" targetRef="sid-3bd44f49-b429-4e7b-9075-a3e3354203c4"/>
<inclusiveGateway id="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f"/>
<inclusiveGateway id="sid-3bd44f49-b429-4e7b-9075-a3e3354203c4"/>
</process>
变量a小于3走业务1流程;变量a大于3走业务2流程;变量等于3时业务1、业务2同时走。
4. 事件网关
(1) 说明
事件网关允许根据事件判断流向。网关的每个外出顺序流都要连接到一个中间捕获事件。 当流程到达一个基于事件网关,网关会进入等待状态:会暂停执行。与此同时,会为每个外出顺序流创建相对的事件订阅。
(2)示例
<signal id="signalName" name="开始信号"/>
<process id="demo" name="demo" isExecutable="true">
<startEvent id="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30" />
<endEvent id="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
<serviceTask id="sid-90c65ef2-17f9-40fa-997f-d814538466c1" flowable:exclusive="true" name="业务2" flowable:class="com.example.flowableproject.config.CustomJavaDelegate2"/>
<serviceTask id="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" flowable:exclusive="true" name="业务1" flowable:class="com.example.flowableproject.config.CustomJavaDelegate1"/>
<sequenceFlow id="sid-161956d3-9bad-444f-8b3d-bc7936b1cd0c" sourceRef="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30" targetRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f"/>
<inclusiveGateway id="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f"/>
<intermediateCatchEvent id="sid-a647b93a-8d3b-4299-838b-27fa595da541">
<timerEventDefinition>
<timeDuration>PT3M</timeDuration>
</timerEventDefinition>
</intermediateCatchEvent>
<intermediateCatchEvent id="sid-b3d75c39-6671-4fff-b114-6e09ab5699e7">
<signalEventDefinition signalRef="signalName"/>
</intermediateCatchEvent>
<sequenceFlow id="sid-b906014f-4aae-4725-a44a-e1e7d90f3108" sourceRef="sid-b3d75c39-6671-4fff-b114-6e09ab5699e7" targetRef="sid-90c65ef2-17f9-40fa-997f-d814538466c1"/>
<sequenceFlow id="sid-61eea14c-4e3d-46c6-943e-dad9b0c4ed9a" sourceRef="sid-a647b93a-8d3b-4299-838b-27fa595da541" targetRef="sid-1ff27804-804a-477a-9bbf-d1bc08481af0"/>
<sequenceFlow id="sid-c01db09c-691b-4f51-8b75-09d9efb8a064" sourceRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f" targetRef="sid-a647b93a-8d3b-4299-838b-27fa595da541">
<conditionExpression xsi:type="tFormalExpression"/>
</sequenceFlow>
<sequenceFlow id="sid-32cb76de-e937-4328-9223-d925c5d2a623" sourceRef="sid-43d3f2fc-bdec-40b5-9d28-68349bebe62f" targetRef="sid-b3d75c39-6671-4fff-b114-6e09ab5699e7">
<conditionExpression xsi:type="tFormalExpression"/>
</sequenceFlow>
<sequenceFlow id="sid-62ad80c7-aa51-413a-a4a8-00047388c7d6" sourceRef="sid-1ff27804-804a-477a-9bbf-d1bc08481af0" targetRef="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
<sequenceFlow id="sid-bfcd1eda-5854-4632-b654-7119f7d335a6" sourceRef="sid-90c65ef2-17f9-40fa-997f-d814538466c1" targetRef="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/>
</process>
定时任务和信号事件谁先触发就执行那路的流程业务。