Activiti结束事件(End Event)
Posted Jesai的技术博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activiti结束事件(End Event)相关的知识,希望对你有一定的参考价值。
Activiti结束事件(End Event)
作者:Jesai -2017.08.03T01:03
曾经,黑夜多么漫长,八月雨扰眠,缘何?
声明:版权所有,如需引用请注明出处,如发现抄袭,必追究法律责任
1 前言:
Activiti工作流始于开始任务,止于结束任务。结束事件标志着(子)流程的(分支的)结束。结束事件总是抛出(型)事件。这意味着当流程执行到达结束事件时,会抛出一个结果。结果的类型由事件内部的黑色图标描绘。在XML表示中,类型由子元素声明给出。流程终结又可以分为4种情况:空结束任务、错误结束任务、取消结束任务、终结任务,其中空结束任务是最常见的结束任务。
2 结束任务的类型:
1)空结束任务(none end event)
2)错误结束事件(error end event)
3)取消结束任务(terminate end event)
4)终结任务(Cancel end event)
3 空结束任务(none end event)
空结束任务是最常见的一种结束任务,也是最简单的一种结束任务,只要把结束任务置于流程的最后节点,流程实例运行到该节点的时候,流程引擎就会结束该流程实例。并没有太多复杂的技术。所以不作太多的介绍。空事件的XML表示格式,为普通结束事件声明,没有任何子元素(其它种类的结束事件都有子元素,用于声明其类型)。
3.1 流程实例图标:
图3-1 空结束事件图标
3.2 代码:
1 <endEvent id="end" name="my end event" />
4 错误结束事件(error end event)
错误结束事件会在流程到达错误结束事件的时候抛出错误,并结束当前的流程分支。错误可以使用使用匹配的错误边界中间事件 intermediate boundary error event 捕获。如果找不到匹配的错误边界事件,将会抛出异常。
4.1 流程实例图标:
错误结束事件就是自流程或者流程实例的错误结束事件抛出一个bpmn错误。然后被工作流的错误边界事件获取。
图4-1 错误结束事件图标
错误结束事件,表示为结束事件,加上errorEventDefinition子元素:
1 <endEvent id="myErrorEndEvent"> 2 <errorEventDefinition errorRef="myError" /> 3 </endEvent>
errorRef属性可以引用在流程外定义的error元素:
1 <error id="myError" errorCode="123" /> 2 ... 3 <process id="myProcess"> 4 ...
error的errorCode用于查找匹配的错误捕获边界事件。如果errorRef不匹配任何已定义的error,则该errorRef会用做errorCode的快捷方式。这个快捷方式是Activiti特有的。下面的代码片段在功能上是相同的。
1 <error id="myError" errorCode="error123" /> 2 ... 3 <process id="myProcess"> 4 ... 5 <endEvent id="myErrorEndEvent"> 6 <errorEventDefinition errorRef="myError" /> 7 </endEvent> 8 ...
与下面的功能相同
1 <endEvent id="myErrorEndEvent"> 2 <errorEventDefinition errorRef="error123" /> 3 </endEvent>
请注意errorRef必须遵从BPMN 2.0概要(schema),且必须是合法的QName。
4.2 流程图设计
流程图设计一个子流程,然后子流程里面有一个错误结束事件。外面的错误捕获边界任务就会捕获异常。捕获了异常后,由于是错误边界先去捕获异常,所以捕获错误事件分支会先执行,然后结束。正常结束事件节点所在的分支不会执行。
图4-2 错误结束事件流程设计
4.3 执行结果
图4-3 错误结束事件流程运行结果
4.4 流程代码
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 <subProcess id="sid-2669F680-71E9-4F43-9B2E-AF40435D9C74" name="subProcess"> 8 9 <startEvent id="sid-EB9804C4-9348-43F7-83DE-2E6640E52064" /> 10 11 <endEvent id="sid-507917BF-48BC-4A6E-A2C3-31DF0474F8FE"> 12 13 <errorEventDefinition errorRef="testError" /> 14 15 </endEvent> 16 17 <serviceTask id="sid-65F770DF-6797-4918-9BD6-21DDA3588804" name="子流程手工任务" activiti:class="light.mvc.workflow.serviceTask.SubErrorTestRunningTask" /> 18 19 <sequenceFlow id="sid-7A9F6A19-D24C-4719-8095-F76259D110AE" sourceRef="sid-EB9804C4-9348-43F7-83DE-2E6640E52064" targetRef="sid-65F770DF-6797-4918-9BD6-21DDA3588804" /> 20 21 <sequenceFlow id="sid-6203D605-402C-437D-A9A5-8E276AC8020B" sourceRef="sid-65F770DF-6797-4918-9BD6-21DDA3588804" targetRef="sid-507917BF-48BC-4A6E-A2C3-31DF0474F8FE" /> 22 23 </subProcess> 24 25 <startEvent id="sid-5E970179-3AD6-449F-962B-5CB88F49EE6B" /> 26 27 <sequenceFlow id="sid-BE4D16B9-9F0B-4793-B685-7E0F767F54EB" sourceRef="sid-5E970179-3AD6-449F-962B-5CB88F49EE6B" targetRef="sid-2669F680-71E9-4F43-9B2E-AF40435D9C74" /> 28 29 <endEvent id="sid-F37E4B4D-EBBA-40DD-A354-7549CCA62F7F" /> 30 31 <boundaryEvent id="sid-CE3D7798-F5CE-4C3D-8206-1EFF95BD0288" attachedToRef="sid-2669F680-71E9-4F43-9B2E-AF40435D9C74"> 32 33 <errorEventDefinition errorRef="testError" /> 34 35 </boundaryEvent> 36 37 <endEvent id="sid-EB951594-B88B-4C21-8C16-32A07B09D60A" /> 38 39 <serviceTask id="sid-2935E764-666C-4DB8-B1D0-8221936FE730" name="正常结束事件" activiti:class="light.mvc.workflow.serviceTask.NormalErrorTestRunningTask" /> 40 41 <sequenceFlow id="sid-C2B6D8DC-85C3-45F4-B47E-3839D025226A" sourceRef="sid-2669F680-71E9-4F43-9B2E-AF40435D9C74" targetRef="sid-2935E764-666C-4DB8-B1D0-8221936FE730" /> 42 43 <sequenceFlow id="sid-CE29790B-F67C-46AA-9E12-52B39952747F" sourceRef="sid-2935E764-666C-4DB8-B1D0-8221936FE730" targetRef="sid-F37E4B4D-EBBA-40DD-A354-7549CCA62F7F" /> 44 45 <serviceTask id="sid-7F82A593-A02E-484B-BC65-0AB3D23DE7D1" name="捕获错误事件" activiti:class="light.mvc.workflow.serviceTask.CacheErrorTestRunningTask" /> 46 47 <sequenceFlow id="sid-0CDB3258-E356-4A06-818B-A9C8EED3339A" sourceRef="sid-CE3D7798-F5CE-4C3D-8206-1EFF95BD0288" targetRef="sid-7F82A593-A02E-484B-BC65-0AB3D23DE7D1" /> 48 49 <sequenceFlow id="sid-688D53B8-63D2-43DF-AED6-D8234B4669D1" sourceRef="sid-7F82A593-A02E-484B-BC65-0AB3D23DE7D1" targetRef="sid-EB951594-B88B-4C21-8C16-32A07B09D60A" /> 50 51 </process> 52 53 <bpmndi:BPMNDiagram id="BPMNDiagram_process"> 54 55 <bpmndi:BPMNPlane bpmnElement="process" id="BPMNPlane_process"> 56 57 <bpmndi:BPMNShape bpmnElement="sid-2669F680-71E9-4F43-9B2E-AF40435D9C74" id="BPMNShape_sid-2669F680-71E9-4F43-9B2E-AF40435D9C74"> 58 59 <omgdc:Bounds height="179.0" width="521.0" x="315.0" y="75.5" /> 60 61 </bpmndi:BPMNShape> 62 63 <bpmndi:BPMNShape bpmnElement="sid-EB9804C4-9348-43F7-83DE-2E6640E52064" id="BPMNShape_sid-EB9804C4-9348-43F7-83DE-2E6640E52064"> 64 65 <omgdc:Bounds height="30.0" width="30.0" x="375.0" y="150.0" /> 66 67 </bpmndi:BPMNShape> 68 69 <bpmndi:BPMNShape bpmnElement="sid-507917BF-48BC-4A6E-A2C3-31DF0474F8FE" id="BPMNShape_sid-507917BF-48BC-4A6E-A2C3-31DF0474F8FE"> 70 71 <omgdc:Bounds height="28.0" width="28.0" x="720.0" y="151.0" /> 72 73 </bpmndi:BPMNShape> 74 75 <bpmndi:BPMNShape bpmnElement="sid-65F770DF-6797-4918-9BD6-21DDA3588804" id="BPMNShape_sid-65F770DF-6797-4918-9BD6-21DDA3588804"> 76 77 <omgdc:Bounds height="80.0" width="100.0" x="543.75" y="123.0" /> 78 79 </bpmndi:BPMNShape> 80 81 <bpmndi:BPMNShape bpmnElement="sid-5E970179-3AD6-449F-962B-5CB88F49EE6B" id="BPMNShape_sid-5E970179-3AD6-449F-962B-5CB88F49EE6B"> 82 83 <omgdc:Bounds height="30.0" width="30.0" x="154.75" y="150.0" /> 84 85 </bpmndi:BPMNShape> 86 87 <bpmndi:BPMNShape bpmnElement="sid-F37E4B4D-EBBA-40DD-A354-7549CCA62F7F" id="BPMNShape_sid-F37E4B4D-EBBA-40DD-A354-7549CCA62F7F"> 88 89 <omgdc:Bounds height="28.0" width="28.0" x="1024.75" y="144.0" /> 90 91 </bpmndi:BPMNShape> 92 93 <bpmndi:BPMNShape bpmnElement="sid-CE3D7798-F5CE-4C3D-8206-1EFF95BD0288" id="BPMNShape_sid-CE3D7798-F5CE-4C3D-8206-1EFF95BD0288"> 94 95 <omgdc:Bounds height="30.0" width="30.0" x="600.4320995601703" y="239.7819754816901" /> 96 97 </bpmndi:BPMNShape> 98 99 <bpmndi:BPMNShape bpmnElement="sid-EB951594-B88B-4C21-8C16-32A07B09D60A" id="BPMNShape_sid-EB951594-B88B-4C21-8C16-32A07B09D60A"> 100 101 <omgdc:Bounds height="28.0" width="28.0" x="851.75" y="327.0" /> 102 103 </bpmndi:BPMNShape> 104 105 <bpmndi:BPMNShape bpmnElement="sid-2935E764-666C-4DB8-B1D0-8221936FE730" id="BPMNShape_sid-2935E764-666C-4DB8-B1D0-8221936FE730"> 106 107 <omgdc:Bounds height="80.0" width="100.0" x="870.0" y="118.0" /> 108 109 </bpmndi:BPMNShape> 110 111 <bpmndi:BPMNShape bpmnElement="sid-7F82A593-A02E-484B-BC65-0AB3D23DE7D1" id="BPMNShape_sid-7F82A593-A02E-484B-BC65-0AB3D23DE7D1"> 112 113 <omgdc:Bounds height="80.0" width="100.0" x="707.75" y="306.25" /> 114 115 </bpmndi:BPMNShape> 116 117 <bpmndi:BPMNEdge bpmnElement="sid-CE29790B-F67C-46AA-9E12-52B39952747F" id="BPMNEdge_sid-CE29790B-F67C-46AA-9E12-52B39952747F"> 118 119 <omgdi:waypoint x="970.0" y="158.0" /> 120 121 <omgdi:waypoint x="1024.75" y="158.0" /> 122 123 </bpmndi:BPMNEdge> 124 125 <bpmndi:BPMNEdge bpmnElement="sid-688D53B8-63D2-43DF-AED6-D8234B4669D1" id="BPMNEdge_sid-688D53B8-63D2-43DF-AED6-D8234B4669D1"> 126 127 <omgdi:waypoint x="807.75" y="341.0" /> 128 129 <omgdi:waypoint x="851.75" y="341.0" /> 130 131 </bpmndi:BPMNEdge> 132 133 <bpmndi:BPMNEdge bpmnElement="sid-6203D605-402C-437D-A9A5-8E276AC8020B" id="BPMNEdge_sid-6203D605-402C-437D-A9A5-8E276AC8020B"> 134 135 <omgdi:waypoint x="643.75" y="165.0" /> 136 137 <omgdi:waypoint x="720.0" y="165.0" /> 138 139 </bpmndi:BPMNEdge> 140 141 <bpmndi:BPMNEdge bpmnElement="sid-7A9F6A19-D24C-4719-8095-F76259D110AE" id="BPMNEdge_sid-7A9F6A19-D24C-4719-8095-F76259D110AE"> 142 143 <omgdi:waypoint x="404.99927740552414" y="164.85276782914823" /> 144 145 <omgdi:waypoint x="543.75" y="163.4907975460123" /> 146 147 </bpmndi:BPMNEdge> 148 149 <bpmndi:BPMNEdge bpmnElement="sid-C2B6D8DC-85C3-45F4-B47E-3839D025226A" id="BPMNEdge_sid-C2B6D8DC-85C3-45F4-B47E-3839D025226A"> 150 151 <omgdi:waypoint x="836.0" y="159.7068214804064" /> 152 153 <omgdi:waypoint x="870.0" y="159.01596516690856" /> 154 155 </bpmndi:BPMNEdge> 156 157 <bpmndi:BPMNEdge bpmnElement="sid-BE4D16B9-9F0B-4793-B685-7E0F767F54EB" id="BPMNEdge_sid-BE4D16B9-9F0B-4793-B685-7E0F767F54EB"> 158 159 <omgdi:waypoint x="184.75" y="165.0" /> 160 161 <omgdi:waypoint x="315.0" y="165.0" /> 162 163 </bpmndi:BPMNEdge> 164 165 <bpmndi:BPMNEdge bpmnElement="sid-0CDB3258-E356-4A06-818B-A9C8EED3339A" id="BPMNEdge_sid-0CDB3258-E356-4A06-818B-A9C8EED3339A"> 166 167 <omgdi:waypoint x="615.4320995601703" y="269.7819754816901" /> 168 169 <omgdi:waypoint x="615.4320995601703" y="341.0" /> 170 171 <omgdi:waypoint x="707.75" y="341.0" /> 172 173 </bpmndi:BPMNEdge> 174 175 </bpmndi:BPMNPlane> 176 177 </bpmndi:BPMNDiagram> 178 179 </definitions>
4.5 java监听类代码
4.5.1 子流程监听器:
1 /** 2 3 * 4 5 */ 6 7 package light.mvc.workflow.serviceTask; 8 9 10 11 import org.activiti.engine.delegate.DelegateExecution; 12 13 import org.activiti.engine.delegate.JavaDelegate; 14 15 16 17 /** 18 19 * 20 21 * 项目名称:lightmvc 22 23 * 类名称:ServiceTask 24 25 * 类描述: 26 27 * 创建人:邓家海 28 29 * 创建时间:2017年6月4日 下午6:18:11 30 31 * 修改人:deng 32 33 * 修改时间:2017年6月4日 下午6:18:11 34 35 * 修改备注: 36 37 * @version 38 39 * 40 41 */ 42 43 44 45 public class SubErrorTestRunningTask implements JavaDelegate{ 46 47 //重写委托的提交方法 48 49 @Override 50 51 public void execute(DelegateExecution execution) throws Exception { 52 53 //receiveTaskprocess 54 55 System.out.println("SubErrorTestRunningTask is running!"); 56 57 } 58 59 }
4.5.2 捕获事件监听器
1 /** 2 3 * 4 5 */ 6 7 package light.mvc.workflow.serviceTask; 8 9 10 11 import org.activiti.engine.delegate.DelegateExecution; 12 13 import org.activiti.engine.delegate.JavaDelegate; 14 15 16 17 /** 18 19 * 20 21 * 项目名称:lightmvc 22 23 * 类名称:ServiceTask 24 25 * 类描述: 26 27 * 创建人:邓家海 28 29 * 创建时间:2017年6月4日 下午6:18:11 30 31 * 修改人:deng 32 33 * 修改时间:2017年6月4日 下午6:18:11 34 35 * 修改备注: 36 37 * 全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<监听器篇>Liferay7 BPM门户开发之4: Activiti事件处理和监听Event handlers