歐陽廣津,武 彤
(貴州大學 計算機科學與技術學院,貴州 貴陽 550000)
近年來,隨著Internet技術的發展,電子化辦公技術逐漸走進人們的工作和學習中。相對應的,電子化辦公中的業務流程是復雜多變的,常見的解決策略是由相應的開發人員開發出針對該部門辦公流程的系統。然而,隨著時間的推移和部門的工作流程的改變,電子化辦公中存在的問題也逐漸暴露出來,當業務工作流程發生變化之后,開發的電子辦公系統無法處理變化之后的流程。通過統計發現,之前開發的電子辦公系統是根據當時的業務流程而定制開發的,由客戶提出相應的需求,開發人員對需求進行編碼,然而,當業務流程發生變動時,電子化辦公的使用人員缺少系統整合和升級系統的能力,這就嚴重影響了系統的生命周期。因此,傳統的電子化辦公流程開發方式已經不能滿足當前業務發展的需要和后期的更改,這就要求人們在協同辦公應用系統中,能夠將復雜的工作流程從業務邏輯中剝離出來,并且在后期可以由用戶根據自己的需求和變化進行更改,而不是由開發人員設計工作流程[1]。
文中以JBPM中的工作流技術為例,首先對JBPM進行相應的介紹,包括系統架構、工作流程及其不足之處,并對不足之處進行改進,然后將改進后的JBPM應用在綜合信息服務管理平臺中。
在20世紀70年代中期辦公自動化領域中,工作流技術逐漸興起,但對于工作流的研究,和工作流思想的出現,則應該追溯至更早的時期。隨著計算機技術的迅速發展和互聯網產業的興起,在20世紀90年代后,工作流系統的開發進入一個新的階段。大量的工作流技術應用于電信業、金融業、制造業、辦公自動化領域等[2]。
進入21世紀,隨著計算機技術的快速發展,工作流技術的定義也越發清晰。工作流聯盟對工作流做出的定義:工作流是能夠在運行過程中,實施完全或者部分自動執行的經營過程。它可以在不同的任務執行者之間,通過一系列規定,文檔,或者定義自動的進行任務傳遞與執行。簡單的說,工作流就是用一個個任務的節點,分支節點,判斷節點,抽象地表示業務流的處理過程。工作流管理系統本質上是一個軟件系統,然而它不同于一般的軟件系統。常見的軟件系統主要是根據用戶需求進行開發的軟件系統,包含對數據庫的增刪查改等功能,而工作流管理系統的主要功能是設計和管理工作流,然后將預先設計好的工作流邏輯放入工作流管理系統中,從而執行相應的工作流實例。目前主流的工作流管理系統有JBPM、OpenWFE、Osworkflow[3]。
JBPM是一個靈活的基于J2EE、開源的輕量級工作流管理系統,采用XML結構的語言作為流程描述語言JPDL,是軟件開發人員和業務需求分析人員之間的橋梁。JBPM具有雙重特點:它可以根據用戶的身份,分別對業務人員和開發人員提供不同的流程管理方式[4]。
業務流程允許用戶通過使用流程圖描述需要執行的步驟來實現建模業務的目標。這樣大大提高了業務邏輯的可見性和靈活性,從而使業務用戶更加容易理解,并且更易于監視。
JBPM的核心模塊是ProcessEngine,它是一個由Java語言進行編寫的輕量級,并且可以對其進行擴展的工作流引擎模塊,允許用戶使用最新的BPMN 2.0規范執行業務流程。JBPM的核心是在Java環境下進行開發的,所以它可以在任何安裝了Java環境的平臺上運行,也可以作為服務或者應用嵌入到其他應用程序中。在核心引擎之上,提供了許多功能和工具來支持如下整個生命周期中的業務流程[5]:
(1)通過基于IBM開放源代碼,Java的可擴展平臺的Eclipse編輯器,可以支持通過拖拽的方式在圖形上對相應的業務流程進行創建。
(2)基于JPA/JTA的可插拔持久性和事務。
(3)基于WS-HumanTask的可插拔人工任務服務,用于包含需要由使用者執行的任務[6]。
(4)JBPM管理控制臺可以對運行中的流程實例、任務報告、任務列表進行管理。
(5)歷史記錄(用于查詢/監視/分析)。
(6)與Seam、Spring、OSGi等進行集成。
JBPM的系統架構如圖1所示。

圖1 JBPM系統架構
2.1.1 工作流引擎
工作流引擎的主要功能是對任務進行分配和調度,主要包括任務分配者和調度者[7]。
任務分配者管理一系列的活動任務,當一個任務節點完成后,任務分配者通過調度算法和準則計算該節點的下一個執行節點。
任務調度者根據任務分配者的結果,將任務傳遞給處理程序。
2.1.2 流程定義工具
JBPM流程定義工具主要是通過安裝eclipse插件,在eclipse中畫好相應的流程圖,系統自動將其打包,并將后綴名為.jar格式的壓縮包上傳至工作流引擎所在的計算機,引擎讀取上傳過來的壓縮包,對其進行解析,把壓縮包中所有XML格式的文件轉換成一個過程定義對象,將相關信息通過hibernate保存在數據庫中[8]。
節點和轉換組成一個流程。通常在JBPM的流程定義工具中,由節點和轉換組成一個流程。節點包括start節點、state節點、end節點、task任務節點和fork/join節點。不同類型的節點代表不同類型的活動。start節點即開始節點,代表一個流程的開始;end節點代表一個流程的結束;fork/join節點用來表示并行的任務,并且整個流程必須所有的分支都執行完畢才能算完成。任何一個流程的定義必須包括start節點和end節點。
2.1.3 動態表單工具
動態表單工具主要為使用者提供可視化的在線表單設計工具,替代了復雜的代碼編寫和數據庫設計,讓使用者不必編寫代碼,提高了工作效率,節省了開發時間。動態表單工具的主要功能包括設置數據源、設計數據庫表、設計表單頁面等[9]。動態表單工具功能模塊如圖2所示。

圖2 動態表單工具模塊
設置數據源:設置數據庫類型、數據庫驅動、URL、用戶名、密碼等。
設計數據庫表:主要指設計數據庫表的字段,字段類型包括varchar,int,char,date等常見類型,并可對某一個字段加入正則表達式規則,以保證輸入數據時的有效性。
設計表單頁面:主要通過拖拽方式將控件拖拽到操作面板中,并將相應的控件對應數據庫表中的字段。
JBPM工作流程主要分為四步[10]:
(1)流程定義。從JBPM3.0版本之后,JBPM的流程定義主要是通過集成與eclipse的JBPM-designer插件來進行開發。通過該插件,開發人員在eclipse中通過拖拽方式將流程節點放入工作面板中,創建完畢后,eclipse自動將其打包為JBPM識別的JBPL格式。
(2)流程部署。軟件開發人員通過JBPM WEB控制臺,把流程定義中定義好的JPDL文件導入,就可以將流程部署在數據庫中。
(3)流程解析。流程部署在JBPM WEB控制臺以后,控制臺的工作流引擎會讀取相關數據,并進行解壓。
(4)用戶交互。用戶登錄系統后,系統通過List
因為在流程定義中,雖然通過eclipse安裝插件來定義流程,能夠滿足常見的使用,但流程定義必須集成在eclipse中使用,不能獨立運行,導致其存在一定的局限性。并且由于JBPM-designer和eclipse不屬于同一家公司,如果版本不同會導致無法使用。且通常在實際應用中,工作流流程的設計應該也可以由用戶來完成,集成在eclipse中的JBPM-designer是面向開發人員的,對用戶來說并不友好。因此,開發一個獨立的流程設計器并嵌入在該系統中,使得用戶可以在Web應用界面通過拖拽方式設計流程,并且在設計完成后能夠一鍵部署在系統中,自動配置數據庫,如果需要修改相應流程信息,由使用者修改即可完成。
基于以上問題,文中以某省電力公司的綜合信息服務管理平臺為研究對象,設計了JBPM的流程設計器,并在該平臺上進行應用。
綜合信息服務管理平臺是在某省南方電網有限責任公司電子辦公一體化總體規劃指導下,按照“統一規劃,分布實施”的原則所提出的建設任務。此次建設的范圍包括小額物資管理、辦公資源管理、交通資源管理、房屋管理、項目管理等業務子系統。并且能夠與該公司其他業務系統進行信息共享,避免信息孤島。系統主要功能如圖3所示。

圖3 系統主要功能
針對JBPM-designer在實際應用中存在的缺陷,設計了一個圖形化的流程設計工具,采用JavaWeb的JSP,JS,Jquery等技術來繪制流程,能夠將用戶繪制的流程化圖形轉化為JBPM工作流引擎可以理解的流程定義。并且,它脫離了開發人員的開發環境,任何用戶都可以在安裝了Java環境的電腦下使用它來繪制、修改、部署流程。文中已經將其集成在綜合信息服務管理平臺中,用戶需要使用時,只需在服務管理平臺中使用即可。提供的功能有[11]:
(1)繪制流程:繪制流程圖中各種節點、連線、分支、判斷等圖形,對圖形進行選擇、拖曳、放大、縮小等操作[12]。
(2)新建流程:根據業務的邏輯過程,在圖形面板上繪制出相應的業務流程圖,并且設置好相應的參數,保存該流程。
(3)修改流程:從已經保存的流程列表中選擇需要修改的流程,先根據該流程的字段信息,從數據庫中讀取出流程的各個節點的信息,讀取完成后,自動在流程繪圖區中將該圖形繪制出。當對流程圖修改完成后,保存即可。
(4)保存流程:保存流程會將用戶定義的流程圖轉換為JBPM可以識別的流程定義文件,用戶自定義的圖形和圖標等也單獨保存在文件夾中。
(5)刪除流程:將該流程定義從數據庫中進行刪除,并且結束所有關于該流程的任務實例。
在線流程設計器在界面上主要有3個部分:左側為工具欄,包含了常見的基本活動節點,包括選擇、連線、開始、結束、任務、自動、會簽、決策等節點。當用戶點擊某一個基本活動節點時,便可以在右邊繪圖區放置該節點,在繪圖區選擇某一個節點,繪圖區右邊會顯示該節點的相關屬性,例如可以選中信息中心審批節點,右側圖形屬性中,可以設置信息中心審批的用戶組成員,那么,當流程走向到達該節點時,信息中心審批的用戶組成員可以對流程進行審批,而其他成員則不可以。在最上邊為工具欄目,包括新建流程、導入流程、發布流程、清空流程、撤銷、布局、刪除等功能。
在線流程設計器的主要功能就是通過在圖形化界面上設計圖形化流程,并將流程轉換為符合JPDL格式的XML文件,且能將XML文件轉換為圖形呈現在界面上。因此,在線流程設計器首先通過解析框架解析XML文件,將XML文件解析為相應于JBPM組件的Model組件,并呈現在界面上,對界面上組件更改后,相應的修改也會保存在Model組件中,并修改在XML文件上[13]。
3.2.1 Model組件
Model組件是在流程設計中用到的視圖元素,包括流程設計中的節點元素、連接線元素,Model組件中包含的類主要包括[14]:
StartNodeModel:開始節點;
TaskNodeModel:任務節點;
EndNodeModel:結束節點;
ConnectionModel:連接線節點;
SurfaceModel:畫圖面板。
3.2.2 XML文件解析
JBPM提供的流程解析功能是通過JBPM自帶的binding類來對各種節點進行解析[15]。Binding類主要包括兩大類型,一種是流程引擎使用的對象的binding類,另一種是流程定義節點使用的binding類。本實例中,采用后一種binding類解析,并將其部署在流程中。使用代碼如下[16]:
RepositoryServicerepositoryService=processEngine.getRepositoryService();
Booleanisok=repositoryService.createDeployments().
addResourceFromClasspath("jddl.xml").deploy();
3.2.3 流程設計
在服務端,在線流程設計器設計了一個服務接口DataService和實現該接口的實現類DataServiceImpl。DataServiceImpl調用數據訪問層的DataDao來實現其中定義的服務。主要有四種方法[17]。
(1)String[] GetProcessList()。
用戶查看已經部署的流程實例時,返回數據庫中所有的流程實例名稱。
(2)booleanSaveProcess(byte[] data)。
當用戶保存相應數據時,接收對應數據包,并且將數據包保存至數據訪問層的DataDao來部署流程,并返回相應的成功與否信息。
(3)Map GetProcessInfo(String name)。
用戶選中其中一個流程時,則返回該流程的xml數據。
(4)booleanDeleteProcess(String name)。
用戶選中其中一個流程時,則刪除該流程的所有信息。
數據訪問層(DataDao):DataDao實現了對數據庫的增、刪、查、改等操作。通過調用Hibernate作為持久化工具,實現了發布流程、修改流程、刪除流程、查看流程等操作[18]。
3.2.4 新建流程
通過在線流程設計器設計好流程之后,該流程遵循JPDL格式,保存為后綴名為.xml格式文件。點擊發布流程,調用系統DataService接口的DataServiceImpl類的SaveProcess(byte[] data)方法,通過將.xml格式文件轉換成二進制數據為參數。在SaveProcess中,調用數據訪問層DataDao實現流程部署,流程部署成功后,返回true,否則,返回false。
3.2.5 編輯流程
用戶通過選擇相應的流程,通過流程名作為參數,服務端通過流程名,調用GetProcess方法。在該方法中,調用其DataDao從數據庫中獲取該流程的相關信息,返回其流程,該流程的相關數據記錄在Map鍵值對中,鍵值對中包含的數據有流程名,流程對應的.xml文件內容,流程所屬用戶組,流程創建日期,等等。從服務器端返回該流程的相關信息,包括流程版本,流程的JPDL格式文件[19]。
文中首先介紹了“某電力公司的綜合信息服務管理平臺”的項目背景,根據項目背景對系統功能進行了分解,并給出了系統功能模塊圖。之后針對在線流程設計器主要功能進行了介紹并給出了詳細設計與實現方法。但該在線流程設計器也存在一些問題,主要包括在Web端使用時,由于集成了Flash技術,因此客戶端必需安裝Flash插件,不然無法使用,針對一些沒有安裝Flash或者安全性高的客戶端,則無法使用部分功能。因此,后期的改進主要將代碼進行重構,使用Html5進行二次開發,使得在線流程設計器可以在未安裝Flash客戶端上使用。
通過介紹工作流的基本概念,著重介紹JBPM的系統架構、工作流程,以及它自身的不足。并且通過改進它的缺點,設計了一個改進的JBPM工作流管理系統,并將其運用在綜合信息服務管理平臺中。該系統經過初步試用,有效提高了流程的運行效率,取得了滿意的結果。在后期能夠根據業務流程的需要,方便地更改業務流程。