概述
Osworkflow是完全用java語言編寫的開放原始碼的工作流引擎,具有顯著的靈活性及完全面向有技術背景的用戶的特點。用戶可以根據自身的需求利用這款開源軟體設計簡單或是複雜的工作流。通過使用,用戶就可以把工作中心放在業務和規則的定義上,而不需通過硬編碼的方式實現一個Petri網或是一個有窮自動機。用戶可以以最小的代價把osworkflow整合到自己的程式中來。Osworkflow幾乎提供了所有用戶可能在實際流程定義中需要用到的工作流構成元素,如:環節(step)、條件(conditions)、循環(loops)、分支(spilts)、合併(joins)、角色(roles)等等。首先,在osworkflow中需要了解得最重要的概念是環節,每個工作流包含了多個環節,可以把環節想像成工作流中每一個重要的活動。每個環節可以有一些諸如“已完成”、“正在處理”、“已添加至處理佇列”、“未處理”等的狀態,設計工作流的人可以根據需要自己定義狀態。
在每個環節,動作被用戶指定為自動或手動地執行。每個動作執行後,都有一個結果(result)。結果決定了工作流的流轉方向:可以停留在同一環節,跳轉到另一環節,跳轉到一個分支,或者匯集到一個合併等。
最後兩個概念涉及用戶對業務流程的並發執行,分支把工作流分解為兩個並行的環節,合併則在用戶滿足一定條件後,把兩個並行的環節合併成一個。
動作的執行代表了業務流程的執行,每個動作都有一組預處理功能(pre-functions)和一組後處理功能(post-functions)。其作用正如讀者想像的那樣,一個在動作觸發之前執行,一個在動作觸發之後執行。一個簡單的例子是:可以在預處理功能中檢驗申請表格數據的正確性,而後在後處理貢功能中把經檢驗的數據保存至資料庫。
動作的執行結果可以是有條件的(conditional)或無條件的(unconditional)。對於有條件的結果,引擎將首先檢查是否條件被滿足,然後再交給工作流來處理。如果條件不滿足的話,引擎將進一步判斷下一個有條件結果是否得到滿足,以此類推,直到系統最終執行到無條件結果進行處理。
如果所有的條件結果都沒有得到滿足會如何呢?事實上,每個動作都強制要求具有唯一一個無條件結果。與此對應的,可以有多個有條件的結果。
業務規則常常在最終結果中帶有條件判斷,比如,“如果申請來自於一個老客戶,則流轉到環節1”或者“如果當前系統的用戶的角色是經理的話,直接流轉道最後一個環節”。
最後一個重要的概念是步驟狀態(process state),在osworkflow中,當前步驟狀態是所有當前環節狀態的集合。讀者可能會認為工作流在運行過程中只能有一個狀態,但現實的情況是:因為對分支和合併的支持,引擎能夠做到對環節的並發控制,因此工作流的當前狀態就可能出現:“等待風險分析及已核查財務歷史”的情況。
激活動作的用戶被順理成章地稱為觸發者(caller),每個環節都有一個所有者(owner),以代表在當前環節中負責執行動作的角色或用戶。
當用戶在環節中運轉流程的時候,已完成的環節被保存至歷史表中(history),用戶當前所處的環節成為當前環節(current steps)。
最後,在osworkflow中並不存在其他工作流引擎中所包含的工作項(workitem)的概念。這是因為osworkflow是“十分底層”的工作流實現,怎樣實現或定義工作項完全交由用戶來決定。筆者認為工作項的概念太過抽象,用業務數據來稱呼它或許更為貼切一些。