snaker工作流引擎學習記錄。
任務1: 完成一個完整的流程設計圖。
任務2: 搞懂方法中的參數的作用以及使用場景。
任務3: 寫一個會簽測試Demo。
snaker中的會簽功能取決於節點中performType屬性的屬性值來決定是否產生多個相同的任務。
performType
的屬性只有兩個: ANY(代表多個參與者時,只要有一個參與者通過,則流程便可以繼而往下流轉)、ALL(代表多個參與者時,必須所有的參與者都必須通過,流程才會往西繼續流轉)。
在寫會簽節點時,參與者是在哪里添加的呢?
參與者的設置方法在snaker官方文檔中有介紹,這里我使用的是在代碼中動態添加一個參與者。
如圖:
在設計圖中只有一個參與者,但只是一個標記,在流程數據構造的時候,會給每個標記賦予對應的角色。
在設計圖時參與者的名稱必須和數據構造時給的標記是一致的,否則程序就會找不到對應到參與者,會報一個無法執行下一步的錯誤。
/** 流程數據構造開始 */ Map<String, Object> params = new HashMap<String, Object>(); String falg= ShiroUtils.getOrgCode(); String falg1= ShiroUtils.getParentOrgCode(falg); String falg2= ShiroUtils.getParentOrgCode(falg1); String falg3= ShiroUtils.getParentOrgCode(falg2); params.put("apply.operator",SecurityUtil.getApprover(prop.get("falg"), falg)); params.put("cwh.operator", SecurityUtil.getApprover(prop.get("falg"), falg1)); params.put("sybAndJdxz.operator",SecurityUtil.getApprover(prop.get("falg"), falg2)); params.put("mzj.operator", SecurityUtil.getApprover(prop.get("flag"), falg3)); /** 流程數據構造結束 */
數據流程構造的時候給了他一個角色,也就是參與者。接下來在會簽節點對應的方法中再為它動態的添加一個參與者。
engine.task().addTaskActor(taskId, 1 ,SecurityUtil.getApprover(prop.get("falg"), falsg4));
這樣會簽需要的參與者就搞定了。
然后就是決策,每個節點的返回結果無非就是同意/不同意,通過/不通過 等等。。這個結果可以以變量的形式來儲存,以${result}這種形式返回給流程,告訴它這個節點的最后決定是什么,是否繼續往下流轉。
if(result.equals("甲同意") && result.equals("乙同意")){ setAttr("result", "甲乙同意"); }else{ setAttr("result", "甲乙不同意"); }
在開始並執行流程的時候需要實現這樣一個方法,其中有三個參數,分別代表任務ID、當前操作人員ID(當前登錄人員)、參與者列表集合(流程數據構造時的集合)
/** * 根據任務主鍵ID,操作人ID,參數列表執行任務 * @param taskId 任務主鍵ID * @param operator 操作人主鍵ID * @param args 參數列表 * @return List<Task> 任務集合 */ public List<Task> executeTask(String taskId, String operator, Map<String, Object> args);
寫過的東西記錄下來,方便后用。