snaker工做流引擎

snaker工做流引擎學習記錄。app

  任務1: 完成一個完整的流程設計圖。學習

  任務2: 搞懂方法中的參數的做用以及使用場景。測試

  任務3: 寫一個會籤測試Demo。spa

    

 

  snaker中的會籤功能取決於節點中performType屬性的屬性值來決定是否產生多個相同的任務。設計

  performType的屬性只有兩個: ANY(表明多個參與者時,只要有一個參與者經過,則流程即可以繼而往下流轉)、ALL(表明多個參與者時,必須全部的參與者都必須經過,流程纔會往西繼續流轉)。code

  在寫會籤節點時,參與者是在哪裏添加的呢?orm

  參與者的設置方法在snaker官方文檔中有介紹,這裏我使用的是在代碼中動態添加一個參與者。blog

  如圖:文檔

    

  在設計圖中只有一個參與者,但只是一個標記,在流程數據構造的時候,會給每一個標記賦予對應的角色。get

  在設計圖時參與者的名稱必須和數據構造時給的標記是一致的,不然程序就會找不到對應到參與者,會報一個沒法執行下一步的錯誤。

  

		/** 流程數據構造開始 */
		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);

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

相關文章
相關標籤/搜索