activiti--事件监听

一、activiti的监听器分为:全局监听、连线监听、节点监听。

1、节点监听

    <userTask id="myTask" name="My Task" >
    <extensionElements>
    <activiti:taskListener event="create" class="org.activiti.MyTaskCreateListener" />
    </extensionElements>
    </userTask>

activiti:taskListener 元素属性说明:

  • event (required): 事件类型.。支持的类型有:

    • create: 任务被创建,并且所有的属性都被设置好后。

    • assignment: 任务被委派给某人后.。注意: 当流程执行到达一个userTask时,会先触发一个assignment事件,再触发create事件。

    • complete:在任务完成后,且被从运行时数据(runtime data)中删除前触发。

    • delete: 在任务将要被删除之前发生。注意,当任务通过completeTask完成任务时,它也会被执行。

  • class: 必须调用的委托类。 一定要实现 org.activiti.engine.delegate.TaskListenerinterface接口。


public class MyTaskListener implements TaskListener {
    
    public void notify(DelegateTask delegateTask) {
        String eventName = delegateTask.getEventName();
        if ("create".endsWith(eventName)) {
            System.out.println("create=========");
        }else if ("assignment".endsWith(eventName)) {
            System.out.println("assignment========"+delegateTask.getAssignee());

        }else if ("complete".endsWith(eventName)) {
            System.out.println("complete===========");
        }else if ("delete".endsWith(eventName)) {
            System.out.println("delete=============");
        }
    }
}
 

2、全局监听

public class MyExecutionListener implements ExecutionListener {

    public void notify(DelegateExecution delegateExecution) throws Exception {

        String eventName = delegateExecution.getEventName();
        
        if ("start".equals(eventName)) {
            System.out.println("start=========");
        }else if ("end".equals(eventName)) {
            System.out.println("end=========");
        } else if ("take".equals(eventName)) {//连线监听
            System.out.println("take=========");
        }
    }
}
package com.example.linster;

import org.activiti.engine.RepositoryService;
import org.activiti.engine.TaskService;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.activiti.engine.impl.context.Context;

public class MyTaskLinster implements TaskListener{

    private static final long serialVersionUID = 1L;

    @Override
    public void notify(DelegateTask delegateTask) {
        /**
         * 
            create: 任务被创建,并且所有的属性都被设置好后。
            assignment: 任务被委派给某人后.。注意: 当流程执行到达一个userTask时,会先触发一个assignment事件,再触发create事件。
            complete:在任务完成后,且被从运行时数据(runtime data)中删除前触发。
            delete: 在任务将要被删除之前发生。注意,当任务通过completeTask完成任务时,它也会被执行。
         */
        //获取流程引擎相关服务
        ProcessEngineConfigurationImpl processEngineConfiguration = Context.getProcessEngineConfiguration();
        RepositoryService repositoryService = processEngineConfiguration.getRepositoryService();
        TaskService taskService = processEngineConfiguration.getTaskService();
        
        System.out.println(repositoryService);
        String eventName = delegateTask.getEventName();
        //String[] empLoyees = {"冯小刚经纪人","范冰冰经纪人","冯小刚"};
        //delegateTask.addCandidateUsers(Arrays.asList(empLoyees));//完成多处理人的指定
        //获取流程参数
        //Map<String,Object> map = delegateTask.getVariables();
        System.out.println("任务事件--------------------------"+eventName);
        if ("create".endsWith(eventName)) {
            //
            System.out.println(delegateTask.getAssignee());
            //获取任务ID
            System.out.println(delegateTask.getId());
            //获取任务key
            //delegateTask.getTaskDefinitionKey()
            System.out.println("create=========");
        }else if ("assignment".endsWith(eventName)) {
            System.out.println("assignment========"+delegateTask.getAssignee());
        }else if ("complete".endsWith(eventName)) {
            System.out.println("complete===========");
        }else if ("delete".endsWith(eventName)) {
            System.out.println("delete=============");
        }
        
    }

}

原文地址:https://www.cnblogs.com/jentary/p/13997897.html