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