第六節:Activiti6.0——TaskService相關的API
阿新 • • 發佈:2020-06-24
一、概述
介紹:在activiti的任務中,與任務相關的任務為以下三種,其含義如下:
- 候選人(組):代表有許可權對任務進行操作的人。
- 持有人:指當前任務的執行人,他此時持有該任務。
- 代理人:當一個人持有人不方便處理任務時,可以將任務指給另一人,被指的人即為代理人。
二、候選人
介紹:任務和候選人的關係是一箇中間表(act_ru_identitylink)來儲存的,所有任務和候選人的關係是多對多。
- 編碼測試如下:
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
//此處新建一個任務。該處新建在生產上不能這樣用,因為任務是要繫結到流程上的。此處只是演示,直接new了一個任務
String taskId = UUID.randomUUID().toString();
Task task = taskService.newTask(taskId);
task.setName("測試任務");
taskService.saveTask(task);
//建立一個使用者,因為候選使用者組不支援由使用者組查詢任務,所有此處設定任務的候選人。
IdentityService identityService = processEngine.getIdentityService();
String userId = UUID.randomUUID().toString();
User user = identityService.newUser(userId);
user.setFirstName("老" );
user.setLastName("王");
identityService.saveUser(user);
//給任務設定候選人
taskService.addCandidateUser(taskId,userId);
//反向查詢任務:根據使用者來查詢他擁有的任務
List<Task> list = taskService.createTaskQuery().taskCandidateUser(userId).list();
System.out.println(user.getFirstName() + "" + user.getLastName() + " 使用者有許可權處理的任務有:" );
list.forEach(task1 -> System.out.println(task1.getName()));
//關閉
processEngine.close();
System.exit(0);
複製程式碼
- 結果檢視
- 使用者表檢視:
- 任務表檢視:
- 關係表:
- 執行結果:
三、持有人
介紹:一個人可以持有多個任務,一個任務只能有一個持有人,因此持有人和任務的關係是一對多。持有人關係表現在任務表act_ru_task的OWNER欄位中。
- 編碼測試:
//其他程式碼和上個候選人內容一樣
//給任務設定持有人
taskService.setOwner(taskId,userId);
//反向查詢任務:根據持有人查詢任務
List<Task> list = taskService.createTaskQuery().taskOwner(userId).list();
複製程式碼
- 結果
四、代理人
介紹:一個人可以是多個任務的代理人,一個任務只能有一個代理人,因此代理人和任務的關係是一對多
區別:taskService.setAssignee()和taskService.claim()都可以給任務設定代理人,區別:
- setAssignee方法可以隨時任意為任務指定代理人(可多次呼叫),
- 而claim方法給任務指定一次代理人後,如果再次呼叫claim來指定代理人,則會丟擲異常:ActivitiTaskAlreadyClaimedException: Task 'b7ec485a-a4cd-4bdc-8117-8beb76a81c2f' is already claimed by someone else.
- 編碼測試
//使用者一
String userId = UUID.randomUUID().toString();
User user = identityService.newUser(userId);
user.setFirstName("小");
user.setLastName("明");
identityService.saveUser(user);
//使用者二
String userId2 = UUID.randomUUID().toString();
User user2 = identityService.newUser(userId2);
user2.setFirstName("大");
user2.setLastName("明");
identityService.saveUser(user2);
//1.使用taskService.setAssignee()方法給任務設定代理人
// taskService.setAssignee(taskId,userId);
// taskService.setAssignee(taskId,userId2);
//2.使用taskService.claim()方法給任務設定代理人
taskService.claim(taskId,userId);
taskService.claim(taskId,userId2);
//完成任務
//taskService.complete(taskId);
複製程式碼
- 資料庫檢視:
- 呼叫兩次claim的報錯如下: