0 引言
工作流管理技術是一種正在快速發展的技術,正在被越來越多的企業所應用。企業的日常活動中,約有70%是屬于流程類活動,如訂單出貨流程、生產流程、企業內各類申請表單、公文簽審、信息傳遞與簽收、公司各類支出與收付等。由于在Internet上開展電子商務的廉價與方便性,促進了企業之間的交流,擴大了企業視野,在這種環境下,工作流管理系統就暴露出了很多不足之處:缺乏柔性,不能及時響應變化和相互之間缺乏互操作等,這些顯然不能滿足現代企業業務流程管理的要求。
面向服務體系結構(Service-Oriented Architecture,SOA)的出現,為解決上述難題提供了契機。SOA是為解決在Internet環境下業務集成的需要,通過連接能完成特定任務的獨立功能實體實現的一種軟件架構。把SOA加入到工作流系統中,可以很好地解決現有工作流管理系統的柔性缺乏、不能及時響應變化和相互之間互操作性差等缺點,極大地提高了工作流系統的應用范圍,促進工作流管理系統的發展。因此,研究并實現基于SOA的工作流管理系統具有重要的現實意義和廣闊的應用前景。文中設計開發的工作流管理系統應用于某電力公司設備管理系統,實際應用表明,設計的工作流管理系統改善了電力公司的內外部流程,提高了工作效率,達到了預期的效果。
1 基于SOA的工作流系統設計
1.1 工作流系統結構設計
設計的工作流系統結構如圖1所示。
圖1 工作流系統結構示意圖
其中,流程定義存儲服務負責提供保存流程定義文件的服務;流程實例存儲服務保存流程實例狀態數據;工作流引擎服務負責從流程定義存儲服務處獲得流程定義,解釋后執行,并通過流程實例存儲服務保存流程實例數據,通過調用其它服務完成流程活動,與其它引擎服務協作可進行流程遷移或并行執行,用戶則通過用戶界面與工作流引擎進行交互。
在基于SOA的工作流管理系統中,工作流的使用不再限于它的位置,任務由服務完成。只要為服務定義標準接口,它們就能被任何依據標準的應用訪問到。由于一個流程不再限制于工作流引擎的位置,流程能夠在任何地方設計、存儲和執行。用戶能夠選擇分布在網絡環境中的任何可獲得的工作流引擎服務來開始執行一個流程。在執行過程中,可以在不同引擎服務間遷移來達到負載平衡,降低不同應用和引擎服務間的通信費用,易于從錯誤中恢復,甚至一個流程同時在多個引擎服務上執行,以獲得更高的效率。可見,基于SOA的工作流管理系統具有分布、高效、容錯、負載平衡等優點,非常適應復雜信息環境的需求。
1.2 系統模塊及接口設計
整個工作流系統由建模工具、客戶端、模型分析、工作流引擎、SOA服務管理模塊組成。建模工具用來進行工作流過程建模。模型建立后使用模型分析工具對模型進行完整性、約束、時間可行等方面的檢查,檢查后在數據庫中建立對應記錄。工作流引擎將數據庫中的記錄實例化。客戶可以使用狀態查詢某個實例的狀態,并可以控制或修改相應的流程。客戶使用瀏覽器作為客戶端,通過工作流引擎提供的功能完成對應的功能。SOA服務管理可細分為Web服務管理和Web服務注冊。Web服務管理主要是將已有的Web服務組合,形成從工作流活動到Web服務的對應關系,供客戶使用。Web服務注冊主要是對Web服務進行注冊,并由Web服務管理模塊進行管理。
工作流聯盟(Workflow Management Coalition,WFMC)給出了5類接口,結合本系統的需要,將其5類接口細化為6類接口,如圖2所示。
圖2 接口示意圖
(1)接口1:工作流服務和工作流建模工具。
(2)接口2:工作流服務和客戶應用之間的接口,客戶端使用瀏覽器,而客戶應用使用Web服務技術,所以,可以使用Java提供的標準接口。
(3)接口3:工作流引擎和直接調用的應用程序之間的接口,即Web服務與工作流引擎之間的接口。
(4)接口4:工作流管理系統之間的互操作接口,細化為對數據庫操作的事務。各模塊并不直接調用,使用對數據庫的事務技術來進行互操作。
(5)接口5:工作流服務和工作流管理工具之間的接口,細化為狀態查詢與數據庫的實時讀操作。
(6)接口6:單個Web服務與Web服務管理系統之間的接口。
其中,接口1為在不同物理或電子介質之間傳遞過程定義的信息提供了交互的形式和API調用;接口2定義了通信建立、工作流定義操作等功能;接口3激活應用程序的API函數應覆蓋的幾個方面的功能;接口4通過提供大量完成工作流執行服務之間需要的API來實現工作流引擎互操作,例如,2個工作流執行服務之間的直接調用或者通過網關函數;接口5主要實現對工作流的管理和監視;接口6實現工作流活動自身的管理,實現業務重組之類的功能。
2 SOA服務與工作流的整合
企業內部所有應用功能都是以Web服務的方式提供的,方便用戶需求改變時的業務重組。同時,工作流引擎在進行調度的時候,采用(Simple Object Access Protocol,SOAP)協議來實現工作流引擎和Web服務之間的交互。在Web服務與工作流之間交互時通過Web服務管理器,做到邏輯上的獨立性。為此,發布Web服務時使用標準的Web服務描述語言(WSDL),同時,采用SOAP代理來實現SOAP消息的生成和傳送。整合的整個系統架構如圖3所示。
圖3 SOA與工作流整合系統架構示意圖
系統的工作原理及流程可以從3個方面來描述:
首先是服務定義階段,在該階段,根據功能需求分析對應Web服務,使用WSDL來定義。WSDL和SOAP一起構成了Web服務的核心結構單元。WSDL基于XML格式,用來描述Web服務。它描述了Web服務可以執行的操作以及Web服務可以發送或接收的消息格式。WSDL文檔可以看成是客戶端和服務器之間的一個協約。使用WSDL工具可以自動處理這個過程,幾乎不用手工編寫代碼就能夠讓應用程序整合新的服務。因此,WSDL是Web服務體系結構的基礎,因為它提供了一個通用語言,用來描述服務和整合這些服務的平臺。由于WSDL文件能夠導入其它的WSDL文件,因此,總有可能發生名字沖突的時候。所以,最后注冊的WSDL文件需要在它們的
其次是流程定制階段,在工作流定制的過程中可使用流程定制工具,它提供了友好、簡單的圖形化界面,以支持拖放的方式實現工作流定制。一個流程是由許多的活動組成,每個活動表示一個要執行的功能,該功能的執行者就叫做參與者。一個參與者有2個可能的選項:Web服務和角色。如果是Web服務,用戶選擇企業WSDL數據庫中的某一Web服務;如果是角色,僅僅需要指定角色的名字。或者同時指定服務與角色。一個典型的Participant元素的定義如下:
最后是流程執行階段,當執行到某個活動需要請求Web服務時,工作流引擎發送服務請求信息,如Web服務的名字,給Web服務管理器,管理器通過讀取并解析在流程數據庫中存儲的工作流描述文檔(WSDL),可以得到包括Web服務名稱、操作名稱、操作所需的入口參數等信息。將這些信息傳給SOAP代理,由SOAP代理執行SOAP調用。
3 基于SOA的工作流管理系統EleFlow的實現
3.1 工作流引擎設計
工作流引擎作為工作流管理系統的核心部分,提供對系統有決定作用的根據角色、分工和條件的不同決定信息傳遞路由、內容等級等核心解決方案。如果一個工作流系統缺乏功能強大的引擎,勢必變得容易出錯。在前面設計的基礎上,對系統工作流引擎與系統的具體實現進行了設計。該引擎可以劃分為幾個模塊,這些模塊涵蓋了引擎的使用、配置、流程定義、查詢和運行時等方面內容,通過這些模塊可以對整個系統進行調度和資源協調。其中,包括對工作流引擎核心模塊、工作流引擎配置模塊、工作流引擎定義模塊、工作流引擎異常處理模塊、工作流引擎的數據庫結構進行了設計。
WorkflowModule模塊是引擎的核心,用戶與工作流系統的大部分交互內容都在這部分模塊內實現,它定義了最常用的接口、類和異常。Workflow接口是一個最基本的接口,通過與它交互,用戶幾乎可以完全使用EleFlow的功能,包括工作流調度和查詢、工作流定義管理和設置工作流配置信息等。ConfigModule模塊是工作流引擎配置模塊,與EleFlow的配置相關,定義了一個類DefaultConfiguration,這個類實現了Configuration接口。LoaderModule模塊是工作流引擎定義模塊,與工作流定義密切相關,包含了與工作流定義中對應元素的實現類,如果在工作流引擎運行時需要了解指定的動作、步驟的狀態、名字等信息時,這些元素的描述會起到很大作用。ExceptionModule模塊負責處理工作流引擎的異常。工作流的錯誤包含兩種錯誤:一是流程錯誤,如活動的執行者不存在,活動的應用程序定義錯誤等;二是系統的錯誤,如網絡不通,數據庫系統異常。對于工作流引擎控制器來說,前類異常屬于無法處理的錯誤,只能通知錯誤的存在;后者是工作流引擎控制器可以處理的錯誤,工作流引擎控制器可以進行容錯處理,例如:在數據庫恢復后自動重新建立連接。執行機對可能出現的錯誤進行編碼,并附有對應的描述信息。工作流引擎所使用的數據表主要是用來存儲引擎調用時所需的數據,包括當前步驟數據和歷史步驟數據。
3.2 系統與外部應用交互的實現
在EleFlow中,函數function是用來定義(引用)并執行外部的商業邏輯和服務,實現EleFlow與外部具體的應用之間交互。當系統有額外的需求和功能,例如處理“角色”、“任務分配”、“提交任務”等諸如此類的操作,就擴展function接口。
所有的function實現類都必須實現這個FunctionProvider接口中execute方法,而且能夠處理的信息也全部來自這個方法中的3個參數:
(1)transientVars:最為核心的參數,記錄非常重要的一些對象,比如WorkflowContext,WorkflowEntry,輸入參數等。
(2)args:存儲了流程定義里的參數,如00l。
(3)ps:PropertySet對象,記錄了流程實例所需要保存的數據,可以理解成EleFlow所描述的流程相關數據。
3.3 系統的訪問控制實現
工作流管理系統對安全性要求較高,為了達到要求,必須做到充分的安全控制。訪問控制的目的是保護信息資源不被未授權用戶瀏覽或修改,從而實現數據的保密性和完整性。因此,訪問控制技術對解決工作流系統安全問題起著非常重要的作用。為了實現這一目標,工作流系統訪問控制機制應當能夠滿足兩方面的需求:一是用戶選擇,即能夠在一個活動實例被激活后選擇合適的用戶來完成;二是實現活動實例與用戶權限的同步,當一個用戶試圖完成工作列表中的某項工作時,能夠判斷該用戶是否為合法用戶,為合法用戶分配必要的權限,并在工作完成后收回分配的權限。
3.4 實際應用
下面是基于以上方法設計的某電力公司設備管理系統,具體設計與實現如下。
3.4.1 任務數據錄入
數據錄入界面如圖4所示。
圖4 設備申請錄入界面
該頁面主要錄入設備申請的相關信息,后臺程序操作如下:
(1)創建一個Workflow對象。
BasicWorkflow workflow=new BasicWorkflow("caller");
(2)準備工作流相關參數。
Map args=new HashMap();
args.put("owner",caller);
(3)實例化一個工作流。
long id=workflow.initialize("applyequipment",0,args);
(4)處理業務數據(spring實現)。
(5)工作流狀態改變。
workflow.doAction(id,001,args);
3.4.2 獲取工作流列表
設備審批過程應根據登錄用戶的角色不同而顯示不同的數據,如圖5所示。
圖5 流程審批界面
當部門管理用產登錄的時候無法看到設備管理用戶的數據。
在后臺程序中,通過WorkflowExpressionQuery進行符合條件的查詢,代碼如下(片段):
(1)符合當前條件的步驟。
(2)屬于哪個工作流流程(本系統有兩處用到工作流,還有設備報修流程,所以有兩個流程配置文件,需要區分當前工作流實例屬于哪個流程)。
(3)實例是否存在。
(4)進行復合查詢,上述條件為and關系。
4 結語
設計實現了基于SOA的工作流管理系統,并在長春某電力公司設備管理中得到了成功應用。結果表明,該系統的應用基本消除了企業的“信息孤島”,提高了工作效率,為企業全面信息化打下良好的技術基礎。
核心關注:拓步ERP系統平臺是覆蓋了眾多的業務領域、行業應用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業務管理理念,功能涉及供應鏈、成本、制造、CRM、HR等眾多業務領域的管理,全面涵蓋了企業關注ERP管理系統的核心領域,是眾多中小企業信息化建設首選的ERP管理軟件信賴品牌。
轉載請注明出處:拓步ERP資訊網http://www.guhuozai8.cn/
本文標題:基于SOA的工作流管理系統設計