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
- 选择刚刚写好的监听器实现类
- 大功告成