zoukankan      html  css  js  c++  java
  • Activiti5----流程监听器与任务监听器

    首先创建流程监听器和任务监听器的实体类,个人比较喜欢使用Delegate Expression方式,其他两种方式也可以


    流程监听器

    1. package org.mpc.final_activiti;
    2. import java.io.Serializable;
    3. import org.activiti.engine.delegate.DelegateExecution;
    4. import org.activiti.engine.delegate.ExecutionListener;
    5. import org.activiti.engine.delegate.Expression;
    6. /**
    7. *
    8. * 可以使用 CLASS ,EXPRESSION,DELEGATE EXPRESSSION三种方式来创建监听器,这里使用第三种方式,其他两种方式和
    9. * 在servicetask中的使用方式相同
    10. *
    11. * */
    12. public class ExectuionListenerDemo implements Serializable, ExecutionListener {
    13. /**
    14. * @Fields serialVersionUID : TODO(用一句话描述这个变量表示什么)
    15. */
    16. private static final long serialVersionUID = 8513750196548027535L;
    17. private Expression message;
    18. public Expression getMessage() {
    19. return message;
    20. }
    21. public void setMessage(Expression message) {
    22. this.message = message;
    23. }
    24. @Override
    25. public void notify(DelegateExecution execution) throws Exception {
    26. System.out.println("流程监听器" + message.getValue(execution));
    27. }
    28. }

    任务监听器

    1. package org.mpc.final_activiti;
    2. import java.io.Serializable;
    3. import org.activiti.engine.delegate.DelegateTask;
    4. import org.activiti.engine.delegate.Expression;
    5. import org.activiti.engine.delegate.TaskListener;
    6. /**
    7. *
    8. * 任务监听器,实现TaskListener接口
    9. *
    10. * */
    11. public class TaskListenerDemo implements Serializable, TaskListener {
    12. private Expression arg;
    13. public Expression getArg() {
    14. return arg;
    15. }
    16. public void setArg(Expression arg) {
    17. this.arg = arg;
    18. }
    19. @Override
    20. public void notify(DelegateTask delegateTask) {
    21. System.out.println("任务监听器:" + arg.getValue(delegateTask));
    22. }
    23. }

    这两个监听器只是简单的表明了自己的身份,并打印出在流程中注入给他们的值


    接着是流程定义图




    从左到右依次是  空开始事件--排他网关--用户任务--空中间抛出事件--空结束事件

    首先在空白处点击鼠标,接着在properties选项卡中做如下操作:



    然后在排他网关、空中间抛出事件、以及节点之间的箭头上点击鼠标同样可以做如上的操作,这些都流程监听事件的配置



    在usertask上我们特别配置usertask才有的任务监听器,配置过程如下图所示



    和流程监听器的配置大同小异呢


    展示一下配置结果的xml文件,特别注意一下加注释的地方

    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/test">
    3. <process id="myProcess" name="My process" isExecutable="true">
    4. <extensionElements>
    5. <activiti:executionListener event="start" delegateExpression="${myprocessListener}">
    6. <activiti:field name="message">
    7. <activiti:string><![CDATA[流程启动]]></activiti:string>
    8. </activiti:field>
    9. </activiti:executionListener>
    10. <activiti:executionListener event="end" delegateExpression="${myprocessListener}">
    11. <activiti:field name="message">
    12. <activiti:string><![CDATA[流程结束]]></activiti:string>
    13. </activiti:field>
    14. </activiti:executionListener>
    15. </extensionElements>
    16. <startEvent id="startevent1" name="Start"></startEvent>
    17. <exclusiveGateway id="exclusivegateway1" name="Exclusive Gateway">
    18. <extensionElements>
    19. <activiti:executionListener event="start" delegateExpression="${myprocessListener}">
    20. <activiti:field name="message">
    21. <activiti:string><![CDATA[排他网关开始]]></activiti:string>
    22. </activiti:field>
    23. </activiti:executionListener>
    24. <activiti:executionListener event="end" delegateExpression="${myprocessListener}">
    25. <activiti:field name="message">
    26. <activiti:string><![CDATA[排他网关结束]]></activiti:string>
    27. </activiti:field>
    28. </activiti:executionListener>
    29. </extensionElements>
    30. </exclusiveGateway>
    31. <sequenceFlow id="flow3" sourceRef="startevent1" targetRef="exclusivegateway1"></sequenceFlow>
    32. <userTask id="usertask2" name="User Task" activiti:assignee="${user}">
    33. <extensionElements>
    34. <activiti:taskListener event="create" delegateExpression="${mytaskListener}">
    35. <activiti:field name="arg">
    36. <activiti:string><![CDATA[任务启动]]></activiti:string>
    37. </activiti:field>
    38. </activiti:taskListener>
    39. <activiti:taskListener event="assignment" delegateExpression="${mytaskListener}">
    40. <activiti:field name="arg">
    41. <activiti:string><![CDATA[分配人员]]></activiti:string>
    42. </activiti:field>
    43. </activiti:taskListener>
    44. <activiti:taskListener event="complete" delegateExpression="${mytaskListener}">
    45. <activiti:field name="arg">
    46. <activiti:string><![CDATA[任务完成]]></activiti:string>
    47. </activiti:field>
    48. </activiti:taskListener>
    49. <!-- 在可视化工具中无法给usertask加上流程监听器,但是,我们在xml中可以自己敲进去· -->
    50. <activiti:executionListener event="start" delegateExpression="${myprocessListener}">
    51. <activiti:field name="message">
    52. <activiti:string><![CDATA[流程启动任务]]></activiti:string>
    53. </activiti:field>
    54. </activiti:executionListener>
    55. <activiti:executionListener event="end" delegateExpression="${myprocessListener}">
    56. <activiti:field name="message">
    57. <activiti:string><![CDATA[流程关闭任务]]></activiti:string>
    58. </activiti:field>
    59. </activiti:executionListener>
    60. <!-- ........................................................................................................................................ -->
    61. </extensionElements>
    62. </userTask>
    63. <sequenceFlow id="flow4" sourceRef="exclusivegateway1" targetRef="usertask2">
    64. <extensionElements>
    65. <activiti:executionListener event="take" delegateExpression="${myprocessListener}">
    66. <activiti:field name="message">
    67. <activiti:string><![CDATA[从排他网关到用户任务,好长的一段路]]></activiti:string>
    68. </activiti:field>
    69. </activiti:executionListener>
    70. </extensionElements>
    71. </sequenceFlow>
    72. <intermediateThrowEvent id="noneintermediatethrowevent1" name="NoneThrowEvent">
    73. <extensionElements>
    74. <activiti:executionListener event="start" delegateExpression="${myprocessListener}">
    75. <activiti:field name="message">
    76. <activiti:string><![CDATA[中间事件开始]]></activiti:string>
    77. </activiti:field>
    78. </activiti:executionListener>
    79. <activiti:executionListener event="end" delegateExpression="${myprocessListener}">
    80. <activiti:field name="message">
    81. <activiti:string><![CDATA[中间事件结束]]></activiti:string>
    82. </activiti:field>
    83. </activiti:executionListener>
    84. </extensionElements>
    85. </intermediateThrowEvent>
    86. <sequenceFlow id="flow5" sourceRef="usertask2" targetRef="noneintermediatethrowevent1"></sequenceFlow>
    87. <endEvent id="endevent1" name="End"></endEvent>
    88. <sequenceFlow id="flow6" sourceRef="noneintermediatethrowevent1" targetRef="endevent1"></sequenceFlow>
    89. </process>
    90. <bpmndi:BPMNDiagram id="BPMNDiagram_myProcess">
    91. <bpmndi:BPMNPlane bpmnElement="myProcess" id="BPMNPlane_myProcess">
    92. <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
    93. <omgdc:Bounds height="35.0" width="35.0" x="160.0" y="180.0"></omgdc:Bounds>
    94. </bpmndi:BPMNShape>
    95. <bpmndi:BPMNShape bpmnElement="exclusivegateway1" id="BPMNShape_exclusivegateway1">
    96. <omgdc:Bounds height="40.0" width="40.0" x="240.0" y="130.0"></omgdc:Bounds>
    97. </bpmndi:BPMNShape>
    98. <bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2">
    99. <omgdc:Bounds height="55.0" width="105.0" x="325.0" y="123.0"></omgdc:Bounds>
    100. </bpmndi:BPMNShape>
    101. <bpmndi:BPMNShape bpmnElement="noneintermediatethrowevent1" id="BPMNShape_noneintermediatethrowevent1">
    102. <omgdc:Bounds height="35.0" width="35.0" x="475.0" y="133.0"></omgdc:Bounds>
    103. </bpmndi:BPMNShape>
    104. <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
    105. <omgdc:Bounds height="35.0" width="35.0" x="555.0" y="133.0"></omgdc:Bounds>
    106. </bpmndi:BPMNShape>
    107. <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
    108. <omgdi:waypoint x="195.0" y="197.0"></omgdi:waypoint>
    109. <omgdi:waypoint x="260.0" y="170.0"></omgdi:waypoint>
    110. </bpmndi:BPMNEdge>
    111. <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">
    112. <omgdi:waypoint x="280.0" y="150.0"></omgdi:waypoint>
    113. <omgdi:waypoint x="325.0" y="150.0"></omgdi:waypoint>
    114. </bpmndi:BPMNEdge>
    115. <bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5">
    116. <omgdi:waypoint x="430.0" y="150.0"></omgdi:waypoint>
    117. <omgdi:waypoint x="475.0" y="150.0"></omgdi:waypoint>
    118. </bpmndi:BPMNEdge>
    119. <bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6">
    120. <omgdi:waypoint x="510.0" y="150.0"></omgdi:waypoint>
    121. <omgdi:waypoint x="555.0" y="150.0"></omgdi:waypoint>
    122. </bpmndi:BPMNEdge>
    123. </bpmndi:BPMNPlane>
    124. </bpmndi:BPMNDiagram>
    125. </definitions>


    为了让usertak产生一个指定人员的事件,我们给这个usertask弄一个指定人员



    然后就是测试代码

    1. package final_activiti.progress;
    2. import java.util.HashMap;
    3. import java.util.Map;
    4. import org.activiti.engine.impl.test.PluggableActivitiTestCase;
    5. import org.activiti.engine.test.Deployment;
    6. import org.junit.Test;
    7. import org.mpc.final_activiti.ExectuionListenerDemo;
    8. import org.mpc.final_activiti.TaskListenerDemo;
    9. public class ListenersTest extends PluggableActivitiTestCase {
    10. @Test
    11. @Deployment(resources = "final_activiti/progress/listeners.bpmn")
    12. public void test() {
    13. Map<String, Object> map = new HashMap<String, Object>();
    14. map.put("myprocessListener", new ExectuionListenerDemo());
    15. map.put("mytaskListener", new TaskListenerDemo());
    16. map.put("user", "mpc");
    17. runtimeService.startProcessInstanceByKey("myProcess", map);
    18. taskService.complete(taskService.createTaskQuery().singleResult()
    19. .getId());
    20. ;
    21. }
    22. }

    测试结果:


    分析:

    1.我们给usertask定义的流程监听实现了

    2.usertask中先执行流程监听的start、然后是分配人员、任务启动、任务完成、流程关闭任务;任务是包含在流程中的

    原文地址:https://blog.csdn.net/u012613903/article/details/43732941
  • 相关阅读:
    arcgis建立拓扑分析(检验矢量图)
    矢量图面层和线层相交得到相交后的线层文件(gis相交)
    关于处理注册表权限无法修改的问题(无法打开主键或注册表项unknown)
    my.cnf配置文件
    keepalived联动mysql
    安装客户端连接软件(zabbix_agentd-filebeat-flume)
    zabbix短信配置说明
    zabbix监控工具添加网络设备Ping
    新买了硬盘,让Linux系统识别硬盘nfs---->改成xfs
    vnc软件使用
  • 原文地址:https://www.cnblogs.com/jpfss/p/11101605.html
Copyright © 2011-2022 走看看