Activiti 啟動事件(Start Event)


Activiti 啟動事件(Start Event

作者:Jesai

生活里,沒有容易二字,憂傷是一種本能,而微笑是一種能力

版權所有,未經允許,禁止引用。如需引用,請注明出處。

 

前言:

啟動事件是Activiti活動的開始節點。現在有很多國產的工作流是省略了開始和結束這兩個節點的。但是BPMBN 2.0標准是必須要有開始和結束節點的。啟動事件表示流程的開始。 定義了流程如何被啟動的啟動事件類型(當收到消息、特定的時是以一個小圖標來形象表示事件的。在 XML 表示中,類型是由子元素的聲明給出的。啟動事件總是捕獲型的:從概念上講,該事件(任何時候) 會一直等待直到觸發發生。

 

啟動事件(Start Event)的類型:

(1)空啟動事件(None Satrt Event

(2)定時啟動事件(Timer Satrt Event

(3)信號事件(Signal Start Event)

(4)消息事件(Message Start Event)

(5)異常事件(Error Start Event)

 

(1)空啟動事件(None Satrt Event

圖標:

 

 

1-1 空啟動事件圖標

 

空啟動事件就是一個圓圈。在工作流里面使用的非常多。但是空啟動事件必須要人工去啟動一個流程。空啟動事件是建立在部署完成的流程上面的。每啟動一次,就會產生一個新的流程實例。

 

代碼:

 

1 <startEventid="start"name="my start event"/> 

 

 

這個啟動事件非常的簡單。就無需多說。

(2)定時啟動事件(Timer Satrt Event

圖標:

2-1 定時啟動事件圖標

 

定時啟動事件是一個時鍾圖標,注意的是,這個時鍾圖標是比較少圓圈的,要跟定時邊界事件區分清楚。

定時器啟動事件用於在給定的時間點創建流程實例。它可以用在只啟動一次的流程中,也可以用在特定時間間隔下啟動。如果是有重復執行的,流程在周期內都有效,可以重復利用。
的流程。


注意:

子流程中不能使用定時器啟動事件。 定時器是從流程部署開始計時,不需要去啟動流程。

 

代碼:

timeDate:指定ISO 8601格式的日期定時器激活。

1 <timerEventDefinition>
2 
3     <timeDate>2016-08-23T18:13:00</timeDate></timerEventDefinition>

 

timeDuration定義定時器經過多少時間后激活。時間段也是取得ISO 8601格式,比如在一年三個月五天六小時七分三十秒內,可以寫成P1Y3M5DT6H7M30S

1 <timerEventDefinition>
2 
3     <timeDuration>P10D</timeDuration></timerEventDefinition>

 

 

timeCycle定義定時器重復間隔,在某些場景使用,比如周期性的啟動流程,任務超時發送提醒。timeCycle的設置目前有兩種方式:ISO 8601Cron表達式(quartz任務調度框架提供的解決方案)activiti默認是使用ISO 8601。例如現在重復三次,每次間隔10小時:

1  <timerEventDefinition>2     <timeCycle activiti:endDate="2016-08-22T16:42:11+00:00">R3/PT10H</timeCycle>3 </timerEventDefinition>
2 
3 <timerEventDefinition>
4 
5     <timeCycle>R3/PT10H/${EndDate}</timeCycle>
6 
7 </timerEventDefinition>

 

其中endDate是可選的配置,上面使用了兩張方式加上了endDate, 定時器將會在指定的時間停止工作。

此外如果你使用Cron 表達式,可以這樣寫:

0 0/5 * * * ?

注意: 

第一個數字表示秒,而不是像通常Unix cron中那樣表示分鍾。重復的時間周期能更好的處理相對時間,它可以計算一些特定的時間點 (比如用戶任務的開始時間),而cron表達式可以處理絕對時間, 這對定時啟動事件特別有用。

你可以使用表達式進行配置,在里面動態設置值,不過該值需要為ISO 8601或者(cron表達式)格式

 

1 <boundaryEvent id="escalationTimer" cancelActivity="true" attachedToRef="firstLineSupport">
2 
3   <timerEventDefinition>
4 
5     <timeDuration>${duration}</timeDuration>
6 
7   </timerEventDefinition></boundaryEvent>

 

 示例:從 2011 3 11 12:13 開始,流程將啟動 4 次,每次間隔 5 分鍾。

1 <startEventid="theStart">
2 <timerEventDefinition>
3 <timeCycle>R4/2017-06-11T12:13/PT5M</timeCycle>
4 </timerEventDefinition>
5 </startEvent> 

 

示例: 流程將在選定的時間上啟動一次

1 <startEventid="theStart">
2 <timerEventDefinition>
3 <timeDate>2017-06-11T12:13:14</timeDate>
4 </timerEventDefinition>
5 </startEvent> 

 

 實驗:

我們設計一個簡單的流程,一個定時啟動事件,一個手動任務來監控定時啟動任務是否已經啟動。

 

流程設計:

 

2-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-B51BA61F-F3FA-489E-8E50-87AEED50C3B3">
 8 
 9       <timerEventDefinition>
10 
11         <timeCycle>R4/2017-06-27T20:45/PT1M</timeCycle>
12 
13       </timerEventDefinition>
14 
15     </startEvent>
16 
17     <manualTask id="sid-15215C7C-14D0-4460-9BB1-4DE865EA03A7" name="手工任務">
18 
19       <extensionElements>
20 
21         <activiti:executionListener event="start" class="light.mvc.workflow.serviceTask.TimerTestRunningTask" />
22 
23       </extensionElements>
24 
25     </manualTask>
26 
27     <endEvent id="sid-11AC64F4-17C1-489A-9BED-0FCCDBAF5602" />
28 
29     <sequenceFlow id="sid-15E29826-5274-4586-A743-A728B87EBB00" sourceRef="sid-15215C7C-14D0-4460-9BB1-4DE865EA03A7" targetRef="sid-11AC64F4-17C1-489A-9BED-0FCCDBAF5602" />
30 
31     <sequenceFlow id="sid-228F25A5-209F-4239-852E-F0B734F115A4" sourceRef="sid-B51BA61F-F3FA-489E-8E50-87AEED50C3B3" targetRef="sid-15215C7C-14D0-4460-9BB1-4DE865EA03A7" />
32 
33   </process>
34 
35   <bpmndi:BPMNDiagram id="BPMNDiagram_process">
36 
37     <bpmndi:BPMNPlane bpmnElement="process" id="BPMNPlane_process">
38 
39       <bpmndi:BPMNShape bpmnElement="sid-B51BA61F-F3FA-489E-8E50-87AEED50C3B3" id="BPMNShape_sid-B51BA61F-F3FA-489E-8E50-87AEED50C3B3">
40 
41         <omgdc:Bounds height="31.0" width="31.0" x="161.25" y="91.5" />
42 
43       </bpmndi:BPMNShape>
44 
45       <bpmndi:BPMNShape bpmnElement="sid-15215C7C-14D0-4460-9BB1-4DE865EA03A7" id="BPMNShape_sid-15215C7C-14D0-4460-9BB1-4DE865EA03A7">
46 
47         <omgdc:Bounds height="80.0" width="100.0" x="313.75" y="67.0" />
48 
49       </bpmndi:BPMNShape>
50 
51       <bpmndi:BPMNShape bpmnElement="sid-11AC64F4-17C1-489A-9BED-0FCCDBAF5602" id="BPMNShape_sid-11AC64F4-17C1-489A-9BED-0FCCDBAF5602">
52 
53         <omgdc:Bounds height="28.0" width="28.0" x="458.75" y="93.0" />
54 
55       </bpmndi:BPMNShape>
56 
57       <bpmndi:BPMNEdge bpmnElement="sid-228F25A5-209F-4239-852E-F0B734F115A4" id="BPMNEdge_sid-228F25A5-209F-4239-852E-F0B734F115A4">
58 
59         <omgdi:waypoint x="193.24994249971698" y="107.457104711797" />
60 
61         <omgdi:waypoint x="313.75" y="107.13404825737265" />
62 
63       </bpmndi:BPMNEdge>
64 
65       <bpmndi:BPMNEdge bpmnElement="sid-15E29826-5274-4586-A743-A728B87EBB00" id="BPMNEdge_sid-15E29826-5274-4586-A743-A728B87EBB00">
66 
67         <omgdi:waypoint x="413.75" y="107.0" />
68 
69         <omgdi:waypoint x="458.75" y="107.0" />
70 
71       </bpmndi:BPMNEdge>
72 
73     </bpmndi:BPMNPlane>
74 
75   </bpmndi:BPMNDiagram>
76 
77 </definitions>

 

 

 

手動任務監聽器代碼:

 

 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 TimerTestRunningTask implements JavaDelegate{
46 
47  
48 
49 //重寫委托的提交方法
50 
51 @Override
52 
53 public void execute(DelegateExecution execution) throws Exception {
54 
55 //receiveTaskprocess
56 
57 System.out.println("TimerTestRunningTask is running!");
58 
59 }
60 
61  
62 
63 }

 

 

 

 

部署流程,無需啟動。

運行結果:

 

2-3定時啟動事件運行結果

 

 

注意的是,當定時啟動任務已經超過運行時間,再次去部署流程里面啟動這個任務,就會把它當成一個普通的空啟動事件來處理。部署新的流程,上一版本的流程就會被移除。

 

(3)信號事件(Signal Start Event)

信號啟動事件,使用具名信號啟動流程實例。這個信號可以由流程實例中的信號拋出中間事件(intermediary signal throw event),或
APIruntimeService.signalEventReceivedXXX方法)觸發。這些情況下,所有擁有相同名字信號啟動事件的流程定義都會被啟動。
請注意這些情況下,都可以選擇異步還是同步啟動流程實例。
需要為API傳遞的 signalName ,是由 signal 元素的 name 屬性決定的名字。 signal 元素被 signalEventDefinition signalRef
屬性所引用。

 

圖標:

3-1 信號啟動事件圖標

信號事件流程圖設計:

 

  3-2 信號啟動流程設計

 

信號事件的啟動:

 

 1 List<Execution> executions =  execution.getEngineServices().getRuntimeService().createExecutionQuery()
 2 
 3        .signalEventSubscriptionName("singal")
 4 
 5        .list();
 6 
 7 for(Execution e:executions){
 8 
 9 execution.getEngineServices().getRuntimeService().signalEventReceived("singal", e.getId());
10 
11 }

 

 

 

信號事件XML代碼:

 

 1 <signal id="theSignal" name="The Signal" />
 2 <process id="processWithSignalStart1">
 3 <startEvent id="theStart">
 4 <signalEventDefinition id="theSignalEventDefinition" signalRef="theSignal" />
 5 </startEvent>
 6 <sequenceFlow id="flow1" sourceRef="theStart" targetRef="theTask" />
 7 <userTask id="theTask" name="Task in process A" />
 8 <sequenceFlow id="flow2" sourceRef="theTask" targetRef="theEnd" />
 9 <endEvent id="theEnd" />
10 </process> 

 

 

說明:

 

信號啟動事件的兩種啟動方式:

 

1、信號可以是流程實例中拋出的信號事件

2、API觸發

 

信號事件的執行方式:

1、異步執行

2、同步執行

 

 

 

注意:信號啟動事件,是所有相同名稱的信號事件都會被執行!

 

 

(4)消息事件(Message Start Event

啟動方式:

1、流程實例中的信號拋出事件

2、API觸發(runtimeService.signalEventReceivedXXX方法)觸發 

 

注意事項:

1)流程的消息名稱必須是唯一的,一個流程定義不得包含多個同名的啟動消息。否則部署流程的時候就會拋異常。

2)消息啟動事件,在所有部署的流程里面必須要唯一,否則也會拋異常。

3)直接啟動消息定義事件,會當作一個普通啟動事件執行。

4)新版本發布,會取消上一版本的消息訂閱。

5)啟動流程實例的三種方法

1 ProcessInstance startProcessInstanceByMessage(String messageName);
2 ProcessInstance startProcessInstanceByMessage(String messageName, Map<String, Object> processVariables);
3 ProcessInstance startProcessInstanceByMessage(String messageName, String businessKey, Map<String, Object<
4 processVariables); 

 

 

注:messageName 是由 message 元素的 name 屬性決定的名字。 message 元素被 messageEventDefinition messageRef 屬性引用 

6)只有頂層流程(toplevel process)才支持消息啟動事件 ,嵌入流程(子流程)不支持消息事件。

7)如果一個流程定義多個消息事件無法使用runtimeService.startProcessInstanceByKey()
runtimeService.startProcessInstanceById() 啟動消息事件,但是一個流程定義單個消息事件可以啟動。如果同一個流程定義同時具有多個消息事件和空啟動事件,就會啟動空啟動事件,同一個流程定義多個消息事件的時候,使用這個方法啟動,就會拋異常。

 

圖標:

  4-1 消息啟動事件圖標

流程圖設計:

  4-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   <message id="message" name="messages" />
 6 
 7   <process id="process" isExecutable="true">
 8 
 9     <startEvent id="startEven" name="MessageTask">
10 
11       <messageEventDefinition messageRef="message" />
12 
13     </startEvent>
14 
15     <manualTask id="sid-CB1E9115-3038-4E4D-901B-3FFE85996ADB" name="手動任務">
16 
17       <extensionElements>
18 
19         <activiti:executionListener event="start" class="light.mvc.workflow.serviceTask.MessageTestRunningTask" />
20 
21       </extensionElements>
22 
23     </manualTask>
24 
25     <endEvent id="sid-EB3FFCA5-960F-4BD1-A765-67AEAD90B862" />
26 
27     <sequenceFlow id="sid-3A543EA6-7A84-4CA1-80AE-0F9C40F7F208" sourceRef="sid-CB1E9115-3038-4E4D-901B-3FFE85996ADB" targetRef="sid-EB3FFCA5-960F-4BD1-A765-67AEAD90B862" />
28 
29     <sequenceFlow id="sid-1169B143-B2B1-4460-A357-50EA0D53CA6A" sourceRef="startEven" targetRef="sid-CB1E9115-3038-4E4D-901B-3FFE85996ADB" />
30 
31   </process>
32 
33   <bpmndi:BPMNDiagram id="BPMNDiagram_process">
34 
35     <bpmndi:BPMNPlane bpmnElement="process" id="BPMNPlane_process">
36 
37       <bpmndi:BPMNShape bpmnElement="startEven" id="BPMNShape_startEven">
38 
39         <omgdc:Bounds height="30.0" width="30.5" x="237.5" y="116.0" />
40 
41       </bpmndi:BPMNShape>
42 
43       <bpmndi:BPMNShape bpmnElement="sid-CB1E9115-3038-4E4D-901B-3FFE85996ADB" id="BPMNShape_sid-CB1E9115-3038-4E4D-901B-3FFE85996ADB">
44 
45         <omgdc:Bounds height="80.0" width="100.0" x="344.75" y="88.0" />
46 
47       </bpmndi:BPMNShape>
48 
49       <bpmndi:BPMNShape bpmnElement="sid-EB3FFCA5-960F-4BD1-A765-67AEAD90B862" id="BPMNShape_sid-EB3FFCA5-960F-4BD1-A765-67AEAD90B862">
50 
51         <omgdc:Bounds height="28.0" width="28.0" x="540.0" y="114.0" />
52 
53       </bpmndi:BPMNShape>
54 
55       <bpmndi:BPMNEdge bpmnElement="sid-3A543EA6-7A84-4CA1-80AE-0F9C40F7F208" id="BPMNEdge_sid-3A543EA6-7A84-4CA1-80AE-0F9C40F7F208">
56 
57         <omgdi:waypoint x="444.75" y="128.0" />
58 
59         <omgdi:waypoint x="540.0" y="128.0" />
60 
61       </bpmndi:BPMNEdge>
62 
63       <bpmndi:BPMNEdge bpmnElement="sid-1169B143-B2B1-4460-A357-50EA0D53CA6A" id="BPMNEdge_sid-1169B143-B2B1-4460-A357-50EA0D53CA6A">
64 
65         <omgdi:waypoint x="268.4965298183317" y="130.67203111495593" />
66 
67         <omgdi:waypoint x="344.75" y="129.05820105820106" />
68 
69       </bpmndi:BPMNEdge>
70 
71     </bpmndi:BPMNPlane>
72 
73   </bpmndi:BPMNDiagram>
74 
75 </definitions>

 

 

我們測試的時候借助一個手工任務觸發消息事件的流程。

 

手工任務流程設計:

4-3 手工任務事件流程設計

 

 

手工任務流程代碼:

 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-8D52A572-DD68-4640-BCEE-AA46FD19F535" />
 8 
 9     <manualTask id="sid-B57FA289-A98B-45B8-8550-211ED155778E" name="手工任務">
10 
11       <extensionElements>
12 
13         <activiti:executionListener event="start" class="light.mvc.workflow.serviceTask.ServiceTask" />
14 
15       </extensionElements>
16 
17     </manualTask>
18 
19     <endEvent id="sid-DF898F06-5F35-4C64-B84D-6A405ADECA91" />
20 
21     <sequenceFlow id="sid-BD48A7F5-D206-4E76-AB78-0437FBDC5834" sourceRef="sid-B57FA289-A98B-45B8-8550-211ED155778E" targetRef="sid-DF898F06-5F35-4C64-B84D-6A405ADECA91" />
22 
23     <sequenceFlow id="sid-6F9CC662-16AB-4058-BA4A-2A0D3D99C185" sourceRef="sid-8D52A572-DD68-4640-BCEE-AA46FD19F535" targetRef="sid-B57FA289-A98B-45B8-8550-211ED155778E" />
24 
25   </process>
26 
27   <bpmndi:BPMNDiagram id="BPMNDiagram_process">
28 
29     <bpmndi:BPMNPlane bpmnElement="process" id="BPMNPlane_process">
30 
31       <bpmndi:BPMNShape bpmnElement="sid-8D52A572-DD68-4640-BCEE-AA46FD19F535" id="BPMNShape_sid-8D52A572-DD68-4640-BCEE-AA46FD19F535">
32 
33         <omgdc:Bounds height="30.0" width="30.0" x="233.75" y="102.0" />
34 
35       </bpmndi:BPMNShape>
36 
37       <bpmndi:BPMNShape bpmnElement="sid-B57FA289-A98B-45B8-8550-211ED155778E" id="BPMNShape_sid-B57FA289-A98B-45B8-8550-211ED155778E">
38 
39         <omgdc:Bounds height="80.0" width="100.0" x="375.0" y="77.0" />
40 
41       </bpmndi:BPMNShape>
42 
43       <bpmndi:BPMNShape bpmnElement="sid-DF898F06-5F35-4C64-B84D-6A405ADECA91" id="BPMNShape_sid-DF898F06-5F35-4C64-B84D-6A405ADECA91">
44 
45         <omgdc:Bounds height="28.0" width="28.0" x="630.0" y="103.0" />
46 
47       </bpmndi:BPMNShape>
48 
49       <bpmndi:BPMNEdge bpmnElement="sid-BD48A7F5-D206-4E76-AB78-0437FBDC5834" id="BPMNEdge_sid-BD48A7F5-D206-4E76-AB78-0437FBDC5834">
50 
51         <omgdi:waypoint x="475.0" y="117.0" />
52 
53         <omgdi:waypoint x="630.0" y="117.0" />
54 
55       </bpmndi:BPMNEdge>
56 
57       <bpmndi:BPMNEdge bpmnElement="sid-6F9CC662-16AB-4058-BA4A-2A0D3D99C185" id="BPMNEdge_sid-6F9CC662-16AB-4058-BA4A-2A0D3D99C185">
58 
59         <omgdi:waypoint x="263.75" y="117.0" />
60 
61         <omgdi:waypoint x="375.0" y="117.0" />
62 
63       </bpmndi:BPMNEdge>
64 
65     </bpmndi:BPMNPlane>
66 
67   </bpmndi:BPMNDiagram>
68 
69 </definitions>

 

 

 

手工任務監聽類:

 

 1 /**
 2 
 3  *
 4 
 5  */
 6 
 7 package light.mvc.workflow.serviceTask;
 8 
 9  
10 
11 import java.util.List;
12 
13  
14 
15 import org.activiti.engine.delegate.DelegateExecution;
16 
17 import org.activiti.engine.delegate.JavaDelegate;
18 
19 import org.activiti.engine.runtime.Execution;
20 
21  
22 
23 /**  
24 
25  *   
26 
27  * 項目名稱:lightmvc  
28 
29  * 類名稱:ServiceTask  
30 
31  * 類描述:  
32 
33  * 創建人:鄧家海  
34 
35  * 創建時間:2017年6月4日 下午6:18:11  
36 
37  * 修改人:deng  
38 
39  * 修改時間:2017年6月4日 下午6:18:11  
40 
41  * 修改備注:  
42 
43  * @version   
44 
45  *   
46 
47  */
48 
49  
50 
51 public class TestRunningTask implements JavaDelegate{
52 
53  
54 
55 //重寫委托的提交方法
56 
57 @Override
58 
59 public void execute(DelegateExecution execution) throws Exception { execution.getEngineServices().getRuntimeService().startProcessInstanceByMessage("message");
60 
61 System.out.println("TestRunningTask is running!");
62 
63 }
64 
65  
66 
67 }

 

 

消息事件執行測試代碼(監聽類):

 

 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 MessageTestRunningTask implements JavaDelegate{
46 
47  
48 
49 //重寫委托的提交方法
50 
51 @Override
52 
53 public void execute(DelegateExecution execution) throws Exception {
54 
55 //receiveTaskprocess
56 
57 System.out.println("MessageTestRunningTask is running!");
58 
59 }
60 
61  
62 
63 }

 

 

運行結果:

 

4-4 消息事件執行結果

 

 

 

(5)異常事件(錯誤啟動事件 Error Start Event

 

BPMN2.0規定了錯誤開始事件只能使用在事件子流程(Event Sub-Process)中,該該事件不能使用在其他流程中,包括最高級流程(Top-Level Process)、嵌套子流程(Sub-Process)和調用子流程(Call Activity)。BPMN錯誤與Java異常不是一回事。事實上,這兩者毫無共同點。BPMN錯誤事件是建模業務異常(business exceptions)的方式。

 

錯誤消息開始事件圖標:

 

  5-1 異常事件圖標

 

 

錯誤事件定義 Error Event Definitions

errorerrorCode用於查找匹配的錯誤捕獲邊界事件。如果errorRef不匹配任何已定義的error,則該errorRef會用做errorCode的快捷方式。


請注意errorRef必須遵從BPMN 2.0概要(schema),且必須是合法的QName

下面這兩段代碼是一樣的
1)

1 <error id="myError" errorCode="error123" />
2 ...
3 <process id="myProcess">
4 ...
5 <endEvent id="myErrorEndEvent">
6 <errorEventDefinition errorRef="myError" />
7 </endEvent>

 

2

1 <endEvent id="myErrorEndEvent">
2 <errorEventDefinition errorRef="error123" />
3 </endEvent> 

 

 

錯誤啟動事件流程圖設計:

 

 

5-2 異常事件流程設計

 

 

說明:

我們一共設計兩個流程,一個是子流程事件,一個是主流程。當這個流程啟動,便會啟動主流程。主流程的Servertask便會拋出一個BpmnError的流程錯誤。這個流程錯誤會被Activiti引擎攔截到,然戶觸發子流程事件里面的錯誤啟動事件。從而觸發SubServertask這個Server任務。

 

圖解:

 

5-3 異常事件圖解

 

 

 

 

流程圖XML定義:

 

  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="test2" name="test" isExecutable="true">
  6 
  7     <subProcess id="sid-79BC7EB5-33E8-45BF-9572-2B74EAEECA04" name="subProcess" triggeredByEvent="true">
  8 
  9       <startEvent id="errorId" name="error">
 10 
 11         <errorEventDefinition errorRef="MyErrorCode" />
 12 
 13       </startEvent>
 14 
 15       <serviceTask id="Sub" name="SubServer task" activiti:class="light.mvc.workflow.serviceTask.ErrorTestRunningTask" />
 16 
 17       <endEvent id="sid-7511716A-8CE6-4BA6-94B4-77F5C6976148" />
 18 
 19       <sequenceFlow id="sid-C0C5E2A2-2859-4A00-A14D-B74D12C4F992" sourceRef="Sub" targetRef="sid-7511716A-8CE6-4BA6-94B4-77F5C6976148" />
 20 
 21       <sequenceFlow id="sid-B6D21933-0380-4829-BF96-1D4206F33507" sourceRef="errorId" targetRef="Sub" />
 22 
 23     </subProcess>
 24 
 25     <startEvent id="sid-7DB721F7-4F4D-4C4B-AC8F-C9ED7EF64D76" />
 26 
 27     <serviceTask id="pro" name="Servertask" activiti:class="light.mvc.workflow.serviceTask.TestRunningTask" />
 28 
 29     <endEvent id="sid-C3FC8A02-7A8A-4E38-AC2A-31444F3167FF" />
 30 
 31     <sequenceFlow id="sid-3544F586-2757-45DB-9D17-2AB72EBB1535" sourceRef="pro" targetRef="sid-C3FC8A02-7A8A-4E38-AC2A-31444F3167FF" />
 32 
 33     <sequenceFlow id="sid-D638FB68-7AB5-48D1-9B0D-4C74B1351B6D" sourceRef="sid-7DB721F7-4F4D-4C4B-AC8F-C9ED7EF64D76" targetRef="pro" />
 34 
 35   </process>
 36 
 37   <bpmndi:BPMNDiagram id="BPMNDiagram_test2">
 38 
 39     <bpmndi:BPMNPlane bpmnElement="test2" id="BPMNPlane_test2">
 40 
 41       <bpmndi:BPMNShape bpmnElement="sid-79BC7EB5-33E8-45BF-9572-2B74EAEECA04" id="BPMNShape_sid-79BC7EB5-33E8-45BF-9572-2B74EAEECA04">
 42 
 43         <omgdc:Bounds height="128.0" width="434.0" x="165.0" y="30.0" />
 44 
 45       </bpmndi:BPMNShape>
 46 
 47       <bpmndi:BPMNShape bpmnElement="errorId" id="BPMNShape_errorId">
 48 
 49         <omgdc:Bounds height="30.0" width="30.0" x="228.75" y="68.0" />
 50 
 51       </bpmndi:BPMNShape>
 52 
 53       <bpmndi:BPMNShape bpmnElement="Sub" id="BPMNShape_Sub">
 54 
 55         <omgdc:Bounds height="80.0" width="100.0" x="332.0" y="44.0" />
 56 
 57       </bpmndi:BPMNShape>
 58 
 59       <bpmndi:BPMNShape bpmnElement="sid-7511716A-8CE6-4BA6-94B4-77F5C6976148" id="BPMNShape_sid-7511716A-8CE6-4BA6-94B4-77F5C6976148">
 60 
 61         <omgdc:Bounds height="28.0" width="28.0" x="461.75" y="70.0" />
 62 
 63       </bpmndi:BPMNShape>
 64 
 65       <bpmndi:BPMNShape bpmnElement="sid-7DB721F7-4F4D-4C4B-AC8F-C9ED7EF64D76" id="BPMNShape_sid-7DB721F7-4F4D-4C4B-AC8F-C9ED7EF64D76">
 66 
 67         <omgdc:Bounds height="30.0" width="30.0" x="231.75" y="196.0" />
 68 
 69       </bpmndi:BPMNShape>
 70 
 71       <bpmndi:BPMNShape bpmnElement="pro" id="BPMNShape_pro">
 72 
 73         <omgdc:Bounds height="80.0" width="100.0" x="316.75" y="172.0" />
 74 
 75       </bpmndi:BPMNShape>
 76 
 77       <bpmndi:BPMNShape bpmnElement="sid-C3FC8A02-7A8A-4E38-AC2A-31444F3167FF" id="BPMNShape_sid-C3FC8A02-7A8A-4E38-AC2A-31444F3167FF">
 78 
 79         <omgdc:Bounds height="28.0" width="28.0" x="461.75" y="198.0" />
 80 
 81       </bpmndi:BPMNShape>
 82 
 83       <bpmndi:BPMNEdge bpmnElement="sid-C0C5E2A2-2859-4A00-A14D-B74D12C4F992" id="BPMNEdge_sid-C0C5E2A2-2859-4A00-A14D-B74D12C4F992">
 84 
 85         <omgdi:waypoint x="432.0" y="84.0" />
 86 
 87         <omgdi:waypoint x="461.75" y="84.0" />
 88 
 89       </bpmndi:BPMNEdge>
 90 
 91       <bpmndi:BPMNEdge bpmnElement="sid-B6D21933-0380-4829-BF96-1D4206F33507" id="BPMNEdge_sid-B6D21933-0380-4829-BF96-1D4206F33507">
 92 
 93         <omgdi:waypoint x="258.749607613604" y="83.10849625760292" />
 94 
 95         <omgdi:waypoint x="332.0" y="83.63833634719711" />
 96 
 97       </bpmndi:BPMNEdge>
 98 
 99       <bpmndi:BPMNEdge bpmnElement="sid-3544F586-2757-45DB-9D17-2AB72EBB1535" id="BPMNEdge_sid-3544F586-2757-45DB-9D17-2AB72EBB1535">
100 
101         <omgdi:waypoint x="416.75" y="212.0" />
102 
103         <omgdi:waypoint x="461.75" y="212.0" />
104 
105       </bpmndi:BPMNEdge>
106 
107       <bpmndi:BPMNEdge bpmnElement="sid-D638FB68-7AB5-48D1-9B0D-4C74B1351B6D" id="BPMNEdge_sid-D638FB68-7AB5-48D1-9B0D-4C74B1351B6D">
108 
109         <omgdi:waypoint x="261.74947919379184" y="211.12499565994827" />
110 
111         <omgdi:waypoint x="316.75" y="211.58333333333331" />
112 
113       </bpmndi:BPMNEdge>
114 
115     </bpmndi:BPMNPlane>
116 
117   </bpmndi:BPMNDiagram>
118 
119 </definitions>

 

主流程的監聽類:

 1 /**
 2 
 3  *
 4 
 5  */
 6 
 7 package light.mvc.workflow.serviceTask;
 8 
 9  
10 
11 import org.activiti.engine.delegate.BpmnError;
12 
13 import org.activiti.engine.delegate.DelegateExecution;
14 
15 import org.activiti.engine.delegate.JavaDelegate;
16 
17  
18 
19 /**  
20 
21  *   
22 
23  * 項目名稱:lightmvc  
24 
25  * 類名稱:ServiceTask  
26 
27  * 類描述:  
28 
29  * 創建人:鄧家海  
30 
31  * 創建時間:2017年6月4日 下午6:18:11  
32 
33  * 修改人:deng  
34 
35  * 修改時間:2017年7月16日 下午7:28:11  
36 
37  * 修改備注:  
38 
39  * @version   
40 
41  *   
42 
43  */
44 
45  
46 
47 public class TestRunningTask implements JavaDelegate{
48 
49  
50 
51 //重寫委托的提交方法
52 
53  
54 
55  
56 
57 @Override
58 
59 public void execute(DelegateExecution execution) throws Exception{
60 
61 System.out.println("TestRunningTask is running!");
62 
63  
64 
65  
66 
67 //throw new BpmnError("myError","myError");
68 
69 throw new BpmnError("MyErrorCode","myError");
70 
71  
72 
73  
74 
75  
76 
77  
78 
79 }
80 
81  
82 
83  
84 
85 }
86 
87  

 

 

 

子流程事件的監聽類:

 

 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 ErrorTestRunningTask implements JavaDelegate{
46 
47  
48 
49 //重寫委托的提交方法
50 
51 @Override
52 
53 public void execute(DelegateExecution execution) throws Exception {
54 
55 //receiveTaskprocess
56 
57 System.out.println("ErrorTestRunningTask is running!");
58 
59 }
60 
61  
62 
63 }
64 
65  

 

 

 

運行結果:

 

5-4 異常事件執行結果

 

 

到這里,五個啟動事件都介紹完了。接下來就網關了。

 

 

 Activiti交流QQ群:634320089

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM