Activiti服務任務(serviceTask)
作者:Jesai
都有一段沉默的時間,等待厚積薄發
應用場景:
當客戶有這么一個需求:下一個任務我需要自動執行一些操作,並且這個節點不需要任何的人工干涉,也就是說這個節點是自動化的。那么,這個當前面一個經辦人員把任務發送下去的時候,自然而然的下一個節點就會開始馬上執行。這個時候。我們就需要使用Activiti工作流的ServiceTask任務。
ServiceTask任務的實現,其實不復雜。
實現步驟:
(1)設計流程
(2)編寫委托類
(3)把委托類設置到流程的監聽類上面
設計流程:
編寫委托類:
1 package light.mvc.workflow.serviceTask; 2 3 4 5 import org.activiti.engine.delegate.DelegateExecution; 6 7 import org.activiti.engine.delegate.Expression; 8 9 import org.activiti.engine.delegate.JavaDelegate; 10 11 12 13 /** 14 15 * 16 17 * 項目名稱:lightmvc 18 19 * 類名稱:ServiceTask 20 21 * 類描述: 22 23 * 創建人:鄧家海 24 25 * 創建時間:2017年6月4日 下午6:18:11 26 27 * 修改人:deng 28 29 * 修改時間:2017年6月4日 下午6:18:11 30 31 * 修改備注: 32 33 * @version 34 35 * 36 37 */ 38 39 40 41 public class ServiceTask implements JavaDelegate{ 42 43 //流程變量 44 45 private Expression text1; 46 47 48 49 //重寫委托的提交方法 50 51 @Override 52 53 public void execute(DelegateExecution execution) throws Exception { 54 55 System.out.println("serviceTask已經執行已經執行!"); 56 57 String value1 = (String) text1.getValue(execution); 58 59 System.out.println(value1); 60 61 execution.setVariable("var1", new StringBuffer(value1).reverse().toString()); 62 63 } 64 65 66 67 }
把委托類設置到流程的監聽類上面:
流程代碼:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <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"> 3 <process id="process" isExecutable="true"> 4 <startEvent id="sid-F6C5FFC5-63CA-453D-8C11-2DA040793DE9"></startEvent> 5 <serviceTask id="sid-77E58C69-38B7-4DE5-BD73-D0B6CEDD48D4" name="服務" activiti:class="light.mvc.workflow.serviceTask.ServiceTask"> 6 <extensionElements> 7 <activiti:field name="text1"> 8 <activiti:string><![CDATA[test]]></activiti:string> 9 </activiti:field> 10 </extensionElements> 11 </serviceTask> 12 <endEvent id="sid-DB39A39C-1BCC-4F45-B909-9A4319632B42"></endEvent> 13 <sequenceFlow id="sid-567FAFA0-954C-4BC1-AC05-4610A75001B2" sourceRef="sid-77E58C69-38B7-4DE5-BD73-D0B6CEDD48D4" targetRef="sid-DB39A39C-1BCC-4F45-B909-9A4319632B42"></sequenceFlow> 14 <sequenceFlow id="sid-44C871F5-454A-4D4E-8E6F-C0FAA38C7E38" sourceRef="sid-F6C5FFC5-63CA-453D-8C11-2DA040793DE9" targetRef="sid-77E58C69-38B7-4DE5-BD73-D0B6CEDD48D4"></sequenceFlow> 15 </process> 16 <bpmndi:BPMNDiagram id="BPMNDiagram_process"> 17 <bpmndi:BPMNPlane bpmnElement="process" id="BPMNPlane_process"> 18 <bpmndi:BPMNShape bpmnElement="sid-F6C5FFC5-63CA-453D-8C11-2DA040793DE9" id="BPMNShape_sid-F6C5FFC5-63CA-453D-8C11-2DA040793DE9"> 19 <omgdc:Bounds height="30.0" width="30.0" x="172.75" y="99.0"></omgdc:Bounds> 20 </bpmndi:BPMNShape> 21 <bpmndi:BPMNShape bpmnElement="sid-77E58C69-38B7-4DE5-BD73-D0B6CEDD48D4" id="BPMNShape_sid-77E58C69-38B7-4DE5-BD73-D0B6CEDD48D4"> 22 <omgdc:Bounds height="80.0" width="100.0" x="315.0" y="60.0"></omgdc:Bounds> 23 </bpmndi:BPMNShape> 24 <bpmndi:BPMNShape bpmnElement="sid-DB39A39C-1BCC-4F45-B909-9A4319632B42" id="BPMNShape_sid-DB39A39C-1BCC-4F45-B909-9A4319632B42"> 25 <omgdc:Bounds height="28.0" width="28.0" x="480.0" y="100.0"></omgdc:Bounds> 26 </bpmndi:BPMNShape> 27 <bpmndi:BPMNEdge bpmnElement="sid-567FAFA0-954C-4BC1-AC05-4610A75001B2" id="BPMNEdge_sid-567FAFA0-954C-4BC1-AC05-4610A75001B2"> 28 <omgdi:waypoint x="415.0" y="100.0"></omgdi:waypoint> 29 <omgdi:waypoint x="447.5" y="100.0"></omgdi:waypoint> 30 <omgdi:waypoint x="447.5" y="114.0"></omgdi:waypoint> 31 <omgdi:waypoint x="480.0" y="114.0"></omgdi:waypoint> 32 </bpmndi:BPMNEdge> 33 <bpmndi:BPMNEdge bpmnElement="sid-44C871F5-454A-4D4E-8E6F-C0FAA38C7E38" id="BPMNEdge_sid-44C871F5-454A-4D4E-8E6F-C0FAA38C7E38"> 34 <omgdi:waypoint x="202.75" y="114.0"></omgdi:waypoint> 35 <omgdi:waypoint x="258.875" y="114.0"></omgdi:waypoint> 36 <omgdi:waypoint x="258.875" y="100.0"></omgdi:waypoint> 37 <omgdi:waypoint x="315.0" y="100.0"></omgdi:waypoint> 38 </bpmndi:BPMNEdge> 39 </bpmndi:BPMNPlane> 40 </bpmndi:BPMNDiagram> 41 </definitions>
然后執行流程(我的控制台亂碼,沒時間處理,不影響):
升級:
假如客戶說,我並不想馬上去執行這個任務,我只是想在某一個時間之后才去執行這個任務。那么上面的要求顯然又不能滿足需求了。我們又要怎么去升級改進呢?其實也很簡單。我們前面已經實現了定時邊界任務。我們只需要增加一個定時邊界來處理就可以了。
Activiti交流QQ群:634320089
關於定時邊界處理前面已經能做介紹,這里不再重復累贅!