工作流無疑是一個熱門話題,以前的開發中一直不會接觸到這個層面,所以一直沒有來得及看到。現在由于工作需要開始接觸工作流,這里留下一個我學習的過程,提供一些好的資源和一些自己的體會,方便大家學習探討。
一、為什么使用工作流、工作流這個技術的現狀
出于習慣,每當我學習一個技術的時候,必須要知道為什么要學習它,它能給我帶來什么好處,了解了這個才能讓我決定是否使用,在什么時候使用。另外了解一下這個技術的現狀有助于從總體上把握這個技術。對于一個發展階段的技術和一個成熟的技術對待方式是不一樣的。
關于這點,參考這篇文章:http://www.joinwork.net/document/The%20State%20of%20Workflow2.htm
所有我看過的文章中,這篇文章最清晰的說明了我上邊的兩個問題,而且以問答的方式來寫的,適合從頭開始的人。
這篇文章的作者Tom Baeyens (jbpm工作流框架的作者)翻譯dinghong,感謝他們提供了一個好的文章。
二、工作流框架的選擇
由于開源的流行我們可以有更多的選擇,這給我們帶來了很多的方便,好處多多不用說了,但也給我們帶了了一些麻煩,用Java 的人都了解,百家爭鳴讓人眼花繚亂,一個重要的事情是選擇,哪一個適合自己,或者說你更喜歡哪一個。選擇也是一個難題。選擇的好能節省很多時間,少走彎路。
在這個問題上我沒有選擇,因為我不是這個方面的主要負責人,框架的選擇已經定下來了,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的教程中得到的,總結一下,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(結果)。
好了,到這里,工作流的一個概貌是出來了。在下邊的文章中會以OSWorkFlow為例來進入工作流的天地。