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