1. 程式人生 > >activities工作流之流程任務及監聽器

activities工作流之流程任務及監聽器

ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();

一、流程任務型別
①.個人任務
由某一個負責辦理,在任務表中通過assignee欄位記錄
②.公共任務(又稱組任務)
當前的任務可以由多個人辦理,一個人辦理即可流轉至下一個環節
③.接收任務
接收任務不是由某個人負責辦理,通過signal方法讓流程執行的
二、任務操作
①.公共任務查詢

TaskQuery query = pe.getTaskService().createTaskQuery();
String candidateUser = "李四";
//根據候選人過濾
query.taskCandidateUser(candidateUser);
List<Task> list = query.list();
for (Task task : list) {
	System.out.println(task.getName());
}

②.拾取公共任務(即將公共任務變為個人任務)

String taskId = "1602";
String userId = "王五";
pe.getTaskService().claim(taskId , userId);

③.退回任務到公共任務列表

String taskId = "1602";
pe.getTaskService().setAssignee(taskId , null);

④.接受任務(接收任務不是由某個人負責辦理,通過signal方法讓流程執行的)

String executionId = "2101";
pe.getRuntimeService().signal(executionId );

三、流程監聽器
①.流程例項監聽器(監聽流程例項的事件)
(1)自定義流程例項監聽器

public class MyExecutionListener implements ExecutionListener {
	//當監聽的事件傳送時執行此方法
	public void notify(DelegateExecution execution) throws Exception {
		System.out.println("自定義的監聽器執行了。。。1");
	}
}

(2)註冊流程例項監聽器
在流程開始任務或者結束任務節點,畫流程圖時,選擇listener的class物件
②.任務監聽器(監聽流程中的任務,即監聽某個待辦節點)
(1)自定義流程例項監聽器

public class MyTaskListener implements TaskListener{
	//監聽任務的事件
	public void notify(DelegateTask delegateTask) {
		String assignee = delegateTask.getAssignee();
		String eventName = delegateTask.getEventName();
		String name = delegateTask.getName();
		String processInstanceId = delegateTask.getProcessInstanceId();
		Set<String> variableNames = delegateTask.getVariableNames();
		for (String key : variableNames) {
			Object value = delegateTask.getVariable(key);
			System.out.println(key + " = " + value);
		}
		System.out.println("一個任務["+name+"]被建立了,由["+assignee+"]負責辦理");
	}
}

(2)註冊流程任務監聽器
在流程任務節點,畫流程圖時,選擇listener的class物件