歐陽廣津,武 彤
(貴州大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院,貴州 貴陽 550000)
近年來,隨著Internet技術(shù)的發(fā)展,電子化辦公技術(shù)逐漸走進(jìn)人們的工作和學(xué)習(xí)中。相對應(yīng)的,電子化辦公中的業(yè)務(wù)流程是復(fù)雜多變的,常見的解決策略是由相應(yīng)的開發(fā)人員開發(fā)出針對該部門辦公流程的系統(tǒng)。然而,隨著時間的推移和部門的工作流程的改變,電子化辦公中存在的問題也逐漸暴露出來,當(dāng)業(yè)務(wù)工作流程發(fā)生變化之后,開發(fā)的電子辦公系統(tǒng)無法處理變化之后的流程。通過統(tǒng)計發(fā)現(xiàn),之前開發(fā)的電子辦公系統(tǒng)是根據(jù)當(dāng)時的業(yè)務(wù)流程而定制開發(fā)的,由客戶提出相應(yīng)的需求,開發(fā)人員對需求進(jìn)行編碼,然而,當(dāng)業(yè)務(wù)流程發(fā)生變動時,電子化辦公的使用人員缺少系統(tǒng)整合和升級系統(tǒng)的能力,這就嚴(yán)重影響了系統(tǒng)的生命周期。因此,傳統(tǒng)的電子化辦公流程開發(fā)方式已經(jīng)不能滿足當(dāng)前業(yè)務(wù)發(fā)展的需要和后期的更改,這就要求人們在協(xié)同辦公應(yīng)用系統(tǒng)中,能夠?qū)?fù)雜的工作流程從業(yè)務(wù)邏輯中剝離出來,并且在后期可以由用戶根據(jù)自己的需求和變化進(jìn)行更改,而不是由開發(fā)人員設(shè)計工作流程[1]。
文中以JBPM中的工作流技術(shù)為例,首先對JBPM進(jìn)行相應(yīng)的介紹,包括系統(tǒng)架構(gòu)、工作流程及其不足之處,并對不足之處進(jìn)行改進(jìn),然后將改進(jìn)后的JBPM應(yīng)用在綜合信息服務(wù)管理平臺中。
在20世紀(jì)70年代中期辦公自動化領(lǐng)域中,工作流技術(shù)逐漸興起,但對于工作流的研究,和工作流思想的出現(xiàn),則應(yīng)該追溯至更早的時期。隨著計算機(jī)技術(shù)的迅速發(fā)展和互聯(lián)網(wǎng)產(chǎn)業(yè)的興起,在20世紀(jì)90年代后,工作流系統(tǒng)的開發(fā)進(jìn)入一個新的階段。大量的工作流技術(shù)應(yīng)用于電信業(yè)、金融業(yè)、制造業(yè)、辦公自動化領(lǐng)域等[2]。
進(jìn)入21世紀(jì),隨著計算機(jī)技術(shù)的快速發(fā)展,工作流技術(shù)的定義也越發(fā)清晰。工作流聯(lián)盟對工作流做出的定義:工作流是能夠在運(yùn)行過程中,實施完全或者部分自動執(zhí)行的經(jīng)營過程。它可以在不同的任務(wù)執(zhí)行者之間,通過一系列規(guī)定,文檔,或者定義自動的進(jìn)行任務(wù)傳遞與執(zhí)行。簡單的說,工作流就是用一個個任務(wù)的節(jié)點,分支節(jié)點,判斷節(jié)點,抽象地表示業(yè)務(wù)流的處理過程。工作流管理系統(tǒng)本質(zhì)上是一個軟件系統(tǒng),然而它不同于一般的軟件系統(tǒng)。常見的軟件系統(tǒng)主要是根據(jù)用戶需求進(jìn)行開發(fā)的軟件系統(tǒng),包含對數(shù)據(jù)庫的增刪查改等功能,而工作流管理系統(tǒng)的主要功能是設(shè)計和管理工作流,然后將預(yù)先設(shè)計好的工作流邏輯放入工作流管理系統(tǒng)中,從而執(zhí)行相應(yīng)的工作流實例。目前主流的工作流管理系統(tǒng)有JBPM、OpenWFE、Osworkflow[3]。
JBPM是一個靈活的基于J2EE、開源的輕量級工作流管理系統(tǒng),采用XML結(jié)構(gòu)的語言作為流程描述語言JPDL,是軟件開發(fā)人員和業(yè)務(wù)需求分析人員之間的橋梁。JBPM具有雙重特點:它可以根據(jù)用戶的身份,分別對業(yè)務(wù)人員和開發(fā)人員提供不同的流程管理方式[4]。
業(yè)務(wù)流程允許用戶通過使用流程圖描述需要執(zhí)行的步驟來實現(xiàn)建模業(yè)務(wù)的目標(biāo)。這樣大大提高了業(yè)務(wù)邏輯的可見性和靈活性,從而使業(yè)務(wù)用戶更加容易理解,并且更易于監(jiān)視。
JBPM的核心模塊是ProcessEngine,它是一個由Java語言進(jìn)行編寫的輕量級,并且可以對其進(jìn)行擴(kuò)展的工作流引擎模塊,允許用戶使用最新的BPMN 2.0規(guī)范執(zhí)行業(yè)務(wù)流程。JBPM的核心是在Java環(huán)境下進(jìn)行開發(fā)的,所以它可以在任何安裝了Java環(huán)境的平臺上運(yùn)行,也可以作為服務(wù)或者應(yīng)用嵌入到其他應(yīng)用程序中。在核心引擎之上,提供了許多功能和工具來支持如下整個生命周期中的業(yè)務(wù)流程[5]:
(1)通過基于IBM開放源代碼,Java的可擴(kuò)展平臺的Eclipse編輯器,可以支持通過拖拽的方式在圖形上對相應(yīng)的業(yè)務(wù)流程進(jìn)行創(chuàng)建。
(2)基于JPA/JTA的可插拔持久性和事務(wù)。
(3)基于WS-HumanTask的可插拔人工任務(wù)服務(wù),用于包含需要由使用者執(zhí)行的任務(wù)[6]。
(4)JBPM管理控制臺可以對運(yùn)行中的流程實例、任務(wù)報告、任務(wù)列表進(jìn)行管理。
(5)歷史記錄(用于查詢/監(jiān)視/分析)。
(6)與Seam、Spring、OSGi等進(jìn)行集成。
JBPM的系統(tǒng)架構(gòu)如圖1所示。
圖1 JBPM系統(tǒng)架構(gòu)
2.1.1 工作流引擎
工作流引擎的主要功能是對任務(wù)進(jìn)行分配和調(diào)度,主要包括任務(wù)分配者和調(diào)度者[7]。
任務(wù)分配者管理一系列的活動任務(wù),當(dāng)一個任務(wù)節(jié)點完成后,任務(wù)分配者通過調(diào)度算法和準(zhǔn)則計算該節(jié)點的下一個執(zhí)行節(jié)點。
任務(wù)調(diào)度者根據(jù)任務(wù)分配者的結(jié)果,將任務(wù)傳遞給處理程序。
2.1.2 流程定義工具
JBPM流程定義工具主要是通過安裝eclipse插件,在eclipse中畫好相應(yīng)的流程圖,系統(tǒng)自動將其打包,并將后綴名為.jar格式的壓縮包上傳至工作流引擎所在的計算機(jī),引擎讀取上傳過來的壓縮包,對其進(jìn)行解析,把壓縮包中所有XML格式的文件轉(zhuǎn)換成一個過程定義對象,將相關(guān)信息通過hibernate保存在數(shù)據(jù)庫中[8]。
節(jié)點和轉(zhuǎn)換組成一個流程。通常在JBPM的流程定義工具中,由節(jié)點和轉(zhuǎn)換組成一個流程。節(jié)點包括start節(jié)點、state節(jié)點、end節(jié)點、task任務(wù)節(jié)點和fork/join節(jié)點。不同類型的節(jié)點代表不同類型的活動。start節(jié)點即開始節(jié)點,代表一個流程的開始;end節(jié)點代表一個流程的結(jié)束;fork/join節(jié)點用來表示并行的任務(wù),并且整個流程必須所有的分支都執(zhí)行完畢才能算完成。任何一個流程的定義必須包括start節(jié)點和end節(jié)點。
2.1.3 動態(tài)表單工具
動態(tài)表單工具主要為使用者提供可視化的在線表單設(shè)計工具,替代了復(fù)雜的代碼編寫和數(shù)據(jù)庫設(shè)計,讓使用者不必編寫代碼,提高了工作效率,節(jié)省了開發(fā)時間。動態(tài)表單工具的主要功能包括設(shè)置數(shù)據(jù)源、設(shè)計數(shù)據(jù)庫表、設(shè)計表單頁面等[9]。動態(tài)表單工具功能模塊如圖2所示。
圖2 動態(tài)表單工具模塊
設(shè)置數(shù)據(jù)源:設(shè)置數(shù)據(jù)庫類型、數(shù)據(jù)庫驅(qū)動、URL、用戶名、密碼等。
設(shè)計數(shù)據(jù)庫表:主要指設(shè)計數(shù)據(jù)庫表的字段,字段類型包括varchar,int,char,date等常見類型,并可對某一個字段加入正則表達(dá)式規(guī)則,以保證輸入數(shù)據(jù)時的有效性。
設(shè)計表單頁面:主要通過拖拽方式將控件拖拽到操作面板中,并將相應(yīng)的控件對應(yīng)數(shù)據(jù)庫表中的字段。
JBPM工作流程主要分為四步[10]:
(1)流程定義。從JBPM3.0版本之后,JBPM的流程定義主要是通過集成與eclipse的JBPM-designer插件來進(jìn)行開發(fā)。通過該插件,開發(fā)人員在eclipse中通過拖拽方式將流程節(jié)點放入工作面板中,創(chuàng)建完畢后,eclipse自動將其打包為JBPM識別的JBPL格式。
(2)流程部署。軟件開發(fā)人員通過JBPM WEB控制臺,把流程定義中定義好的JPDL文件導(dǎo)入,就可以將流程部署在數(shù)據(jù)庫中。
(3)流程解析。流程部署在JBPM WEB控制臺以后,控制臺的工作流引擎會讀取相關(guān)數(shù)據(jù),并進(jìn)行解壓。
(4)用戶交互。用戶登錄系統(tǒng)后,系統(tǒng)通過List
因為在流程定義中,雖然通過eclipse安裝插件來定義流程,能夠滿足常見的使用,但流程定義必須集成在eclipse中使用,不能獨(dú)立運(yùn)行,導(dǎo)致其存在一定的局限性。并且由于JBPM-designer和eclipse不屬于同一家公司,如果版本不同會導(dǎo)致無法使用。且通常在實際應(yīng)用中,工作流流程的設(shè)計應(yīng)該也可以由用戶來完成,集成在eclipse中的JBPM-designer是面向開發(fā)人員的,對用戶來說并不友好。因此,開發(fā)一個獨(dú)立的流程設(shè)計器并嵌入在該系統(tǒng)中,使得用戶可以在Web應(yīng)用界面通過拖拽方式設(shè)計流程,并且在設(shè)計完成后能夠一鍵部署在系統(tǒng)中,自動配置數(shù)據(jù)庫,如果需要修改相應(yīng)流程信息,由使用者修改即可完成。
基于以上問題,文中以某省電力公司的綜合信息服務(wù)管理平臺為研究對象,設(shè)計了JBPM的流程設(shè)計器,并在該平臺上進(jìn)行應(yīng)用。
綜合信息服務(wù)管理平臺是在某省南方電網(wǎng)有限責(zé)任公司電子辦公一體化總體規(guī)劃指導(dǎo)下,按照“統(tǒng)一規(guī)劃,分布實施”的原則所提出的建設(shè)任務(wù)。此次建設(shè)的范圍包括小額物資管理、辦公資源管理、交通資源管理、房屋管理、項目管理等業(yè)務(wù)子系統(tǒng)。并且能夠與該公司其他業(yè)務(wù)系統(tǒng)進(jìn)行信息共享,避免信息孤島。系統(tǒng)主要功能如圖3所示。
圖3 系統(tǒng)主要功能
針對JBPM-designer在實際應(yīng)用中存在的缺陷,設(shè)計了一個圖形化的流程設(shè)計工具,采用JavaWeb的JSP,JS,Jquery等技術(shù)來繪制流程,能夠?qū)⒂脩衾L制的流程化圖形轉(zhuǎn)化為JBPM工作流引擎可以理解的流程定義。并且,它脫離了開發(fā)人員的開發(fā)環(huán)境,任何用戶都可以在安裝了Java環(huán)境的電腦下使用它來繪制、修改、部署流程。文中已經(jīng)將其集成在綜合信息服務(wù)管理平臺中,用戶需要使用時,只需在服務(wù)管理平臺中使用即可。提供的功能有[11]:
(1)繪制流程:繪制流程圖中各種節(jié)點、連線、分支、判斷等圖形,對圖形進(jìn)行選擇、拖曳、放大、縮小等操作[12]。
(2)新建流程:根據(jù)業(yè)務(wù)的邏輯過程,在圖形面板上繪制出相應(yīng)的業(yè)務(wù)流程圖,并且設(shè)置好相應(yīng)的參數(shù),保存該流程。
(3)修改流程:從已經(jīng)保存的流程列表中選擇需要修改的流程,先根據(jù)該流程的字段信息,從數(shù)據(jù)庫中讀取出流程的各個節(jié)點的信息,讀取完成后,自動在流程繪圖區(qū)中將該圖形繪制出。當(dāng)對流程圖修改完成后,保存即可。
(4)保存流程:保存流程會將用戶定義的流程圖轉(zhuǎn)換為JBPM可以識別的流程定義文件,用戶自定義的圖形和圖標(biāo)等也單獨(dú)保存在文件夾中。
(5)刪除流程:將該流程定義從數(shù)據(jù)庫中進(jìn)行刪除,并且結(jié)束所有關(guān)于該流程的任務(wù)實例。
在線流程設(shè)計器在界面上主要有3個部分:左側(cè)為工具欄,包含了常見的基本活動節(jié)點,包括選擇、連線、開始、結(jié)束、任務(wù)、自動、會簽、決策等節(jié)點。當(dāng)用戶點擊某一個基本活動節(jié)點時,便可以在右邊繪圖區(qū)放置該節(jié)點,在繪圖區(qū)選擇某一個節(jié)點,繪圖區(qū)右邊會顯示該節(jié)點的相關(guān)屬性,例如可以選中信息中心審批節(jié)點,右側(cè)圖形屬性中,可以設(shè)置信息中心審批的用戶組成員,那么,當(dāng)流程走向到達(dá)該節(jié)點時,信息中心審批的用戶組成員可以對流程進(jìn)行審批,而其他成員則不可以。在最上邊為工具欄目,包括新建流程、導(dǎo)入流程、發(fā)布流程、清空流程、撤銷、布局、刪除等功能。
在線流程設(shè)計器的主要功能就是通過在圖形化界面上設(shè)計圖形化流程,并將流程轉(zhuǎn)換為符合JPDL格式的XML文件,且能將XML文件轉(zhuǎn)換為圖形呈現(xiàn)在界面上。因此,在線流程設(shè)計器首先通過解析框架解析XML文件,將XML文件解析為相應(yīng)于JBPM組件的Model組件,并呈現(xiàn)在界面上,對界面上組件更改后,相應(yīng)的修改也會保存在Model組件中,并修改在XML文件上[13]。
3.2.1 Model組件
Model組件是在流程設(shè)計中用到的視圖元素,包括流程設(shè)計中的節(jié)點元素、連接線元素,Model組件中包含的類主要包括[14]:
StartNodeModel:開始節(jié)點;
TaskNodeModel:任務(wù)節(jié)點;
EndNodeModel:結(jié)束節(jié)點;
ConnectionModel:連接線節(jié)點;
SurfaceModel:畫圖面板。
3.2.2 XML文件解析
JBPM提供的流程解析功能是通過JBPM自帶的binding類來對各種節(jié)點進(jìn)行解析[15]。Binding類主要包括兩大類型,一種是流程引擎使用的對象的binding類,另一種是流程定義節(jié)點使用的binding類。本實例中,采用后一種binding類解析,并將其部署在流程中。使用代碼如下[16]:
RepositoryServicerepositoryService=processEngine.getRepositoryService();
Booleanisok=repositoryService.createDeployments().
addResourceFromClasspath("jddl.xml").deploy();
3.2.3 流程設(shè)計
在服務(wù)端,在線流程設(shè)計器設(shè)計了一個服務(wù)接口DataService和實現(xiàn)該接口的實現(xiàn)類DataServiceImpl。DataServiceImpl調(diào)用數(shù)據(jù)訪問層的DataDao來實現(xiàn)其中定義的服務(wù)。主要有四種方法[17]。
(1)String[] GetProcessList()。
用戶查看已經(jīng)部署的流程實例時,返回數(shù)據(jù)庫中所有的流程實例名稱。
(2)booleanSaveProcess(byte[] data)。
當(dāng)用戶保存相應(yīng)數(shù)據(jù)時,接收對應(yīng)數(shù)據(jù)包,并且將數(shù)據(jù)包保存至數(shù)據(jù)訪問層的DataDao來部署流程,并返回相應(yīng)的成功與否信息。
(3)Map GetProcessInfo(String name)。
用戶選中其中一個流程時,則返回該流程的xml數(shù)據(jù)。
(4)booleanDeleteProcess(String name)。
用戶選中其中一個流程時,則刪除該流程的所有信息。
數(shù)據(jù)訪問層(DataDao):DataDao實現(xiàn)了對數(shù)據(jù)庫的增、刪、查、改等操作。通過調(diào)用Hibernate作為持久化工具,實現(xiàn)了發(fā)布流程、修改流程、刪除流程、查看流程等操作[18]。
3.2.4 新建流程
通過在線流程設(shè)計器設(shè)計好流程之后,該流程遵循JPDL格式,保存為后綴名為.xml格式文件。點擊發(fā)布流程,調(diào)用系統(tǒng)DataService接口的DataServiceImpl類的SaveProcess(byte[] data)方法,通過將.xml格式文件轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)為參數(shù)。在SaveProcess中,調(diào)用數(shù)據(jù)訪問層DataDao實現(xiàn)流程部署,流程部署成功后,返回true,否則,返回false。
3.2.5 編輯流程
用戶通過選擇相應(yīng)的流程,通過流程名作為參數(shù),服務(wù)端通過流程名,調(diào)用GetProcess方法。在該方法中,調(diào)用其DataDao從數(shù)據(jù)庫中獲取該流程的相關(guān)信息,返回其流程,該流程的相關(guān)數(shù)據(jù)記錄在Map鍵值對中,鍵值對中包含的數(shù)據(jù)有流程名,流程對應(yīng)的.xml文件內(nèi)容,流程所屬用戶組,流程創(chuàng)建日期,等等。從服務(wù)器端返回該流程的相關(guān)信息,包括流程版本,流程的JPDL格式文件[19]。
文中首先介紹了“某電力公司的綜合信息服務(wù)管理平臺”的項目背景,根據(jù)項目背景對系統(tǒng)功能進(jìn)行了分解,并給出了系統(tǒng)功能模塊圖。之后針對在線流程設(shè)計器主要功能進(jìn)行了介紹并給出了詳細(xì)設(shè)計與實現(xiàn)方法。但該在線流程設(shè)計器也存在一些問題,主要包括在Web端使用時,由于集成了Flash技術(shù),因此客戶端必需安裝Flash插件,不然無法使用,針對一些沒有安裝Flash或者安全性高的客戶端,則無法使用部分功能。因此,后期的改進(jìn)主要將代碼進(jìn)行重構(gòu),使用Html5進(jìn)行二次開發(fā),使得在線流程設(shè)計器可以在未安裝Flash客戶端上使用。
通過介紹工作流的基本概念,著重介紹JBPM的系統(tǒng)架構(gòu)、工作流程,以及它自身的不足。并且通過改進(jìn)它的缺點,設(shè)計了一個改進(jìn)的JBPM工作流管理系統(tǒng),并將其運(yùn)用在綜合信息服務(wù)管理平臺中。該系統(tǒng)經(jīng)過初步試用,有效提高了流程的運(yùn)行效率,取得了滿意的結(jié)果。在后期能夠根據(jù)業(yè)務(wù)流程的需要,方便地更改業(yè)務(wù)流程。