並行閘道器 Parallel Gateway
作者:鄧家海
2018年3月25日 00:26:21
前言:
做工作流時間長後,慢慢的就會發現,很多客戶會需要會籤的功能,會籤的情況也有很多種,實現的方式也不一樣。在這裡我們先討論下並行閘道器,會籤放到後面去討論。
情景一:
在一個政府機關的辦公OA系統設計的時候,有這麼一個需求:政府需要做一個財務呈批的業務,由財務部門發起,然後經過其他所有部門,各部門根據自己的資金需求填寫申請表,然後經過各自部門的領導去稽核,各自部門領導稽核完成,然後合併給財務部領導稽核。
情景二:
完了,該政府部門還有一個需求,就是各個部門填完申請表後,到了領導去稽核的時候,我們需要各個部門的領導共同決定要不要放款。
我們很容易想到該流程應該是這樣的:
圖-1 審批流程簡化圖
分析:前提是每一個部門都需要申請,每一個領導都需要審批。
那麼,我們可以使用我們的並行閘道器來實現。
並行閘道器:
什麼是並行閘道器?
它可以將分支(fork)為多個路徑,也可以合併(join)多個入口路徑。
並行閘道器的前提條件:
基於出口順序流和入口順序流。
並行閘道器兩個重要特性:
分支(fork): 並行後的所有外出順序流,為每個順序流都建立一個併發分支。
合併(join): 所有到達並行閘道器,在此等待的進入分支, 直到所有進入順序流的分支都到達以後, 流程就會通過匯聚閘道器。
注意:
1.如果並行閘道器同時具有入口順序流和出口順序流,並行閘道器會先執行入口順序流,然後執行再分裂成多條可以執行的路徑。
2.並行閘道器不執行計算條件。並行閘道器上面的計算條件會被忽略。
3.並行閘道器分支和合並是同時存在的,就是說,一個至少有一個分支和一個合併。但是,閘道器是可以不平衡的,分支和合並的數量可以不一致。
並行閘道器的標識:
並行閘道器,用內部帶有’加號’圖示的閘道器(菱形)表示,代表與(AND)的含義。
定義並行閘道器:
1 <parallelGateway id="myParallelGateway" />
流程設計:
圖-2 並行閘道器設計圖
流程原始碼:
1 <?xml version='1.0' encoding='UTF-8'?> 2 3 <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"> 4 5 <process id="process" isExecutable="true"> 6 7 <startEvent id="sid-166AB575-206F-4C06-87AA-6F646B332F7F" /> 8 9 <parallelGateway id="sid-52E5C6C4-69CF-462A-9583-72568BE5692D" /> 10 11 <userTask id="sid-E4B059DD-FB7E-4181-BED5-588EC77647A1" name="員工一" activiti:assignee="admin" /> 12 13 <userTask id="sid-EA859B8D-3245-4584-98C8-DE0E35319DA5" name="員工二" activiti:assignee="admin" /> 14 15 <userTask id="sid-C06A652D-3CA7-4000-A2B3-6313E03C679A" name="部門經理" activiti:assignee="admin" /> 16 17 <parallelGateway id="sid-1434ED04-ADFE-4410-8A68-327500DA4C04" /> 18 19 <sequenceFlow id="sid-EDCEFC1E-8C16-406B-9A75-997DF7CFAA03" sourceRef="sid-1434ED04-ADFE-4410-8A68-327500DA4C04" targetRef="sid-C06A652D-3CA7-4000-A2B3-6313E03C679A" /> 20 21 <sequenceFlow id="sid-2C603D09-4CDA-4BF7-8C81-BC543541AF36" sourceRef="sid-166AB575-206F-4C06-87AA-6F646B332F7F" targetRef="sid-52E5C6C4-69CF-462A-9583-72568BE5692D" /> 22 23 <sequenceFlow id="sid-F7B8E655-8FC5-4205-93D8-64F39881DE28" sourceRef="sid-E4B059DD-FB7E-4181-BED5-588EC77647A1" targetRef="sid-1434ED04-ADFE-4410-8A68-327500DA4C04" /> 24 25 <sequenceFlow id="sid-EEBE283A-BB90-44E1-A6FA-88AA1CE52C39" sourceRef="sid-EA859B8D-3245-4584-98C8-DE0E35319DA5" targetRef="sid-1434ED04-ADFE-4410-8A68-327500DA4C04" /> 26 27 <sequenceFlow id="sid-BC06774A-44A2-43FA-BDF4-A5E701B3999A" sourceRef="sid-52E5C6C4-69CF-462A-9583-72568BE5692D" targetRef="sid-E4B059DD-FB7E-4181-BED5-588EC77647A1" /> 28 29 <userTask id="sid-C18060F2-D0AB-4E71-A7B6-6D3654E93FFF" name="主管" activiti:assignee="admin" /> 30 31 <sequenceFlow id="sid-7BA5A3D9-7BA9-4A3E-AF0A-E0F05A20FCC2" sourceRef="sid-52E5C6C4-69CF-462A-9583-72568BE5692D" targetRef="sid-C18060F2-D0AB-4E71-A7B6-6D3654E93FFF" /> 32 33 <sequenceFlow id="sid-035CCFB1-2074-409A-8ADB-13CD37A98A1E" sourceRef="sid-52E5C6C4-69CF-462A-9583-72568BE5692D" targetRef="sid-EA859B8D-3245-4584-98C8-DE0E35319DA5" /> 34 35 <parallelGateway id="sid-A0A5DB28-FFC6-4B14-ABC5-EE9310E39B53" /> 36 37 <sequenceFlow id="sid-C2EBDC51-ABEC-4B69-9924-0101B7EA9E91" sourceRef="sid-C06A652D-3CA7-4000-A2B3-6313E03C679A" targetRef="sid-A0A5DB28-FFC6-4B14-ABC5-EE9310E39B53" /> 38 39 <sequenceFlow id="sid-85C1D7AE-4568-427E-8E6D-AFC79ED41FD9" sourceRef="sid-C18060F2-D0AB-4E71-A7B6-6D3654E93FFF" targetRef="sid-A0A5DB28-FFC6-4B14-ABC5-EE9310E39B53" /> 40 41 <userTask id="sid-CA755ED3-B18F-41D0-BBE5-22D41CFCF024" name="老闆" activiti:assignee="admin" /> 42 43 <sequenceFlow id="sid-FD581601-B9AC-4E1E-8161-8EA8A84844B2" sourceRef="sid-A0A5DB28-FFC6-4B14-ABC5-EE9310E39B53" targetRef="sid-CA755ED3-B18F-41D0-BBE5-22D41CFCF024" /> 44 45 <endEvent id="sid-5EC7D180-D117-4F36-809B-E8940DB9FE91" /> 46 47 <sequenceFlow id="sid-78026DEB-C4DA-4BF4-9723-C4EE9124E785" sourceRef="sid-CA755ED3-B18F-41D0-BBE5-22D41CFCF024" targetRef="sid-5EC7D180-D117-4F36-809B-E8940DB9FE91" /> 48 49 </process> 50 51 <bpmndi:BPMNDiagram id="BPMNDiagram_process"> 52 53 <bpmndi:BPMNPlane bpmnElement="process" id="BPMNPlane_process"> 54 55 <bpmndi:BPMNShape bpmnElement="sid-166AB575-206F-4C06-87AA-6F646B332F7F" id="BPMNShape_sid-166AB575-206F-4C06-87AA-6F646B332F7F"> 56 57 <omgdc:Bounds height="30.0" width="30.0" x="75.0" y="145.0" /> 58 59 </bpmndi:BPMNShape> 60 61 <bpmndi:BPMNShape bpmnElement="sid-52E5C6C4-69CF-462A-9583-72568BE5692D" id="BPMNShape_sid-52E5C6C4-69CF-462A-9583-72568BE5692D"> 62 63 <omgdc:Bounds height="40.0" width="40.0" x="180.0" y="140.0" /> 64 65 </bpmndi:BPMNShape> 66 67 <bpmndi:BPMNShape bpmnElement="sid-E4B059DD-FB7E-4181-BED5-588EC77647A1" id="BPMNShape_sid-E4B059DD-FB7E-4181-BED5-588EC77647A1"> 68 69 <omgdc:Bounds height="80.0" width="100.0" x="277.0" y="24.0" /> 70 71 </bpmndi:BPMNShape> 72 73 <bpmndi:BPMNShape bpmnElement="sid-EA859B8D-3245-4584-98C8-DE0E35319DA5" id="BPMNShape_sid-EA859B8D-3245-4584-98C8-DE0E35319DA5"> 74 75 <omgdc:Bounds height="80.0" width="100.0" x="277.0" y="120.0" /> 76 77 </bpmndi:BPMNShape> 78 79 <bpmndi:BPMNShape bpmnElement="sid-C06A652D-3CA7-4000-A2B3-6313E03C679A" id="BPMNShape_sid-C06A652D-3CA7-4000-A2B3-6313E03C679A"> 80 81 <omgdc:Bounds height="80.0" width="100.0" x="480.0" y="75.0" /> 82 83 </bpmndi:BPMNShape> 84 85 <bpmndi:BPMNShape bpmnElement="sid-1434ED04-ADFE-4410-8A68-327500DA4C04" id="BPMNShape_sid-1434ED04-ADFE-4410-8A68-327500DA4C04"> 86 87 <omgdc:Bounds height="40.0" width="40.0" x="413.0" y="97.0" /> 88 89 </bpmndi:BPMNShape> 90 91 <bpmndi:BPMNShape bpmnElement="sid-C18060F2-D0AB-4E71-A7B6-6D3654E93FFF" id="BPMNShape_sid-C18060F2-D0AB-4E71-A7B6-6D3654E93FFF"> 92 93 <omgdc:Bounds height="80.0" width="100.0" x="277.0" y="225.0" /> 94 95 </bpmndi:BPMNShape> 96 97 <bpmndi:BPMNShape bpmnElement="sid-A0A5DB28-FFC6-4B14-ABC5-EE9310E39B53" id="BPMNShape_sid-A0A5DB28-FFC6-4B14-ABC5-EE9310E39B53"> 98 99 <omgdc:Bounds height="40.0" width="40.0" x="615.0" y="180.0" /> 100 101 </bpmndi:BPMNShape> 102 103 <bpmndi:BPMNShape bpmnElement="sid-CA755ED3-B18F-41D0-BBE5-22D41CFCF024" id="BPMNShape_sid-CA755ED3-B18F-41D0-BBE5-22D41CFCF024"> 104 105 <omgdc:Bounds height="80.0" width="100.0" x="690.0" y="150.0" /> 106 107 </bpmndi:BPMNShape> 108 109 <bpmndi:BPMNShape bpmnElement="sid-5EC7D180-D117-4F36-809B-E8940DB9FE91" id="BPMNShape_sid-5EC7D180-D117-4F36-809B-E8940DB9FE91"> 110 111 <omgdc:Bounds height="28.0" width="28.0" x="835.0" y="176.0" /> 112 113 </bpmndi:BPMNShape> 114 115 <bpmndi:BPMNEdge bpmnElement="sid-2C603D09-4CDA-4BF7-8C81-BC543541AF36" id="BPMNEdge_sid-2C603D09-4CDA-4BF7-8C81-BC543541AF36"> 116 117 <omgdi:waypoint x="105.0" y="160.0" /> 118 119 <omgdi:waypoint x="180.0" y="160.0" /> 120 121 </bpmndi:BPMNEdge> 122 123 <bpmndi:BPMNEdge bpmnElement="sid-EEBE283A-BB90-44E1-A6FA-88AA1CE52C39" id="BPMNEdge_sid-EEBE283A-BB90-44E1-A6FA-88AA1CE52C39"> 124 125 <omgdi:waypoint x="377.0" y="160.0" /> 126 127 <omgdi:waypoint x="433.0" y="160.0" /> 128 129 <omgdi:waypoint x="433.0" y="137.0" /> 130 131 </bpmndi:BPMNEdge> 132 133 <bpmndi:BPMNEdge bpmnElement="sid-7BA5A3D9-7BA9-4A3E-AF0A-E0F05A20FCC2" id="BPMNEdge_sid-7BA5A3D9-7BA9-4A3E-AF0A-E0F05A20FCC2"> 134 135 <omgdi:waypoint x="200.5" y="179.5" /> 136 137 <omgdi:waypoint x="200.5" y="265.0" /> 138 139 <omgdi:waypoint x="277.0" y="265.0" /> 140 141 </bpmndi:BPMNEdge> 142 143 <bpmndi:BPMNEdge bpmnElement="sid-C2EBDC51-ABEC-4B69-9924-0101B7EA9E91" id="BPMNEdge_sid-C2EBDC51-ABEC-4B69-9924-0101B7EA9E91"> 144 145 <omgdi:waypoint x="580.0" y="115.0" /> 146 147 <omgdi:waypoint x="635.5" y="115.0" /> 148 149 <omgdi:waypoint x="635.5" y="180.5" /> 150 151 </bpmndi:BPMNEdge> 152 153 <bpmndi:BPMNEdge bpmnElement="sid-BC06774A-44A2-43FA-BDF4-A5E701B3999A" id="BPMNEdge_sid-BC06774A-44A2-43FA-BDF4-A5E701B3999A"> 154 155 <omgdi:waypoint x="200.5" y="140.5" /> 156 157 <omgdi:waypoint x="200.5" y="64.0" /> 158 159 <omgdi:waypoint x="277.0" y="64.0" /> 160 161 </bpmndi:BPMNEdge> 162 163 <bpmndi:BPMNEdge bpmnElement="sid-F7B8E655-8FC5-4205-93D8-64F39881DE28" id="BPMNEdge_sid-F7B8E655-8FC5-4205-93D8-64F39881DE28"> 164 165 <omgdi:waypoint x="377.0" y="64.0" /> 166 167 <omgdi:waypoint x="433.0" y="64.0" /> 168 169 <omgdi:waypoint x="433.0" y="97.0" /> 170 171 </bpmndi:BPMNEdge> 172 173 <bpmndi:BPMNEdge bpmnElement="sid-FD581601-B9AC-4E1E-8161-8EA8A84844B2" id="BPMNEdge_sid-FD581601-B9AC-4E1E-8161-8EA8A84844B2"> 174 175 <omgdi:waypoint x="653.6739130434783" y="198.67391304347825" /> 176 177 <omgdi:waypoint x="690.0" y="195.02392344497608" /> 178 179 </bpmndi:BPMNEdge> 180 181 <bpmndi:BPMNEdge bpmnElement="sid-EDCEFC1E-8C16-406B-9A75-997DF7CFAA03" id="BPMNEdge_sid-EDCEFC1E-8C16-406B-9A75-997DF7CFAA03"> 182 183 <omgdi:waypoint x="452.9949494949495" y="116.9949494949495" /> 184 185 <omgdi:waypoint x="480.0" y="116.29533678756476" /> 186 187 </bpmndi:BPMNEdge> 188 189 <bpmndi:BPMNEdge bpmnElement="sid-85C1D7AE-4568-427E-8E6D-AFC79ED41FD9" id="BPMNEdge_sid-85C1D7AE-4568-427E-8E6D-AFC79ED41FD9"> 190 191 <omgdi:waypoint x="377.0" y="265.0" /> 192 193 <omgdi:waypoint x="635.0" y="265.0" /> 194 195 <omgdi:waypoint x="635.0" y="220.0" /> 196 197 </bpmndi:BPMNEdge> 198 199 <bpmndi:BPMNEdge bpmnElement="sid-78026DEB-C4DA-4BF4-9723-C4EE9124E785" id="BPMNEdge_sid-78026DEB-C4DA-4BF4-9723-C4EE9124E785"> 200 201 <omgdi:waypoint x="790.0" y="190.0" /> 202 203 <omgdi:waypoint x="835.0" y="190.0" /> 204 205 </bpmndi:BPMNEdge> 206 207 <bpmndi:BPMNEdge bpmnElement="sid-035CCFB1-2074-409A-8ADB-13CD37A98A1E" id="BPMNEdge_sid-035CCFB1-2074-409A-8ADB-13CD37A98A1E"> 208 209 <omgdi:waypoint x="219.57539682539684" y="160.42460317460316" /> 210 211 <omgdi:waypoint x="277.0" y="160.19762845849803" /> 212 213 </bpmndi:BPMNEdge> 214 215 </bpmndi:BPMNPlane> 216 217 </bpmndi:BPMNDiagram> 218 219 </definitions>
啟動流程:
圖-3 流程任務例項
圖-4 員工一任務跟蹤圖
圖-5 員工二任務跟蹤圖
圖-6 主管任務跟蹤圖
完成員工一的任務:
圖-7 完成任務一後剩下的例項
這個時候,員工一的任務就完成了。那麼,員工一隻需要等待員工二完成任務,即可啟用部門經理的任務了。
完成員工二任務:
圖-8 部門經理流程跟蹤圖
圖-9 員工二任務完成後例項
繼續完成部門經理的任務:
圖-10 完成部門經理任務後流程例項
這個時候,就剩下主管的任務,即可啟用老闆的任務了。
完成主管的任務:
圖-11 完成主管任務後流程例項
圖-11 完成主管任務後流程跟蹤圖
最終匯合到老闆審批
完成老闆的任務後,整個流程就結束了。
Activiti交流QQ群:634320089