1. 程式人生 > 程式設計 >第六節:Activiti6.0——TaskService相關的API

第六節:Activiti6.0——TaskService相關的API

一、概述

介紹:在activiti的任務中,與任務相關的任務為以下三種,其含義如下:

  • 候選人(組):代表有許可權對任務進行操作的人。
  • 持有人:指當前任務的執行人,他此時持有該任務。
  • 代理人:當一個人持有人不方便處理任務時,可以將任務指給另一人,被指的人即為代理人。

二、候選人

介紹:任務和候選人的關係是一箇中間表(act_ru_identitylink)來儲存的,所有任務和候選人的關係是多對多。

  1. 編碼測試如下:
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); 複製程式碼
  1. 結果檢視
    • 使用者表檢視:
      使用者
    • 任務表檢視:
      任務
    • 關係表:
      關係
    • 執行結果:
      執行結果

三、持有人

介紹:一個人可以持有多個任務,一個任務只能有一個持有人,因此持有人和任務的關係是一對多。持有人關係表現在任務表act_ru_task的OWNER欄位中。

  1. 編碼測試:
//其他程式碼和上個候選人內容一樣
//給任務設定持有人
taskService.setOwner(taskId,userId);

//反向查詢任務:根據持有人查詢任務
List<Task> list = taskService.createTaskQuery().taskOwner(userId).list();
複製程式碼
  1. 結果
    在這裡插入圖片描述

四、代理人

介紹:一個人可以是多個任務的代理人,一個任務只能有一個代理人,因此代理人和任務的關係是一對多

區別taskService.setAssignee()和taskService.claim()都可以給任務設定代理人,區別:

  • setAssignee方法可以隨時任意為任務指定代理人(可多次呼叫),
  • 而claim方法給任務指定一次代理人後,如果再次呼叫claim來指定代理人,則會丟擲異常:ActivitiTaskAlreadyClaimedException: Task 'b7ec485a-a4cd-4bdc-8117-8beb76a81c2f' is already claimed by someone else.
  1. 編碼測試
//使用者一
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);
複製程式碼
  1. 資料庫檢視:
    代理人
  2. 呼叫兩次claim的報錯如下:
    報錯