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");
}
}
複製代碼