10組任務

来源:https://www.cnblogs.com/Guorisy/archive/2019/12/25/12099285.html
-Advertisement-
Play Games

流程中的某個任務由指定的group來完成,其中group由多個user組成。 一、直接指定辦理組 1、流程圖 2、部署和啟動流程 //部署流程 @Test public void bushu() { InputStream inputStream = this.getClass().getResou ...


流程中的某個任務由指定的group來完成,其中group由多個user組成。

一、直接指定辦理組

1、流程圖

 

 

 

2、部署和啟動流程

    //部署流程     @Test     public void bushu() {         InputStream inputStream = this.getClass().getResourceAsStream("GroupTask.zip");         ZipInputStream zipInputStream = new ZipInputStream(inputStream);         RepositoryService repositoryService = processEngine.getRepositoryService();         Deployment deploy = repositoryService.createDeployment().name("請假流程")                 .addZipInputStream(zipInputStream).deploy();         System.out.println("部署成功:部署ID"+deploy.getId());     }          //啟動流程     @Test     public void startProcess() {         RuntimeService runtimeService = processEngine.getRuntimeService();         ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");         System.out.println("流程啟動成功,流程實例ID為:"+processInstance.getId());     } 流程啟動之後,任務表中的辦理人為空,存放流程辦理人的信息表中有八條數據,每個人既是參與者,又是申請者:  

 

 

 

3、查詢組任務

此處的張三,可以是李四,王五或者趙六,得到的結果一樣,每個人都可以看到此任務。 //查詢組任務     @Test     public void findGroupTask() {         TaskService taskService = this.processEngine.getTaskService();         List<Task> list = taskService.createTaskQuery().taskCandidateUser("張三").list();         if (null != list && list.size() > 0) {             for (Task task : list) {                 System.out.println("任務ID:" + task.getId());             }         }     }

4、任務拾取

任務拾取後組任務變成個人任務。  //任務拾取     @Test     public void claim() {         String taskId="2504";         TaskService taskService = this.processEngine.getTaskService();         taskService.claim(taskId, "張三");         System.out.println("任務拾取成功");     }

5、任務回退(設置辦理人為空)

 // 任務回退     @Test     public void claimBack() {         String taskId="2504";         TaskService taskService = this.processEngine.getTaskService();         taskService.setAssignee(taskId, null);         System.out.println("任務回退成功");     } 在實際開發中:由主任務辦理人去設置組任務的辦理人,設置時應將組任務辦理人查出進行選擇。目的就是讓組任務變成個人任務。

6、查詢組任務成員列表

 // 查詢組任務成員列表     @Test     public void findGroupUser(){         String taskId = "2504";         List<IdentityLink> list = processEngine.getTaskService()//                         .getIdentityLinksForTask(taskId);          //List<IdentityLink> list = processEngine.getRuntimeService()//         //                .getIdentityLinksForProcessInstance(instanceId);         for(IdentityLink identityLink:list ){             System.out.println("userId="+identityLink.getUserId());             System.out.println("taskId="+identityLink.getTaskId());             System.out.println("piId="+identityLink.getProcessInstanceId());             System.out.println("TYPE="+identityLink.getType());             System.out.println("######################");         }     }

 

 

二、使用流程變數指定辦理組

1、流程圖

 

 

 

2、在啟動時設置辦理人

//啟動流程     @Test     public void startProcess() {         RuntimeService runtimeService = this.processEngine.getRuntimeService();         String processDefinitionKey = "myProcess";         Map<String,Object> variables=new HashMap<>();         variables.put("usernames", "張三,李四,王五,趙六");         runtimeService.startProcessInstanceByKey(processDefinitionKey,variables);         System.out.println("流程啟動成功");     }

三、使用監聽器指定辦理組

指定步驟與個人任務指定一致。

四、總結

組任務及三種分配方式,

    1,在taskProcess.bpmn中直接寫 candidate-users=“小A,小B,小C,小D"

    2,在taskProcess.bpmn中寫 candidate-users =“#{userIDs}”,變數的值要是String的。

         使用流程變數指定辦理人

              Map<String, Object> variables = new HashMap<String, Object>();

              variables.put("userIDs", "大大,小小,中中");

    3,使用TaskListener介面,使用類實現該介面,在類中定義,

            //添加組任務的用戶

delegateTask.addCandidateUser(userId1);

delegateTask.addCandidateUser(userId2);

組任務分配給個人任務(認領任務),

     processEngine.getTaskService().claim(taskId, userId);

個人任務分配給組任務,

     processEngine.getTaskService(). setAssignee(taskId, null);

向組任務添加人員,

     processEngine.getTaskService().addCandidateUser(taskId, userId);

向組任務刪除人員,

     processEngine.getTaskService().deleteCandidateUser(taskId, userId);

個人任務和組任務存放辦理人對應的表,

act_ru_identitylink表存放任務的辦理人,包括個人任務和組任務,表示正在執行的任務

act_hi_identitylink表存放任務的辦理人,包括個人任務和組任務,表示歷史任務

區別在於,如果是個人任務TYPE的類型表示participant(參與者)

                   如果是組任務TYPE的類型表示candidate(候選者)和participant(參與者)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、手動拋出異常1.自定義無效名字異常: (1)編譯時異常,直接繼承Exception (2)運行時異常,直接繼承RuntimeException 舉例子:註意點:throws會向上拋出異常,跑到最上面的話,也就是到了main主方法了,就不要再拋了,使用try...catch....列印出來吧,當然 ...
  • 0.關於 動態規劃 是編程解題的一種重要手段。 年美國數學家 等人,根據一類多階段問題的特點,把多階段決策問題變換為一系列互相聯繫的單階段問題,然後逐個加以解決。與此同時,他提出瞭解決這類問題的“最優化原理”,從而創建瞭解決最優化問題的一種新方法: 動態規劃 。 動態規划算法 通常用於求解具有 某種 ...
  • GC 中文直譯垃圾回收,是一種回收記憶體空間避免記憶體泄漏的機制。 ...
  • 轉載清註明原文地址,謝謝。 OS:Windows 10 第一步,從Python官方下載安裝包 Windows端下載地址:https://www.python.org/downloads/windows/ Win端64位3.8.0安裝包:https://www.python.org/ftp/pytho ...
  • 磁力搜索嗅探器裝成BT ague-dht ague-dht 是一個磁力鏈接嗅探器,它偽裝成BT下載客服端,加入DHT網路,嗅探磁力鏈接.每秒發送1000條請求時,平均3秒收到1次帶有infohash的announce_peer請求;10次get_peer請求. 環境要求 需要JDK11,MAVEN3 ...
  • 測試的意義 人們針對一個具體問題,通過分析和設計,最後用編程語言寫出了一個程式,如果它通過了語言解釋器(編譯器)的檢查,可以運行了,那麼下一步的工作就是設法確認它確實滿足了我們需求。這篇文章就是討論怎麼確認程式是否滿足用戶提出的需求。 滿足需求,換言之就是功能正常,確認功能正常可以從以下幾個方面確認 ...
  • 這份資源是我經過多年積累才整理歸類出來,有很多電子書我覺質量還是非常高的,由於電子書太多我也是用業餘時間挑著看的,這麼多資源自己保存著也是浪費,就想著現在把資源分享出來,希望能真正幫到大家; 資源我都整理在網盤了,之前分享出來的鏈接沒過幾天就自動取消,我就在文章底部放了二維碼,需要的添加好友就行了, ...
  • 一、僅做瞭解 //用戶組的處理 public class TestUserGroup { private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine(); //創建用戶和用戶組 @Test public voi ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...