一、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============="); } } }