摘? 要:開發(fā)項(xiàng)目管理軟件中很多業(yè)務(wù)都有一級(jí)審核、二級(jí)審核甚至多級(jí)審核機(jī)制。近期,在項(xiàng)目管理軟件迭代升級(jí)的需求分析過程中,客戶業(yè)務(wù)活動(dòng)審核機(jī)制調(diào)整了多次需求,也出現(xiàn)了系統(tǒng)流程與業(yè)務(wù)耦合性增強(qiáng)的問題,對(duì)老版本中多套臨時(shí)表的維護(hù)越來越困難。在這種背景下,對(duì)開源工作流管理框架進(jìn)行了研究,Activiti6.0在技術(shù)選型中脫穎而出,繼而又對(duì)Activiti6.0是否能夠?qū)崿F(xiàn)具體項(xiàng)目的業(yè)務(wù)要求做了研究。
關(guān)鍵詞:Activiti6.0;BPMN;工作流;項(xiàng)目管理軟件
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? 引? 言
項(xiàng)目管理軟件沒有普及時(shí),相關(guān)人員在項(xiàng)目管理過程中,一部電話加上堆積如山的文件是許多辦公桌的標(biāo)配,流程審核是傳統(tǒng)手工遞交紙張的方式,逐級(jí)找領(lǐng)導(dǎo)簽字,效率低下。隨著PC辦公時(shí)代的到來,辦公人員只需要在項(xiàng)目管理系統(tǒng)中填寫工作內(nèi)容,系統(tǒng)就會(huì)按照定義好的流程自動(dòng)執(zhí)行,各級(jí)審批者可以登錄PC系統(tǒng),看到工作內(nèi)容再進(jìn)行相應(yīng)的審批管理操作。辦公桌上干凈了許多。
技術(shù)總是不斷在更新,人們的需求總是不斷增加。項(xiàng)目管理軟件也需要不斷做出迭代升級(jí),如何實(shí)現(xiàn)業(yè)務(wù)與流程的分離?是不是可以將流程從業(yè)務(wù)中單獨(dú)剝離出來做統(tǒng)一的流程管理?基于這些問題筆者開始對(duì)工作流管理框架展開研究,以供讀者參考,共同完善。
1? 什么是工作流
1.1? 工作流相關(guān)概念
工作流:對(duì)工作流程及其各操作步驟之間業(yè)務(wù)規(guī)則的抽象、概括、描述。
工作流程圖如圖1所示。一個(gè)比較形象的比喻是:工作流就像是列車的軌道,而所要執(zhí)行的對(duì)象像是一輛自動(dòng)運(yùn)行的列車,只要列車啟動(dòng),它就能沿著軌道一直走到終點(diǎn),其中的節(jié)點(diǎn)就像是列車到達(dá)終點(diǎn)途中所要經(jīng)過的火車站,它會(huì)告訴火車下一站是哪里,然后火車就往指定的下一站駛?cè)?,一直這樣開到終點(diǎn)站。
1.2? BPMN元素
BPMN規(guī)范的發(fā)布是為了讓業(yè)務(wù)流程的全部參與人員對(duì)流程可以進(jìn)行可視化管理,提供一套讓所有參與人員都易于理解的語言和標(biāo)記。2011年1月發(fā)布BPMN2.0規(guī)范。我們首先要熟悉BPMN定義的每個(gè)元素代表的含義。使用BPMN2.0的目的是建立簡單并且易懂的業(yè)務(wù)流程模型,但是同時(shí)又需要處理高度復(fù)雜的業(yè)務(wù)流程,因此要解決這兩個(gè)矛盾的要求,需要在規(guī)范中定義標(biāo)準(zhǔn)的圖形和符號(hào)。
BPMN定義了基本元素。每個(gè)元素均有自己對(duì)應(yīng)的圖形。除了基本元素,還有很多在其基礎(chǔ)上的子元素。最常見的網(wǎng)關(guān),子元素為排他網(wǎng)關(guān)、并行網(wǎng)關(guān)、包容網(wǎng)關(guān)等等。
1.3? BPMN2.0 XML結(jié)構(gòu)
常見的工作流有Activiti、OSWorkflow、JBoss jBPM、JFlow、FixFlow等。怎樣的流程描述文件可在不同的工作流中使用?除了圖形定義。一份用XML語法標(biāo)準(zhǔn)定義,依據(jù)BPMN2.0標(biāo)準(zhǔn)的流程描述文件,就可在不同的工作流中使用,只要該工作流符合BPMN2.0規(guī)范。特別標(biāo)記的是,除了BPMN2.0標(biāo)準(zhǔn)的元素及其屬性外,工作流的供應(yīng)商還可以在不改造已有屬性的基礎(chǔ)上,增添額外的屬性,但是增加的屬性不能與已有的屬性產(chǎn)生矛盾,還需要簡易易懂。比如:Activiti擴(kuò)展的屬性,屬性名稱統(tǒng)一用“ ctivity;”開頭。Activiti;class=“com.bestpay.DemoService”。
2? 工作流選型
基于老版本維護(hù)越來越困難,筆者進(jìn)行了開源工作流管理框架的研究。市面上開源工作流引擎框架有很多,例如:OSWorkflow、jBPM、JFlow、FixFlow、Activiti等。在技術(shù)選型中,主要遵循的原則是“主流,適用,簡單”。
Activiti6.0是在jBPM版本從1到4的基礎(chǔ)上開發(fā)的,是5.0的升級(jí)版,滿足BPMN2.0標(biāo)準(zhǔn)。很“主流”:Activiti6.0用戶多,文檔豐富,技術(shù)經(jīng)歷市場已經(jīng)成熟,網(wǎng)上社區(qū)強(qiáng)大,很多網(wǎng)站還有專欄討論,學(xué)習(xí)周期相對(duì)較短,界面簡單,有很好的發(fā)展趨勢;很“簡單”:可控可駕馭,可擴(kuò)展,輕量級(jí)。Activiti6.0支持大部分工作流流程,少數(shù)工作流流程需要進(jìn)行二次開發(fā);很“適用”:滿足我們對(duì)軟件的各種需求。
3? Activiti
Alfresco軟件在2010年5月17日發(fā)布Activiti,它是一個(gè)業(yè)務(wù)流程管理(BPM)框架,它是覆蓋了業(yè)務(wù)流程管理、工作流、服務(wù)協(xié)作等領(lǐng)域的一個(gè)開源的、靈活的、易擴(kuò)展的可執(zhí)行流程語言框架。Activiti基于Apache許可的開源BPM平臺(tái),采用了寬松的Apache License 2.0開源協(xié)議。創(chuàng)始人Tom Baeyens也是jBPM的創(chuàng)始人,2010年,Tom Baeyens離開了JBPM同時(shí)加入到Alfresco公司。2010年的5月17日,Tom Baeyens發(fā)布了第一個(gè)Activiti版本,即5.0.alpha版,之所以把Activiti的第一個(gè)版本定義為5.0,外界猜測也許是為了讓它更像jBPM4的延續(xù)。
3.1? 接口簡介
在Activiti中,流程引擎的實(shí)例對(duì)象是ProcessEngine,當(dāng)創(chuàng)建了流程引擎實(shí)例后,在ProcessEngine中會(huì)初始化一系列接口實(shí)例,這些接口實(shí)例提供了大部分操作流程引擎數(shù)據(jù)的業(yè)務(wù)方法,可以使用ProcessEngine中的getXXXService方法得到這些接口的實(shí)例。接口實(shí)例具體信息如圖2所示。
3.2? 編寫Activiti程序
既然這是一個(gè)框架,自然就是引進(jìn)jar包,畫流程圖,然后實(shí)現(xiàn)該框架提供的接口來做我們想要做的事情。
前期環(huán)境配置工作包括3步:Eclipse插件安裝、IDEA插件安裝、Activiti安裝。一系列的環(huán)境準(zhǔn)備工作結(jié)束,就可以編寫Activiti程序。
Activiti框架會(huì)幫我們把對(duì)應(yīng)的數(shù)據(jù)庫表創(chuàng)建起來,它關(guān)聯(lián)的數(shù)據(jù)庫表有23個(gè),不同的表頭代表不同的用途,對(duì)應(yīng)Service的不同API。
3.2.1? 定義工作流
新建一個(gè)含有二級(jí)審核的工作流程,在每一步任務(wù)中,我們都可以指定對(duì)應(yīng)的處理人是誰。流程圖如圖3所示。
流程圖對(duì)應(yīng)的文件audit.xml部分如下:
上述為一個(gè)流程文件部分內(nèi)容。該文件中的process元素用于描述流程信息,而bpmndi;BPMNDiagram元素則用于描述流程節(jié)點(diǎn)的位置信息。在process元素中定義了開始事件srartEvent、兩個(gè)usertask和結(jié)束事件endEvent以及連接這些元素的順序流(sequenceFlow)。
3.2.2? 部署工作流
3.2.3? 執(zhí)行工作流
指定執(zhí)行剛才部署的工作流就是我們定義時(shí)設(shè)置的工作流程圖中的當(dāng)前任務(wù)id:
3.2.4? 查看任務(wù)信息
根據(jù)任務(wù)辦理人,查看當(dāng)前任務(wù)信息:
3.2.5? 處理當(dāng)前任務(wù)
當(dāng)前任務(wù)的id已經(jīng)查詢出來了,處理id為304的這個(gè)任務(wù):
3.2.6? 刪除流程
刪除部署id=101這個(gè)流程定義的數(shù)據(jù):
4? Activiti問題總結(jié)
在實(shí)際的項(xiàng)目開發(fā)過程中,筆者不斷遇到了一些問題與挑戰(zhàn),同時(shí)也積累了一些經(jīng)驗(yàn)。從Activiti數(shù)據(jù)庫的連接;到排他網(wǎng)關(guān)與并行網(wǎng)關(guān)的不同設(shè)置;再到執(zhí)行監(jiān)聽器的配置與使用,任務(wù)監(jiān)聽器的配置與使用等等的入坑事件。下面總結(jié)幾個(gè)遇到的比較典型的問題。
4.1? 會(huì)簽功能
實(shí)際項(xiàng)目中會(huì)碰到某個(gè)任務(wù)節(jié)點(diǎn)需要實(shí)現(xiàn)會(huì)簽功能的要求,就是指一個(gè)任務(wù)需要多人進(jìn)行審批,多人都審批通過后,流程才能繼續(xù)往下走。目前的實(shí)現(xiàn)方式為:
(1)啟動(dòng)這個(gè)流程圖時(shí),遍歷所有任務(wù),獲取當(dāng)前任務(wù)的辦理人;
(2)將任務(wù)辦理人做成一個(gè)集合,每個(gè)辦理人元素用逗號(hào)分隔;
(3)將這個(gè)集合的鍵以Publicitylist_加上當(dāng)前的元素ID,值以前面獲取到的集合放入Activiti上下文。將這個(gè)參數(shù)作為Activiti啟動(dòng)參數(shù)放入即可。
4.2? 回退功能
實(shí)際項(xiàng)目中還會(huì)碰到某個(gè)任務(wù)節(jié)點(diǎn)需要實(shí)現(xiàn)回退功能的要求。就是指能夠回退到流程圖上的任意節(jié)點(diǎn),Activiti無法滿足這樣的項(xiàng)目需求,就需要進(jìn)行二次開發(fā)封裝。目前的實(shí)現(xiàn)方式為:
(1)獲取當(dāng)前任務(wù)所在的節(jié)點(diǎn);
(2)獲取當(dāng)前節(jié)點(diǎn)的流出方向;
(3)記住當(dāng)前節(jié)點(diǎn)的流出信息,并將當(dāng)前節(jié)點(diǎn)的流出信息清空;
(4)獲取目標(biāo)節(jié)點(diǎn);
(5)創(chuàng)建新的方向;
(6)將新的方向設(shè)置為當(dāng)前節(jié)點(diǎn)的流出方向;
(7)完成當(dāng)前任務(wù);
(8)還原當(dāng)前節(jié)點(diǎn)的流出方向。
5? 結(jié)? 論
在實(shí)際的項(xiàng)目開發(fā)過程中,工作流管理的好處是能實(shí)實(shí)在在感受到的,工作流管理在項(xiàng)目管理軟件中是有很大的發(fā)展空間的。筆者簡要總結(jié)了以下幾點(diǎn):軟件的過程控制可見,清晰明了,客戶滿意度提高;工作流的可配置性提高,直接減少了軟件開發(fā)、后期維護(hù)成本;增強(qiáng)了系統(tǒng)的適應(yīng)性,能夠快速適應(yīng)客戶提出的流程變化。
參考文獻(xiàn):
[1] 程序人生丶.activiti入坑總結(jié) [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—),女,漢族,上海人,工程師,本科,研究方向:計(jì)算機(jī)軟件。