首先创建流程监听器和任务监听器的实体类,个人比较喜欢使用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第十一弹,流程监听器与任务监听器相关推荐

  1. 秋招面经第十一弹:沐瞳科技一面-大数据平台开发工程师

    秋招第十一弹:沐瞳科技一面-大数据平台开发工程师 写在最前:秋招以来一直在冲,因为事情比较多,对于笔试面试一直没有复盘,现在靠仅存的记忆把面试的一些问题记录下来,尽可能记录出能回忆到的问题,但可能记的 ...

  2. 北漂生活第十一弹-bingo 代码合并

    希望这次十一弹-没有数错 今天起床的时间和昨天一样 还是班车发车了我才醒过来 但是今天 骑车的路上运气比较好 基本上一路都是绿灯 蛮幸运的 我在下坡的时候 发现我不蹬车 也冲到了 前面一个 小哥哥前面 ...

  3. 【Flutter】Animation 动画 ( Flutter 动画基本流程 | 创建动画控制器 | 创建动画 | 设置值监听器 | 设置状态监听器 | 布局中使用动画值 | 动画运行 )

    文章目录 一.创建动画控制器 二.创建动画 三.设置值监听器 四.设置状态监听器 五.布局中使用动画值 六.动画运行 七.完整代码示例 八.相关资源 Flutter 动画基本流程 : ① 创建动画控制 ...

  4. java添加事件监听器_Java事件监听器的四种实现方式

    自身类作为事件监听器 外部类作为事件监听器 匿名内部类作为事件监听器 内部类作为事件监听器 自身类作为事件监听器: 1 import javax.swing.*;2 import java.awt.* ...

  5. mysql 重启监听器_Oracle Lsnrctl监听器的启动和关闭

    对于DBA来说,启动和关闭oracle监听器是很基础的任务,但是Linux系统管理员或者程序员有时也需要在开发数据库中做一些基本的DBA操作,因此了解一些基本的管理操作对他们来说很重要.本文将讨论用L ...

  6. oracle监听器状态,oracle 监听器概念

    监听就像人的耳朵,数据库装好后开启监听,客户段才能访问. 数据库软件11g安装之后默认是安装了监听,如没有安装,用netca进入到图形方式去安装. 这里面设计到几个概念, DB_NAME,INSTAN ...

  7. mysql实体监听器_11gR2中的SCAN监听器和本地监听器配置

    11.2 Scan and Node TNS Listener Setup Examples [ID 1070607.1] 修改时间 29-JAN-2012 类型 HOWTO 状态 PUBLISHED ...

  8. 按钮动作监听器和鼠标监听器的同时实现,在画图板上画出三角形,射线,曲笔,谢尔宾斯基三角形,谢尔宾斯基地毯Random类的实现,数组的实现,Thread.sleep的实现

    按钮动作监听器和鼠标监听器的实现 实例化 实现 监听器的类 DrawListener dl = new DrawListener();// 在界面上添加鼠标监听器对象(鼠标监听器的对象可以是界面和按钮 ...

  9. oracle11gr2配置监听,11gR2中的SCAN监听器和本地监听器配置

    11.2 Scan and Node TNS Listener Setup Examples [ID 1070607.1] 修改时间29-JAN-2012     类型HOWTO     状态PUBL ...

最新文章

  1. pdf格式转换成jpg的简单教程
  2. 学完python还需要学什么语言好_python基础学完了之后还需要学习什么
  3. 科大星云诗社动态20201225
  4. 关于UI自动化测试元素定位细节记录
  5. Java EE CDI依赖关系消歧示例
  6. 简单的Twitter:Heroku上的Play框架,AJAX,CRUD
  7. FreeRTOS源码分析与应用开发02:任务管理
  8. 最近在做支付宝支付,在本地测试一切正常,上传到服务器就遇到报错:
  9. java基础知识点整理一
  10. python添加包路径_python包/模块路径
  11. 求两条直线(线段)的交点
  12. UVA 10651 - Pebble Solitaire
  13. js导出变量 vue_Vue+Element前端导入导出Excel
  14. 矩阵求导术(二)——矩阵对矩阵的求导
  15. (copy即运行)嗖嗖移动大厅详讲!!!一看便知
  16. 【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践
  17. android一些可用实例2014收藏
  18. 【挨踢人物传】英雄不问出路,从化工员到微软企业护航专家(第16期)
  19. KeyShot 11 Pro for Mac(3D渲染和动画制作) V11.3.2.2中文安装+更新内容
  20. 复旦大学,计算机考研情况

热门文章

  1. (连续子序列)唯一的雪花
  2. python中getopt函数_Python中getopt()函数的使用
  3. matlab 信号处理 教程,MATLAB信号处理仿真 实验_教程-学习文件.pdf
  4. Oracle 数据怎么实时同步到 Elasticsearch | 亲测干货建议收藏
  5. 交通灯程序设计C语言,基于MCS-51的交通灯程序设计(c语言控制直行左转,包含程序)...
  6. 分布式认知在计算机应用系统,人机交互作业
  7. java中isolate时间_Java HikariDataSource.setIdleTimeout方法代码示例
  8. MySQL修改数据表
  9. C++ static静态成员变量
  10. 正则表达式的运算符优先级