Activiti進階之組任務實現(xiàn)示例詳解
1.組任務
1.1、需求
在流程定義中在任務結(jié)點的 assignee 固定設置任務負責人,在流程定義時將參與者固定設置在.bpmn 文件中,如果臨時任務負責人變更則需要修改流程定義,系統(tǒng)可擴展性差。
針對這種情況可以給任務設置多個候選人,可以從候選人中選擇參與者來完成任務。
1.2、設置任務候選人
在流程圖中任務節(jié)點的配置中設置 candidate-users(候選人),多個候選人之間用逗號分開。
查看bpmn文件
<userTask activiti:candidateUsers="lisi,wangwu" activiti:exclusive="true" id="_3" name="經(jīng)理審批"/>
我們可以看到部門經(jīng)理的審核人已經(jīng)設置為 lisi,wangwu 這樣的一組候選人,可以使用
activiti:candiateUsers=”用戶 1,用戶 2,用戶 3”的這種方式來實現(xiàn)設置一組候選人
1.3、組任務
1.3.1、組任務辦理流程
- a、查詢組任務
指定候選人,查詢該候選人當前的待辦任務。
候選人不能立即辦理任務。
- b、拾取(claim)任務
該組任務的所有候選人都能拾取。
將候選人的組任務,變成個人任務。原來候選人就變成了該任務的負責人。
如果拾取后不想辦理該任務?
需要將已經(jīng)拾取的個人任務歸還到組里邊,將個人任務變成了組任務。
- c、查詢個人任務
查詢方式同個人任務部分,根據(jù)assignee查詢用戶負責的個人任務。
- d、辦理個人任務
1.3.2、 查詢組任務
根據(jù)候選人查詢組任務
/** * 查詢組任務 */ @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()); } }
1.3.3 、 拾取組任務
候選人員拾取組任務后該任務變?yōu)樽约旱膫€人任務。
/** * 候選人 拾取任務 */ @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) // 根據(jù)候選人查詢 .singleResult(); if(task != null){ // 可以拾取任務 taskService.claim(taskId,userId); System.out.println("拾取成功"); } }
1.3.4、 查詢個人待辦任務
查詢方式同個人任務查詢
@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()); } }
1.3.5、 辦理個人任務
同個人任務辦理
/** * 完成個人任務 */ @Test public void test05(){ String taskId = "72505"; ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); TaskService taskService = engine.getTaskService(); taskService.complete(taskId); System.out.println("完成任務:" + taskId); }
1.3.6、 歸還組任務
如果個人不想辦理該組任務,可以歸還組任務,歸還后該用戶不再是該任務的負責人
/** * 歸還任務 */ @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); } }
1.3.7、 任務交接
任務負責人將任務交給其他負責人來處理
/** * 任務交接 */ @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,"趙六"); } }
1.3.8、 數(shù)據(jù)庫表操作
查詢當前任務執(zhí)行表
SELECT * FROM act_ru_task
任務執(zhí)行表,記錄當前執(zhí)行的任務,由于該任務當前是組任務,所有assignee為空,當拾取任務后該字段就是拾取用戶的id
查詢?nèi)蝿諈⑴c者
SELECT * FROM act_ru_identitylink
任務參與者,記錄當前參考任務用戶或組,當前任務如果設置了候選人,會向該表插入候選人記錄,有幾個候選就插入幾個
與act_ru_identitylink對應的還有一張歷史表act_hi_identitylink,向act_ru_identitylink插入記錄的同時也會向歷史表插入記錄。任務完成
以上就是Activiti進階之組任務實現(xiàn)示例詳解的詳細內(nèi)容,更多關于Activiti進階組任務的資料請關注腳本之家其它相關文章!
相關文章
java使用BeanUtils.copyProperties踩坑經(jīng)歷
最近在做個項目,踩了個坑特此記錄一下,本文主要介紹了使用BeanUtils.copyProperties踩坑經(jīng)歷,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05Java8新特性之空指針異常的克星Optional類的實現(xiàn)
這篇文章主要介紹了Java8新特性之空指針異常的克星Optional類的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10