IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 5.2 activiti任务监听器TaskListener -> 正文阅读

[Java知识库]5.2 activiti任务监听器TaskListener

1. 任务监听器定义

用户任务UserTask的监听器,定义接口org.activiti.engine.delegate.TaskListener

任务监听器用于在特定的任务相关事件发生时,执行自定义的Java逻辑或表达式

源码:

/**
 * @author Tom Baeyens
 */
public interface TaskListener extends Serializable {

  //create(创建):当任务已经创建,并且所有任务参数都已经设置时触发
  String EVENTNAME_CREATE = "create";
  /**assignment(指派):当任务已经指派给某人时触发。请注意:当流程执行到达用户任务时,
create事件触发前,首先触发assignment事件。这看起来不是自然顺序,
但是有实际原因的:当收到create事件时,我们通常希望查看任务的所有参数,包括办理人。**/
  String EVENTNAME_ASSIGNMENT = "assignment";
  //(完成):当任务已经完成,从运行时数据中删除前触发
  String EVENTNAME_COMPLETE = "complete";
  //(删除):在任务即将被删除前触发。请注意当任务通过completeTask正常完成时也会触发
  String EVENTNAME_DELETE = "delete";
  
  
  /**
   * Not an actual event, used as a marker-value for {@link TaskListener}s that should be called for all events,
   * including {@link #EVENTNAME_CREATE}, {@link #EVENTNAME_ASSIGNMENT} and {@link #EVENTNAME_COMPLETE} and {@link #EVENTNAME_DELETE}.
   */
  String EVENTNAME_ALL_EVENTS = "all";
  
  void notify(DelegateTask delegateTask);
}

结论:assignment事件比create先执行。

xml文件中定义

<userTask id="usertask2" name="User Task" activiti:assignee="c">
      <extensionElements>
        <activiti:taskListener event="all" class="com.daling.ch1.listener.MyExecutionListener"></activiti:taskListener>
      </extensionElements>
</userTask>

2.监听类定义



import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;

/**
 * 任务监听器用于在特定的任务相关事件发生时,执行自定义的Java逻辑或表达式
 *
 * 任务监听器支持下列属性:
 *  event(事件)(必填):任务监听器将被调用的任务事件类型。可用的事件有:
 *         create(创建):当任务已经创建,并且所有任务参数都已经设置时触发。
 *         assignment(指派):当任务已经指派给某人时触发。请注意:当流程执行到达用户任务时,create事件触发前,首先触发
 *         assignment事件。这看起来不是自然顺序,但是有实际原因的:当收到create事件时,我们通常希望查看任务的所有参数,包括
 *         办理人。
 *         complete(完成):当任务已经完成,从运行时数据中删除前触发。
 *         delete(删除):在任务即将被删除前触发。请注意当任务通过completeTask正常完成时也会触发
 *
 *   class:需要调用的代理类。这个类必须实现 org.activiti.engine.delegate.TaskListener 接口
 *
 *
 *   expression:(不能与class属性一起使用):指定在事件发生时要执行的表达式。可以为被调用的对象传递 DelegateTask 对象与事件名(使用 task.eventName )作为参数
 *
 *
 *
 *   delegateExpression:可以指定一个能够解析为 TaskListener 接口实现类对象的表达式。与服务任务类似
 *
 *
 */
@Slf4j
public class SiteReportUserTask implements TaskListener {
    private static final long serialVersionUID = 3654543511891213996L;

    @Override
    public void notify(DelegateTask delegateTask) {
        log.info("creattime: {}",delegateTask.getCreateTime());
        
        log.info("getProcessInstanceId: {}",delegateTask.getProcessInstanceId());


        log.info("数据库中的taskId主键: {}",delegateTask.getId());
        log.info("任务名称: {}",delegateTask.getName());
        delegateTask.setName("修改任务名称");

        log.info("获取任务的描述信息: {}",delegateTask.getDescription());
        delegateTask.setDescription("修改任务的描述信息");
        /**
         * lower priority: [0..19] lowest, [20..39] low, [40..59] normal, [60..79] high
         * [80..100] highest
         任务处理的优先级范围是0-100
         */
        log.info("任务处理的优先级范围是0-100: {}",delegateTask.getPriority());
        delegateTask.setPriority(1); /** 修改优先级*/

        log.info("获取流程实例id: {}",delegateTask.getProcessInstanceId());
        log.info("获取流程获取执行id: {}",delegateTask.getExecutionId());
        log.info("获取流程定义id: {}",delegateTask.getProcessDefinitionId());

     
        /** 添一个加候选人 */
       //void addCandidateUser(String userId);

        /** 添加候选人集合 */
        //void addCandidateUsers(Collection<String> candidateUsers);

        /** 添加候选组 */
        //void addCandidateGroup(String groupId);

        
        
        String eventName = delegateTask.getEventName();
        if (EVENTNAME_CREATE.endsWith(eventName)) {
            System.out.println("create=========");
        }else if (EVENTNAME_ASSIGNMENT.endsWith(eventName)) {
            System.out.println("assignment========");
        }else if (EVENTNAME_COMPLETE.endsWith(eventName)) {
            System.out.println("complete===========");
        }else if (EVENTNAME_DELETE.endsWith(eventName)) {
            System.out.println("delete=============");
        }

    }
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 13:43:18  更:2021-10-07 13:45:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:29:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码