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定義文件里做文章,流程運行邏輯無需做特殊處理。 


免責聲明!

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



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