likes
comments
collection
share

activiti总结(三)监听器

作者站长头像
站长
· 阅读数 1

activiti总结(三)监听器

activiti监听器有两种,一种是TaskListeners,一种是ExecutionListeners。

一、TaskListener

TaskListener是一个任务监听器接口,拥有一个方法notify ,设置任务监听器时可以选择四种类型的触发事件,分别是create,assigin,delete,all。当一个任务开始执行某个事件时,监听器中的代码就会自动执行而不需要手动调用。

当使用spring整合activiti时,使用监听器要注意一点,那就是监听器的bean并不归spring管理,要正常使用监听器,监听器实现类需要还需要实现activiti的JavaDelegate。代码如下:

package com.oms.lisener;

import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.JavaDelegate;
import org.activiti.engine.delegate.TaskListener;

import java.util.Map;

/**
 * 描述:
 * 提出请假申请监听器
 *
 * @author Zhouyz
 * @create 2019-06-05 17:12
 */

public class ApplyForRepairImpl implements JavaDelegate, TaskListener {

    @Override
    public void execute(DelegateExecution delegateExecution) {
        System.out.println("---------------------------------------------------维修请求");
    }

    @Override
    public void notify(DelegateTask delegateTask) {
        delegateTask.getOwner();
        System.out.println("----------------------" + delegateTask.getOwner() + "-----------------------------维修请求----------------------notify");
        Map varis = delegateTask.getVariables();
        //这里要记得做异常处理
        delegateTask.setOwner(varis.get("owner").toString());
        delegateTask.setAssignee(varis.get("assignee").toString());
    }
}

二、ExcutionListener

ExcutinerLister的用法和TaskListener类似,但是他们监听的事件不一样,ExcutionListener监听的时工作流的状态改变,被触发的事件有三种:start,end,take。在spring中使用时同样要实现JavaDelegate接口。代码如下:

package com.oms.lisener;

import org.activiti.engine.delegate.*;

/**
 * 描述:
 * 领导审批任务监听器
 *
 * @author Zhouyz
 * @create 2019-06-06 11:11
 */

public class LeaderCheck implements JavaDelegate, ExecutionListener {
    @Override
    public void execute(DelegateExecution delegateExecution) {
        System.out.println("------------------do nothing--------------");
    }


    @Override
    public void notify(DelegateExecution delegateExecution) {
        System.out.println("-----------流程实例id" + delegateExecution.getProcessInstanceId() + "-------------notify");
    }
}

三、使用监听器

  • 添加task或者其他结构的listener

activiti总结(三)监听器

  • 选择刚刚写好的监听器实现类

activiti总结(三)监听器

  • 大功告成