天天看點

1-Osworkflow基礎概念

OSWorkflow概況

OSWorkflow是一個靈活的工作流引擎,可嵌入到企業應用程式中。它提供了許多的持久化API支援包括: EJB, Hibernate, JDBC和其它。OSWorkflow還可以與 Spring內建。

在商用和開源世界裡,OSWorkflow 都不同于這些已有的工作流系統。最大不同在于 OSWorkflow 有着非常優秀的靈活性。

OSWorkflow的優勢

OSWorkflow 給你絕對的靈活性。OSWorkflow 被認為是一種“低級别” 工作流實 現。與其他工作流系統能用圖示表現“Loops(回路)”和“Conditions(條件)”相比,OSWorkflow 隻是手工“編碼(Coded)”來實作的。但這并不能說實際的代碼是需要完全手工編碼的,腳本語言能勝任這種情形。OSWorkflow 不希望一個非技術使用者修改工作流程,雖然一些其他工作流系統提供了簡單的 GUI 用于工作流編輯,但像這樣改變 工作流,通常會破壞這些應用。是以,進行 工作流調整的最佳人選是開發人員,他們知道該怎麼改變。不過,在最新的版本中,OSWorkflow 也提供了 GUI 設計器來協助工作流的編輯。

OSWorkflow 基于有限狀态機概 念。每個 state 由 step ID 和 status 聯合表現(可簡單了解為 step 及其 status 表示有限狀态機的 state)。一個 state 到另一 state 的 transition 依賴于 action 的發生,在工作流生命期内有至少一個或多個活動的 state。這些簡單概念展現了 OSWorkflow 引擎的核心思想,并允許一個簡單 XML 檔案解釋工作流業務流程。

OSWorkFlow核心概念

概念定義

步 驟(Step) 一個 Step 描述的是工作流所處的位置。可能從一個 Step Transtion(流轉)到另外一個 Step,或者也可以在同一個 Step 内流轉(因為 Step 可以通 Status 來細分,形成多個State)。一個流程裡面可以多個Step。

狀态(Status) 工作流 Status 是用來描述工作流程中具體Step(步驟)狀态的字元串。OSWorkflow 的有 Underway(進行中)、Queued(等候進行中)、Finished(完成)三種 Status。一個實際State(狀态)真正是由兩部分組成:State = (Step + Status) 。

流轉(Transtion) 一個State到另一個State的轉移。

動 作(Action) Action 觸發了發生在 Step 内或 Step 間的流轉,或者說是基于 State 的流轉。一個 step 裡面可以有多個Action。Action 和Step 之間的關系是,Step 說明“在哪裡”,Action 說明“去哪裡”。 一個 Action 典型地由兩部分組成:可以執行此Action(動作)的 Condition(條件),以及執行此動作後的 Result(結果)。

條件(Condition)類似于邏輯判斷,可包含“AND”和“OR”邏輯。比如一個請假流程中的“本部門審批階段”,該階段利用“AND”邏輯,判斷流程狀态是否為等候進行中,以及審批者是否為本部門主管。

結 果(Result) Result 代表執行Action(動作)後的結果,指向新的 Step 及其 Step Status,也可能進入 Split 或者 Join。Result 分為兩種, Contidional-Result (有條件結果),隻有條件為真時才使用該結果,和 Unconditional-Result(無條件結果),當條件不滿足或沒有條件時使用該結果。

分離/連接配接(Split/Join)流程的切分和融合。很簡單的概念,Split 可以提供多個 Result(結果);Join 則判斷多個 Current Step 的态提供一個 Result(結果)。

步驟、狀态和動作(Step, Status, and Action)

工作流要描述步驟(Step)、步驟的狀态(Status)、各個步驟之間的關系以及執行各個步驟的條件和權限,每個步驟中可以含有一個或多個動作(Action),動作将會使一個步驟的狀态發生改變。

對于一個執行的工作流來 講,步驟的切換是不可避免的。一個工作流在某一時刻會有一個或多個目前步驟,每個目前步驟都有一個狀态值,目前步驟的狀态值組成了工作流執行個體的狀态值。一 旦完成了一個步驟,那麼這個步驟将不再是目前步驟(而是切換到一個新的步驟),通常一個新的目前步驟将随之建立起來,以保證工作流繼續執行。完成了的步驟的最終狀态值是用Old-Status屬性指定的,這個狀态值的設定将發生在切換到其他步驟之前。Old-Status的值可以是任意的,但在一般情況下,我們設定為Finished。

切 換本身是一個動作(Action)的執行結果。每個步驟可以含有多個動作,究竟要載入哪個動作是由最終使用者、外部事件或者Tiggerd的自動調用決定 的。随着動作的完成,一個特定的步驟切換也将發生。動作可以被限制在使用者、使用者組或目前狀态。每一個動作都必須包含一個Unconditional Result和0個或多個Conditional Results。

是以,總體來說,一個工作流由多個步驟組成。每個步驟有一個目前狀 态(例如:Queued, Underway or Finished),一個步驟包含多個動作。每個步驟含有多個可以執行的動作。每個動作都有執行的條件,也有要執行的函數。動作包含有可以改變狀态和目前 工作流步驟的results。

結果、分支和連接配接(Results, Joins, and Splits)

無 條件結果(Unconditional Result) 對于每一個動作來講,必須存在一個Unconditional Result。一個result是一系列指令,這些指令将告訴OSWorkFlow下一個任務要做什麼。這包括使工作流從一個狀态切換到另一個狀态。

有條件結果(Conditional Result) Conditional Result是Unconditional Result的一個擴充。它需要一個或多個Condition子标簽。第一個為true的Conditional(使用AND或OR類型),會指明發生切 換的步驟,這個切換步驟的發生是由于某個使用者執行了某個動作的結果導緻的。

三種不同的Results(conditional or unconditional) 一個新的、單一的步驟和狀态的組合。一個分裂成兩個或多個步驟和狀态的組合。将這個和其他的切換組合成一個新的單一的步驟和狀态的組合。每種不同的 result對應了不同的xml描述,你可以閱讀http://www.opensymphony.com/osworkflow/workflow_2_7.dtd

1-Osworkflow基礎概念

,擷取更多的資訊。注意:通常,一個split或一個join不會再導緻一個split 或 join的發生。

自動步驟(Auto actions)

有 的時候,我們需要一些動作可以基于一些條件自動地執行。為了達到這個目的,你可以在action中加入auto="true"屬性。流程将考察這個動作的 條件和限制,如果條件符合,那麼将執行這個動作。 Auto action是由目前的調用者執行的,是以将對該動作的調用者執行權限檢查。

整合抽象執行個體(Integrating with Abstract Entities)

建 議在你的核心實體中,例如"Document" 或 "Order",在内部建立一個新的屬性:workflowId。這樣,當新的"Document" 或 "Order"被建立的時候,它能夠和一個workflow執行個體關聯起來。那麼,你的代碼可以通過OSWorkflow API查找到這個workflow執行個體并且得到這個workflow的資訊和動作。

工作流執行個體狀态(Workflow Instance State)

有 的時候,為整個workflow執行個體指定一個狀态是很有幫助的,它獨立于流程的執行步驟。OSWorkflow提供一些workflow執行個體中可以包含的 "meta-states"。這些"meta-states"可以是CREATED, ACTIVATED, SUSPENDED, KILLED 和 COMPLETED。當一個工作流執行個體被建立的時候,它将處于CREATED狀态。然後,隻要一個動作被執行,它就會自動的變成ACTIVATED狀态。 如果調用者沒有明确地改變執行個體的狀态, 工作流将一直保持這個狀态直到工作流結束。當工作流不可能再執行任何其他的動作的時候,工作流将自動的變成COMPLETED狀态。

然而,當工作流處于ACTIVATED狀态的時候,調用者可以終止或挂起這個工作流(設定工作流的狀态為KILLED 或 SUSPENDED)。一個終止了的工作流将不能再執行任何動作,而且将永遠保持着終止狀态。一個被挂起了的工作流會被當機,他也不能執行任何的動作,除非它的狀态再變成ACTIVATED。

  • osworkflow.xml:這個檔案是設定流程是否存在資料庫或存在記憶體,前面的內容是存在MS SQL Server的寫法。
  • leave.xml:請假流程寫在這個檔案,這也是osworkflow的重點之一。
  • workflows.xml:指定系統啟動時要載入那些流程。

這裡針對leave.xml做些說明…

  • initial-actions:每個流程都至少需定義一個initial-actions,這是流程的起點。
  • action:導緻流程變動的動作,每個action都有個編號,且不能重複。
  • step:雖然它的名稱是步驟,似乎它會有動作? 其實將它視為流程位置可能比較恰當,osworkflow真正的動作在action發生。
  • result: 執行動作後的結果,result有兩種conditional-result和unconditional-result,每個result一定有 unconditional-result,當conditional-result的條件都不滿足時,就執行unconditional- result。
  • status:流程在某個action時的狀態。
  • old-status:流程執行某個action後的狀態。
  • caller:這是OSWorkflow的保留字,可取得呼叫此工作流的user,即Workflow workflow = new BasicWorkflow(caller); 在資料庫中會記錄於Table OS_HISTORYSTEP如下:

繼續閱讀