activiti监听器有两种,一种是TaskListeners,一种是ExecutionListeners。java
TaskListener是一个任务监听器接口,拥有一个方法notify
,设置任务监听器时能够选择四种类型的触发事件,分别是create,assigin,delete,all。当一个任务开始执行某个事件时,监听器中的代码就会自动执行而不须要手动调用。spring
当使用spring整合activiti时,使用监听器要注意一点,那就是监听器的bean并不归spring管理,要正常使用监听器,监听器实现类须要还须要实现activiti的JavaDelegate。代码以下:ide
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());
}
}
复制代码
ExcutinerLister的用法和TaskListener相似,可是他们监听的事件不同,ExcutionListener监听的时工做流的状态改变,被触发的事件有三种:start,end,take。在spring中使用时一样要实现JavaDelegate接口。代码以下:spa
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");
}
}
复制代码