日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Activiti5第十一弹,流程监听器与任务监听器

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Activiti5第十一弹,流程监听器与任务监听器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先創建流程監聽器和任務監聽器的實體類,個人比較喜歡使用Delegate Expression方式,其他兩種方式也可以


流程監聽器

package org.mpc.final_activiti;import java.io.Serializable;import org.activiti.engine.delegate.DelegateExecution; import org.activiti.engine.delegate.ExecutionListener; import org.activiti.engine.delegate.Expression;/*** * 可以使用 CLASS ,EXPRESSION,DELEGATE EXPRESSSION三種方式來創建監聽器,這里使用第三種方式,其他兩種方式和* 在servicetask中的使用方式相同* * */ public class ExectuionListenerDemo implements Serializable, ExecutionListener {/*** @Fields serialVersionUID : TODO(用一句話描述這個變量表示什么)*/private static final long serialVersionUID = 8513750196548027535L;private Expression message;public Expression getMessage() {return message;}public void setMessage(Expression message) {this.message = message;}@Overridepublic void notify(DelegateExecution execution) throws Exception {System.out.println("流程監聽器" + message.getValue(execution));}}
任務監聽器

package org.mpc.final_activiti;import java.io.Serializable;import org.activiti.engine.delegate.DelegateTask; import org.activiti.engine.delegate.Expression; import org.activiti.engine.delegate.TaskListener;/*** * 任務監聽器,實現TaskListener接口* * */ public class TaskListenerDemo implements Serializable, TaskListener {private Expression arg;public Expression getArg() {return arg;}public void setArg(Expression arg) {this.arg = arg;}@Overridepublic void notify(DelegateTask delegateTask) {System.out.println("任務監聽器:" + arg.getValue(delegateTask));}}
這兩個監聽器只是簡單的表明了自己的身份,并打印出在流程中注入給他們的值


接著是流程定義圖




從左到右依次是 ?空開始事件--排他網關--用戶任務--空中間拋出事件--空結束事件

首先在空白處點擊鼠標,接著在properties選項卡中做如下操作:



然后在排他網關、空中間拋出事件、以及節點之間的箭頭上點擊鼠標同樣可以做如上的操作,這些都流程監聽事件的配置



在usertask上我們特別配置usertask才有的任務監聽器,配置過程如下圖所示



和流程監聽器的配置大同小異呢


展示一下配置結果的xml文件,特別注意一下加注釋的地方

<?xml version="1.0" encoding="UTF-8"?> <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/test"><process id="myProcess" name="My process" isExecutable="true"><extensionElements><activiti:executionListener event="start" delegateExpression="${myprocessListener}"><activiti:field name="message"><activiti:string><![CDATA[流程啟動]]></activiti:string></activiti:field></activiti:executionListener><activiti:executionListener event="end" delegateExpression="${myprocessListener}"><activiti:field name="message"><activiti:string><![CDATA[流程結束]]></activiti:string></activiti:field></activiti:executionListener></extensionElements><startEvent id="startevent1" name="Start"></startEvent><exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway"><extensionElements><activiti:executionListener event="start" delegateExpression="${myprocessListener}"><activiti:field name="message"><activiti:string><![CDATA[排他網關開始]]></activiti:string></activiti:field></activiti:executionListener><activiti:executionListener event="end" delegateExpression="${myprocessListener}"><activiti:field name="message"><activiti:string><![CDATA[排他網關結束]]></activiti:string></activiti:field></activiti:executionListener></extensionElements></exclusiveGateway><sequenceFlow id="flow3" sourceRef="startevent1" targetRef="exclusivegateway1"></sequenceFlow><userTask id="usertask2" name="User Task" activiti:assignee="${user}"><extensionElements><activiti:taskListener event="create" delegateExpression="${mytaskListener}"><activiti:field name="arg"><activiti:string><![CDATA[任務啟動]]></activiti:string></activiti:field></activiti:taskListener><activiti:taskListener event="assignment" delegateExpression="${mytaskListener}"><activiti:field name="arg"><activiti:string><![CDATA[分配人員]]></activiti:string></activiti:field></activiti:taskListener><activiti:taskListener event="complete" delegateExpression="${mytaskListener}"><activiti:field name="arg"><activiti:string><![CDATA[任務完成]]></activiti:string></activiti:field></activiti:taskListener><!-- 在可視化工具中無法給usertask加上流程監聽器,但是,我們在xml中可以自己敲進去· --><activiti:executionListener event="start" delegateExpression="${myprocessListener}"><activiti:field name="message"><activiti:string><![CDATA[流程啟動任務]]></activiti:string></activiti:field></activiti:executionListener><activiti:executionListener event="end" delegateExpression="${myprocessListener}"><activiti:field name="message"><activiti:string><![CDATA[流程關閉任務]]></activiti:string></activiti:field></activiti:executionListener><!-- ........................................................................................................................................ --></extensionElements></userTask><sequenceFlow id="flow4" sourceRef="exclusivegateway1" targetRef="usertask2"><extensionElements><activiti:executionListener event="take" delegateExpression="${myprocessListener}"><activiti:field name="message"><activiti:string><![CDATA[從排他網關到用戶任務,好長的一段路]]></activiti:string></activiti:field></activiti:executionListener></extensionElements></sequenceFlow><intermediateThrowEvent id="noneintermediatethrowevent1" name="NoneThrowEvent"><extensionElements><activiti:executionListener event="start" delegateExpression="${myprocessListener}"><activiti:field name="message"><activiti:string><![CDATA[中間事件開始]]></activiti:string></activiti:field></activiti:executionListener><activiti:executionListener event="end" delegateExpression="${myprocessListener}"><activiti:field name="message"><activiti:string><![CDATA[中間事件結束]]></activiti:string></activiti:field></activiti:executionListener></extensionElements></intermediateThrowEvent><sequenceFlow id="flow5" sourceRef="usertask2" targetRef="noneintermediatethrowevent1"></sequenceFlow><endEvent id="endevent1" name="End"></endEvent><sequenceFlow id="flow6" sourceRef="noneintermediatethrowevent1" targetRef="endevent1"></sequenceFlow></process><bpmndi:BPMNDiagram id="BPMNDiagram_myProcess"><bpmndi:BPMNPlane bpmnElement="myProcess" id="BPMNPlane_myProcess"><bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1"><omgdc:Bounds height="35.0" width="35.0" x="160.0" y="180.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="exclusivegateway1" id="BPMNShape_exclusivegateway1"><omgdc:Bounds height="40.0" width="40.0" x="240.0" y="130.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2"><omgdc:Bounds height="55.0" width="105.0" x="325.0" y="123.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="noneintermediatethrowevent1" id="BPMNShape_noneintermediatethrowevent1"><omgdc:Bounds height="35.0" width="35.0" x="475.0" y="133.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1"><omgdc:Bounds height="35.0" width="35.0" x="555.0" y="133.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3"><omgdi:waypoint x="195.0" y="197.0"></omgdi:waypoint><omgdi:waypoint x="260.0" y="170.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4"><omgdi:waypoint x="280.0" y="150.0"></omgdi:waypoint><omgdi:waypoint x="325.0" y="150.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5"><omgdi:waypoint x="430.0" y="150.0"></omgdi:waypoint><omgdi:waypoint x="475.0" y="150.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6"><omgdi:waypoint x="510.0" y="150.0"></omgdi:waypoint><omgdi:waypoint x="555.0" y="150.0"></omgdi:waypoint></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram> </definitions>

為了讓usertak產生一個指定人員的事件,我們給這個usertask弄一個指定人員



然后就是測試代碼

package final_activiti.progress;import java.util.HashMap; import java.util.Map;import org.activiti.engine.impl.test.PluggableActivitiTestCase; import org.activiti.engine.test.Deployment; import org.junit.Test; import org.mpc.final_activiti.ExectuionListenerDemo; import org.mpc.final_activiti.TaskListenerDemo;public class ListenersTest extends PluggableActivitiTestCase {@Test@Deployment(resources = "final_activiti/progress/listeners.bpmn")public void test() {Map<String, Object> map = new HashMap<String, Object>();map.put("myprocessListener", new ExectuionListenerDemo());map.put("mytaskListener", new TaskListenerDemo());map.put("user", "mpc");runtimeService.startProcessInstanceByKey("myProcess", map);taskService.complete(taskService.createTaskQuery().singleResult().getId());;}}
測試結果:


分析:

1.我們給usertask定義的流程監聽實現了

2.usertask中先執行流程監聽的start、然后是分配人員、任務啟動、任務完成、流程關閉任務;任務是包含在流程中的

總結

以上是生活随笔為你收集整理的Activiti5第十一弹,流程监听器与任务监听器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。