精雕細琢工作流的狀態管理


以有限狀態機為原理的工作流引擎,就是通過工作流狀態的改變來達到流程的流轉,因此工作流系統中的各種狀態概念顯然很重要。

首先我們來看,工作流引擎在給業務流程建模的時候,將一個業務處理的場所定義成一個步驟節點,然后通過處理業務的時候,"提交業務處理結果"這樣的動作來達到流程的流轉。流程流轉到哪個下一步驟,通過動作結果連線來導向。

工作流系統發生一次流轉,工作流狀態就會發生一次改變,即有限狀態機中的狀態升遷,流程實例從一種狀態升遷到另一種狀態是通過執行動作來完成的。

通常我們會理解發生一次流轉,是從A步驟--》X步驟,但如果一次流轉是 A步驟--》A步驟,原地踏步,好象沒有發生流轉,究竟發生沒有發生流轉呢?從工作流的狀態概念來理解,一定是發生了流轉。

工作流狀態 = 當前步驟 +當前步驟的狀態

工作流發生一次流轉,使得流程狀態發生一次升遷,當A步驟--》X步驟,步驟發生了變化,狀態肯定升遷了。當A步驟--》A步驟,A步驟的狀態一定是改變了,否則就沒有意義了。A步驟--》A步驟也需要通過執行一個動作來完成,如果執行后,A步驟的狀態也未發生改變,哪就不需要設計這個動作,可以通過只保存業務模塊的業務數據來完成。

在一個工作流實例的生命周期內通常有一個或者多個活動的狀態,單線運行的,就一個當前步驟+當前步驟的狀態。當有並行節點的時候,就會有多個當前步驟+當步驟的狀態。

步驟的狀態,我們可以預設幾種狀態,步驟在進行中,等候處理中,完成,返回處理。 這幾種狀態和業務無關,純粹只描述步驟的狀態。
當A步驟--》A步驟 步驟的狀態可以在這幾個狀態中改變。如當開始進入A步驟的時候,是進行中,當需要處理的事情太多,升遷到等候處理,當離開A步驟時,步驟的狀態是完成,下一個步驟為進行中。因此我們在流程定義的時候,進入步驟的狀態定義為進行中,離開定義為完成,便於我們更容易理解流程的流轉,以實際的業務處理無關。


流程實例狀態:創建,激活,掛起,終止,完成,這是工作流引擎中另外一個重要的概念,是描述流程實例的狀態。
創建:流程實例剛創建的時候。
激活:流程正常流轉時候的實例狀態
掛起:當業務需要,暫停此業務的辦理時,由管理員或者有權限的管理用戶來執行掛起流程。當其它問題處理完畢,需要繼續執行此流程的流轉時候,可以恢復到激活,也可以直接就終止掉。
終止:當業務發生問題,或者異常的時候,有管理員或有權限的用戶來直接終止掉此流程。終止后的流程不能再恢復成正常的繼續流轉。
完成:業務流程辦理完畢,走到盡頭了流程實例的狀態。


當流程實例狀態為掛起,流程實例就不能再發生流轉了,同時,任務也不能繼續執行,任務的狀態也為掛起。等流程實例狀態恢復后,任務才能繼續執行。要知道在工作流系統中任務的完成,是由執行流程的動作來完成的,也即提交動作上掛接的業務模塊來完成任務的。因此,工作流實例狀態為掛起,任務也為掛起,工作流實例恢復后,任務也恢復到待執行,工作流實例終止后,任務也異常終止,工作流實例正常完成,實例關聯的所有任務也正常完成了。


於細微之處體現成敗,嚴謹這些工作流的狀態管理彰顯工作流軟件產品的品質。

 


免責聲明!

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



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