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對象