snaker工作流引擎


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);

  寫過的東西記錄下來,方便后用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM