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