服务好的网站制作,郑州seo网络优化公司,网络营销的方式与手段,郑州做网站推广地址首先创建流程监听器和任务监听器的实体类#xff0c;个人比较喜欢使用Delegate Expression方式#xff0c;其他两种方式也可以 流程监听器 package org.mpc.final_activiti;import java.io.Serializable;import org.activiti.engine.delegate.DelegateExecution;
import org.…首先创建流程监听器和任务监听器的实体类个人比较喜欢使用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 version1.0 encodingUTF-8?
definitions xmlnshttp://www.omg.org/spec/BPMN/20100524/MODEL xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:xsdhttp://www.w3.org/2001/XMLSchema xmlns:activitihttp://activiti.org/bpmn xmlns:bpmndihttp://www.omg.org/spec/BPMN/20100524/DI xmlns:omgdchttp://www.omg.org/spec/DD/20100524/DC xmlns:omgdihttp://www.omg.org/spec/DD/20100524/DI typeLanguagehttp://www.w3.org/2001/XMLSchema expressionLanguagehttp://www.w3.org/1999/XPath targetNamespacehttp://www.activiti.org/testprocess idmyProcess nameMy process isExecutabletrueextensionElementsactiviti:executionListener eventstart delegateExpression${myprocessListener}activiti:field namemessageactiviti:string![CDATA[流程启动]]/activiti:string/activiti:field/activiti:executionListeneractiviti:executionListener eventend delegateExpression${myprocessListener}activiti:field namemessageactiviti:string![CDATA[流程结束]]/activiti:string/activiti:field/activiti:executionListener/extensionElementsstartEvent idstartevent1 nameStart/startEventexclusiveGateway idexclusivegateway1 nameExclusive GatewayextensionElementsactiviti:executionListener eventstart delegateExpression${myprocessListener}activiti:field namemessageactiviti:string![CDATA[排他网关开始]]/activiti:string/activiti:field/activiti:executionListeneractiviti:executionListener eventend delegateExpression${myprocessListener}activiti:field namemessageactiviti:string![CDATA[排他网关结束]]/activiti:string/activiti:field/activiti:executionListener/extensionElements/exclusiveGatewaysequenceFlow idflow3 sourceRefstartevent1 targetRefexclusivegateway1/sequenceFlowuserTask idusertask2 nameUser Task activiti:assignee${user}extensionElementsactiviti:taskListener eventcreate delegateExpression${mytaskListener}activiti:field nameargactiviti:string![CDATA[任务启动]]/activiti:string/activiti:field/activiti:taskListeneractiviti:taskListener eventassignment delegateExpression${mytaskListener}activiti:field nameargactiviti:string![CDATA[分配人员]]/activiti:string/activiti:field/activiti:taskListeneractiviti:taskListener eventcomplete delegateExpression${mytaskListener}activiti:field nameargactiviti:string![CDATA[任务完成]]/activiti:string/activiti:field/activiti:taskListener!-- 在可视化工具中无法给usertask加上流程监听器但是我们在xml中可以自己敲进去· --activiti:executionListener eventstart delegateExpression${myprocessListener}activiti:field namemessageactiviti:string![CDATA[流程启动任务]]/activiti:string/activiti:field/activiti:executionListeneractiviti:executionListener eventend delegateExpression${myprocessListener}activiti:field namemessageactiviti:string![CDATA[流程关闭任务]]/activiti:string/activiti:field/activiti:executionListener!-- ........................................................................................................................................ --/extensionElements/userTasksequenceFlow idflow4 sourceRefexclusivegateway1 targetRefusertask2extensionElementsactiviti:executionListener eventtake delegateExpression${myprocessListener}activiti:field namemessageactiviti:string![CDATA[从排他网关到用户任务好长的一段路]]/activiti:string/activiti:field/activiti:executionListener/extensionElements/sequenceFlowintermediateThrowEvent idnoneintermediatethrowevent1 nameNoneThrowEventextensionElementsactiviti:executionListener eventstart delegateExpression${myprocessListener}activiti:field namemessageactiviti:string![CDATA[中间事件开始]]/activiti:string/activiti:field/activiti:executionListeneractiviti:executionListener eventend delegateExpression${myprocessListener}activiti:field namemessageactiviti:string![CDATA[中间事件结束]]/activiti:string/activiti:field/activiti:executionListener/extensionElements/intermediateThrowEventsequenceFlow idflow5 sourceRefusertask2 targetRefnoneintermediatethrowevent1/sequenceFlowendEvent idendevent1 nameEnd/endEventsequenceFlow idflow6 sourceRefnoneintermediatethrowevent1 targetRefendevent1/sequenceFlow/processbpmndi:BPMNDiagram idBPMNDiagram_myProcessbpmndi:BPMNPlane bpmnElementmyProcess idBPMNPlane_myProcessbpmndi:BPMNShape bpmnElementstartevent1 idBPMNShape_startevent1omgdc:Bounds height35.0 width35.0 x160.0 y180.0/omgdc:Bounds/bpmndi:BPMNShapebpmndi:BPMNShape bpmnElementexclusivegateway1 idBPMNShape_exclusivegateway1omgdc:Bounds height40.0 width40.0 x240.0 y130.0/omgdc:Bounds/bpmndi:BPMNShapebpmndi:BPMNShape bpmnElementusertask2 idBPMNShape_usertask2omgdc:Bounds height55.0 width105.0 x325.0 y123.0/omgdc:Bounds/bpmndi:BPMNShapebpmndi:BPMNShape bpmnElementnoneintermediatethrowevent1 idBPMNShape_noneintermediatethrowevent1omgdc:Bounds height35.0 width35.0 x475.0 y133.0/omgdc:Bounds/bpmndi:BPMNShapebpmndi:BPMNShape bpmnElementendevent1 idBPMNShape_endevent1omgdc:Bounds height35.0 width35.0 x555.0 y133.0/omgdc:Bounds/bpmndi:BPMNShapebpmndi:BPMNEdge bpmnElementflow3 idBPMNEdge_flow3omgdi:waypoint x195.0 y197.0/omgdi:waypointomgdi:waypoint x260.0 y170.0/omgdi:waypoint/bpmndi:BPMNEdgebpmndi:BPMNEdge bpmnElementflow4 idBPMNEdge_flow4omgdi:waypoint x280.0 y150.0/omgdi:waypointomgdi:waypoint x325.0 y150.0/omgdi:waypoint/bpmndi:BPMNEdgebpmndi:BPMNEdge bpmnElementflow5 idBPMNEdge_flow5omgdi:waypoint x430.0 y150.0/omgdi:waypointomgdi:waypoint x475.0 y150.0/omgdi:waypoint/bpmndi:BPMNEdgebpmndi:BPMNEdge bpmnElementflow6 idBPMNEdge_flow6omgdi:waypoint x510.0 y150.0/omgdi:waypointomgdi:waypoint x555.0 y150.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 {TestDeployment(resources final_activiti/progress/listeners.bpmn)public void test() {MapString, Object map new HashMapString, 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、然后是分配人员、任务启动、任务完成、流程关闭任务任务是包含在流程中的