一、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.TaskListener
interface接口。
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============="); } } }