OSWorkFlow流程設定檔詳解

來源:互聯網
上載者:User

OSWorkFlow流程設定檔詳解

AbstractWorkflow>>

osworkflow中有關工作流程流轉的所有核心代碼都在AbstractWorkflow中,BasicWorkflow就是派生自它,不過這個BasicWorkflow基本上沒做什麼事情。也許我們還可以從AbstractWorkflow派生自己的Workflow類以加入擴充功能,大概這也算是osworkflow所體現的一種靈活性了,即:允許對工作流程流轉的執行邏輯進行修改。AbstractWorkflow實現了Workflow介面,該介面包含了有關工作流程的核心方法,最重要的是doAction方法,AbstractWorkflow實現了該方法,後面會提及,其他還有一些getter和query method。

流程流轉的執行邏輯>>

當流程執行到的某個step時,可能有一個或多個action可供使用者選擇執行。一旦確定執行某個action後,我們需要調用AbstractWorkflow.doAction,並傳入流程id和action的id。以下是對doAction的執行邏輯的一個不太嚴緊的演算法描述:

-  根據流程id,獲得所有當前的step,這種情況往往發生在有split的時候,此時會有多個step等待執行;
-  根據傳入的action的id,檢查是否是global action;
-  若不是global action,則遍曆所有當前的step,對每個step的每個action調用isActionAvailable方法,檢查該action是否可用(記住step和action是一對多的關係);
-  所謂可用是指,通過執行passesConditions,逐個檢查action的condition:若是OR的關係,則有一個condition為真即為可用,AND關係則類推;
-  若action可用,則調用transitionWorkflow,這是流程流轉處理的關鍵區段;
 執行transitionWorkflow時:
 -  首先擷取當前step,存在有多個當前step的情況,比如split,此時擷取首個isAvailableAction為真的step;
 -  調用verifyInputs驗證輸入(如果action有validator的話);
 -  執行當前step的post function(因為該step即將結束);
 -  執行action的pre function;
 -  判斷當前step所屬的result中的所有condition是否滿足要求,判斷方法類似action的condition;
 -  一旦滿足,則擷取result的pre function和post function;
 -  否則即是unconditional result,擷取相應的pre function和post function;
 -  在沒有split和join的情況下
  -  會根據在result中指定的下一個step的id,建立一個新的step,作為當前的step;
  -  從current steps中移除原來的當前step,並添加到history steps中;
  -  如果新的step有pre function,則會馬上執行;
 -  執行result的post function;
 -  執行action的post function;
 -  若action是intial action,則將流程設定為activated狀態;
 -  若action是finish action,則將流程設定為completed狀態,返回true;
 -  尋找auto action,若有的話,則執行之,執行方法是調用doAction本身;
 -  返回false;
-  根據transitionWorkflow的返回值判斷流程是否結束;
-  若返回false,則調用checkImplicitFinish檢查是否存在implicit finish,即:當前沒有一個step的action可用時,就認為流程應該結束;

- 若存在split,則會建立多個新的step,並且在建立之前先執行split的pre function,在建立之後執行split的post function;
- 建立step的過程和上面描述的普通狀況相同:維護好current steps和history steps,並執行新的step的pre function;

- 若存在join,先結束當前step,並將該step添加至history steps和join steps;
- 尋找history steps,對每個已完成的step,查看是否在其result或unconditional result中有join一項,若有則加入join steps中;
- 檢查join是否已經滿足:可以使用Bean Shell,在xml定義檔案的join節點中,通過引用一個名為“jn”的特殊變數來指定join的滿足條件,jn記錄了有關join的關鍵資訊;
- 若條件滿足,則執行join的pre function,維護好history steps,並建立下一個step,然後執行join的post function;

- 對於條件迴圈的情況,可以通過將result的某個action的下一個step指定為自身來加以實現,這隻是在xml定義檔案中做文章,流程執行邏輯無需做特殊處理;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.