


摘? 要:開發項目管理軟件中很多業務都有一級審核、二級審核甚至多級審核機制。近期,在項目管理軟件迭代升級的需求分析過程中,客戶業務活動審核機制調整了多次需求,也出現了系統流程與業務耦合性增強的問題,對老版本中多套臨時表的維護越來越困難。在這種背景下,對開源工作流管理框架進行了研究,Activiti6.0在技術選型中脫穎而出,繼而又對Activiti6.0是否能夠實現具體項目的業務要求做了研究。
關鍵詞:Activiti6.0;BPMN;工作流;項目管理軟件
Abstract:In the development of project management software,many businesses have the mechanism of first level audit,second level audit and even multi-level audit. Recently,in the process of requirement analysis of iterative upgrade of project management software,the customer business activity audit mechanism has adjusted the requirements for many times,and the coupling between system process and business has increased. Many sets of temporary tables in the old version are more and more difficult to maintain. In this context,the open-source workflow management framework is studied. Activiti6.0 stands out in technology selection,and then whether Activiti6.0 can achieve the business requirements of specific projects is studied.
Keywords:Activiti6.0;BPMN;workflow;project management software
0? 引? 言
項目管理軟件沒有普及時,相關人員在項目管理過程中,一部電話加上堆積如山的文件是許多辦公桌的標配,流程審核是傳統手工遞交紙張的方式,逐級找領導簽字,效率低下。隨著PC辦公時代的到來,辦公人員只需要在項目管理系統中填寫工作內容,系統就會按照定義好的流程自動執行,各級審批者可以登錄PC系統,看到工作內容再進行相應的審批管理操作。辦公桌上干凈了許多。
技術總是不斷在更新,人們的需求總是不斷增加。項目管理軟件也需要不斷做出迭代升級,如何實現業務與流程的分離?是不是可以將流程從業務中單獨剝離出來做統一的流程管理?基于這些問題筆者開始對工作流管理框架展開研究,以供讀者參考,共同完善。
1? 什么是工作流
1.1? 工作流相關概念
工作流:對工作流程及其各操作步驟之間業務規則的抽象、概括、描述。
工作流程圖如圖1所示。一個比較形象的比喻是:工作流就像是列車的軌道,而所要執行的對象像是一輛自動運行的列車,只要列車啟動,它就能沿著軌道一直走到終點,其中的節點就像是列車到達終點途中所要經過的火車站,它會告訴火車下一站是哪里,然后火車就往指定的下一站駛去,一直這樣開到終點站。
1.2? BPMN元素
BPMN規范的發布是為了讓業務流程的全部參與人員對流程可以進行可視化管理,提供一套讓所有參與人員都易于理解的語言和標記。2011年1月發布BPMN2.0規范。我們首先要熟悉BPMN定義的每個元素代表的含義。使用BPMN2.0的目的是建立簡單并且易懂的業務流程模型,但是同時又需要處理高度復雜的業務流程,因此要解決這兩個矛盾的要求,需要在規范中定義標準的圖形和符號。
BPMN定義了基本元素。每個元素均有自己對應的圖形。除了基本元素,還有很多在其基礎上的子元素。最常見的網關,子元素為排他網關、并行網關、包容網關等等。
1.3? BPMN2.0 XML結構
常見的工作流有Activiti、OSWorkflow、JBoss jBPM、JFlow、FixFlow等。怎樣的流程描述文件可在不同的工作流中使用?除了圖形定義。一份用XML語法標準定義,依據BPMN2.0標準的流程描述文件,就可在不同的工作流中使用,只要該工作流符合BPMN2.0規范。特別標記的是,除了BPMN2.0標準的元素及其屬性外,工作流的供應商還可以在不改造已有屬性的基礎上,增添額外的屬性,但是增加的屬性不能與已有的屬性產生矛盾,還需要簡易易懂。比如:Activiti擴展的屬性,屬性名稱統一用“ ctivity;”開頭。Activiti;class=“com.bestpay.DemoService”。
2? 工作流選型
基于老版本維護越來越困難,筆者進行了開源工作流管理框架的研究。市面上開源工作流引擎框架有很多,例如:OSWorkflow、jBPM、JFlow、FixFlow、Activiti等。在技術選型中,主要遵循的原則是“主流,適用,簡單”。
Activiti6.0是在jBPM版本從1到4的基礎上開發的,是5.0的升級版,滿足BPMN2.0標準。很“主流”:Activiti6.0用戶多,文檔豐富,技術經歷市場已經成熟,網上社區強大,很多網站還有專欄討論,學習周期相對較短,界面簡單,有很好的發展趨勢;很“簡單”:可控可駕馭,可擴展,輕量級。Activiti6.0支持大部分工作流流程,少數工作流流程需要進行二次開發;很“適用”:滿足我們對軟件的各種需求。
3? Activiti
Alfresco軟件在2010年5月17日發布Activiti,它是一個業務流程管理(BPM)框架,它是覆蓋了業務流程管理、工作流、服務協作等領域的一個開源的、靈活的、易擴展的可執行流程語言框架。Activiti基于Apache許可的開源BPM平臺,采用了寬松的Apache License 2.0開源協議。創始人Tom Baeyens也是jBPM的創始人,2010年,Tom Baeyens離開了JBPM同時加入到Alfresco公司。2010年的5月17日,Tom Baeyens發布了第一個Activiti版本,即5.0.alpha版,之所以把Activiti的第一個版本定義為5.0,外界猜測也許是為了讓它更像jBPM4的延續。
3.1? 接口簡介
在Activiti中,流程引擎的實例對象是ProcessEngine,當創建了流程引擎實例后,在ProcessEngine中會初始化一系列接口實例,這些接口實例提供了大部分操作流程引擎數據的業務方法,可以使用ProcessEngine中的getXXXService方法得到這些接口的實例。接口實例具體信息如圖2所示。
3.2? 編寫Activiti程序
既然這是一個框架,自然就是引進jar包,畫流程圖,然后實現該框架提供的接口來做我們想要做的事情。
前期環境配置工作包括3步:Eclipse插件安裝、IDEA插件安裝、Activiti安裝。一系列的環境準備工作結束,就可以編寫Activiti程序。
Activiti框架會幫我們把對應的數據庫表創建起來,它關聯的數據庫表有23個,不同的表頭代表不同的用途,對應Service的不同API。
3.2.1? 定義工作流
新建一個含有二級審核的工作流程,在每一步任務中,我們都可以指定對應的處理人是誰。流程圖如圖3所示。
流程圖對應的文件audit.xml部分如下:
上述為一個流程文件部分內容。該文件中的process元素用于描述流程信息,而bpmndi;BPMNDiagram元素則用于描述流程節點的位置信息。在process元素中定義了開始事件srartEvent、兩個usertask和結束事件endEvent以及連接這些元素的順序流(sequenceFlow)。
3.2.2? 部署工作流
3.2.3? 執行工作流
指定執行剛才部署的工作流就是我們定義時設置的工作流程圖中的當前任務id:
3.2.4? 查看任務信息
根據任務辦理人,查看當前任務信息:
3.2.5? 處理當前任務
當前任務的id已經查詢出來了,處理id為304的這個任務:
3.2.6? 刪除流程
刪除部署id=101這個流程定義的數據:
4? Activiti問題總結
在實際的項目開發過程中,筆者不斷遇到了一些問題與挑戰,同時也積累了一些經驗。從Activiti數據庫的連接;到排他網關與并行網關的不同設置;再到執行監聽器的配置與使用,任務監聽器的配置與使用等等的入坑事件。下面總結幾個遇到的比較典型的問題。
4.1? 會簽功能
實際項目中會碰到某個任務節點需要實現會簽功能的要求,就是指一個任務需要多人進行審批,多人都審批通過后,流程才能繼續往下走。目前的實現方式為:
(1)啟動這個流程圖時,遍歷所有任務,獲取當前任務的辦理人;
(2)將任務辦理人做成一個集合,每個辦理人元素用逗號分隔;
(3)將這個集合的鍵以Publicitylist_加上當前的元素ID,值以前面獲取到的集合放入Activiti上下文。將這個參數作為Activiti啟動參數放入即可。
4.2? 回退功能
實際項目中還會碰到某個任務節點需要實現回退功能的要求。就是指能夠回退到流程圖上的任意節點,Activiti無法滿足這樣的項目需求,就需要進行二次開發封裝。目前的實現方式為:
(1)獲取當前任務所在的節點;
(2)獲取當前節點的流出方向;
(3)記住當前節點的流出信息,并將當前節點的流出信息清空;
(4)獲取目標節點;
(5)創建新的方向;
(6)將新的方向設置為當前節點的流出方向;
(7)完成當前任務;
(8)還原當前節點的流出方向。
5? 結? 論
在實際的項目開發過程中,工作流管理的好處是能實實在在感受到的,工作流管理在項目管理軟件中是有很大的發展空間的。筆者簡要總結了以下幾點:軟件的過程控制可見,清晰明了,客戶滿意度提高;工作流的可配置性提高,直接減少了軟件開發、后期維護成本;增強了系統的適應性,能夠快速適應客戶提出的流程變化。
參考文獻:
[1] 程序人生丶.activiti入坑總結 [EB/OL].(2019-02-20).https://www.jianshu.com/p/5c0e43701d51.html.
[2] Java3y.Activiti就是這么簡單 [EB/OL].(2018-03-21).https://www.jianshu.com/p/aa09fe0594ef.html.
[3] jgroup.俯瞰開源工作流引擎Activiti [EB/OL].(2018-08-27).https://blog.csdn.net/jgroup/article/details/82116523.html.
作者簡介:錢葉丹(1981.10—),女,漢族,上海人,工程師,本科,研究方向:計算機軟件。