您好,登錄后才能下訂單哦!
本篇內容主要講解“Activiti進階之組任務怎么實現”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Activiti進階之組任務怎么實現”吧!
在流程定義中在任務結點的 assignee 固定設置任務負責人,在流程定義時將參與者固定設置在.bpmn 文件中,如果臨時任務負責人變更則需要修改流程定義,系統可擴展性差。
針對這種情況可以給任務設置多個候選人,可以從候選人中選擇參與者來完成任務。
在流程圖中任務節點的配置中設置 candidate-users(候選人),多個候選人之間用逗號分開。
查看bpmn文件
<userTask activiti:candidateUsers="lisi,wangwu" activiti:exclusive="true" id="_3" name="經理審批"/>
我們可以看到部門經理的審核人已經設置為 lisi,wangwu 這樣的一組候選人,可以使用
activiti:candiateUsers=”用戶 1,用戶 2,用戶 3”的這種方式來實現設置一組候選人
a、查詢組任務
指定候選人,查詢該候選人當前的待辦任務。
候選人不能立即辦理任務。
b、拾取(claim)任務
該組任務的所有候選人都能拾取。
將候選人的組任務,變成個人任務。原來候選人就變成了該任務的負責人。
如果拾取后不想辦理該任務?
需要將已經拾取的個人任務歸還到組里邊,將個人任務變成了組任務。
c、查詢個人任務
查詢方式同個人任務部分,根據assignee查詢用戶負責的個人任務。
d、辦理個人任務
根據候選人查詢組任務
/** * 查詢組任務 */ @Test public void test03(){ String key = "evection1"; String candidateUser = "lisi"; ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); TaskService taskService = engine.getTaskService(); List<Task> list = taskService.createTaskQuery() .processDefinitionKey(key) .taskCandidateUser(candidateUser) .list(); for (Task task : list) { System.out.println("流程實例Id:" + task.getProcessInstanceId()); System.out.println("任務ID:" + task.getId()); System.out.println("負責人:" + task.getAssignee()); System.out.println("任務名稱:" + task.getName()); } }
候選人員拾取組任務后該任務變為自己的個人任務。
/** * 候選人 拾取任務 */ @Test public void test04(){ ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); TaskService taskService = engine.getTaskService(); String taskId = "72505"; // 候選人 String userId = "lisi"; // 拾取任務 Task task = taskService.createTaskQuery() .taskId(taskId) .taskCandidateUser(userId) // 根據候選人查詢 .singleResult(); if(task != null){ // 可以拾取任務 taskService.claim(taskId,userId); System.out.println("拾取成功"); } }
查詢方式同個人任務查詢
@Test public void test03(){ String key = "evection1"; String candidateUser = "lisi"; ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); TaskService taskService = engine.getTaskService(); List<Task> list = taskService.createTaskQuery() .processDefinitionKey(key) //.taskCandidateUser(candidateUser) //.taskCandidateOrAssigned(candidateUser) .taskAssignee(candidateUser) .list(); for (Task task : list) { System.out.println("流程實例Id:" + task.getProcessInstanceId()); System.out.println("任務ID:" + task.getId()); System.out.println("負責人:" + task.getAssignee()); System.out.println("任務名稱:" + task.getName()); } }
同個人任務辦理
/** * 完成個人任務 */ @Test public void test05(){ String taskId = "72505"; ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); TaskService taskService = engine.getTaskService(); taskService.complete(taskId); System.out.println("完成任務:" + taskId); }
如果個人不想辦理該組任務,可以歸還組任務,歸還后該用戶不再是該任務的負責人
/** * 歸還任務 */ @Test public void test06(){ ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); TaskService taskService = engine.getTaskService(); String taskId = "75002"; String userId= "zhangsan"; Task task = taskService.createTaskQuery() .taskId(taskId) .taskAssignee(userId) .singleResult(); if(task != null){ // 如果設置為null,歸還組任務,任務沒有負責人 taskService.setAssignee(taskId,null); } }
任務負責人將任務交給其他負責人來處理
/** * 任務交接 */ @Test public void test07(){ ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); TaskService taskService = engine.getTaskService(); String taskId = "75002"; String userId= "zhangsan"; Task task = taskService.createTaskQuery() .taskId(taskId) .taskAssignee(userId) .singleResult(); if(task != null){ // 設置該任務的新的負責人 taskService.setAssignee(taskId,"趙六"); } }
查詢當前任務執行表
SELECT * FROM act_ru_task
任務執行表,記錄當前執行的任務,由于該任務當前是組任務,所有assignee為空,當拾取任務后該字段就是拾取用戶的id
查詢任務參與者
SELECT * FROM act_ru_identitylink
任務參與者,記錄當前參考任務用戶或組,當前任務如果設置了候選人,會向該表插入候選人記錄,有幾個候選就插入幾個
與act_ru_identitylink對應的還有一張歷史表act_hi_identitylink,向act_ru_identitylink插入記錄的同時也會向歷史表插入記錄。任務完成
到此,相信大家對“Activiti進階之組任務怎么實現”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。