任銘亮 楊之垚 高永祥
摘要:隨著中小企業(yè)信息化的不斷發(fā)展,企業(yè)內(nèi)部業(yè)務(wù)流程越來越復(fù)雜,流程變化也越來越頻繁,傳統(tǒng)工作流引擎不能及時滿足業(yè)務(wù)發(fā)展的需要。Activiti開源工作流引擎具有快速穩(wěn)定的優(yōu)勢特征,基于Activiti引擎快速構(gòu)建符合企業(yè)發(fā)展業(yè)務(wù)流程的解決方案,可以使流程隨著企業(yè)發(fā)展而實時變化。
關(guān)鍵詞:工作流引擎;Activiti;BPMN2.0;中小企業(yè);工作流模型 文獻(xiàn)標(biāo)識碼:A
中圖分類號:TP301 文章編號:1009-2374(2015)11-0051-03 DOI:10.13535/j.cnki.11-4406/n.2015.11.026
工作流模型是由工作流管理聯(lián)盟于1994年提出的工作流管理的體系模型。工作流的概念來源于生產(chǎn)組織和辦公自動化領(lǐng)域,通過將工作分解成定義良好的任務(wù)、角色,按照一定的規(guī)則和過程來執(zhí)行這些任務(wù),達(dá)到提高工作效率和經(jīng)營管理水平的目標(biāo)。企業(yè)應(yīng)用工作流管理能提高企業(yè)運營效率、改善企業(yè)資源利用、提高企業(yè)運作的靈活性和適應(yīng)性等。
眾所周知,企業(yè)中應(yīng)用系統(tǒng)的最大特點是不斷變化,這種變化常常會帶給適應(yīng)性不強的系統(tǒng)以致命的打擊。本文通過深入研究,給出了一種基于Activiti工作流引擎,能夠快速構(gòu)建適應(yīng)企業(yè)流程多變的解決方案。
1 相關(guān)理論介紹
1.1 Activiti引擎系統(tǒng)服務(wù)結(jié)構(gòu)
Activiti服務(wù)包含倉庫服務(wù)、定義文件、部署文件和支撐數(shù)據(jù)(如XML流程文件、流程圖文件等)。該服務(wù)對此提供了存取服務(wù)。運行時服務(wù),該服務(wù)提供了啟動流程、查詢流程實例、設(shè)置獲取流程實例變量等服務(wù)功能。任務(wù)服務(wù),該服務(wù)提供了對用戶任務(wù)和表單相關(guān)的操作服務(wù),如運行時任務(wù)查詢、認(rèn)領(lǐng)、完成、刪除等功能。標(biāo)識服務(wù),該服務(wù)提供了對系統(tǒng)中的用戶和組的管理功能。管理服務(wù),該服務(wù)提供了對流程引擎的管理和維護(hù)功能,通過獲取上下文資源后,對所需處理的事務(wù)以命令模式進(jìn)行攔截處理。歷史服務(wù),該服務(wù)用于獲取正在運行或已經(jīng)完成的流程實例的信息,并對查詢進(jìn)行了優(yōu)化。表單服務(wù),該服務(wù)可以存取啟動和完成任務(wù)所需的表單數(shù)據(jù)并且根據(jù)需要來渲染表單。
1.2 Activiti引擎的優(yōu)勢
Activiti引擎最大的優(yōu)勢是采用了PVM(流程虛擬機),支持除了BPMN2.0規(guī)范之外的流程格式,與外部服務(wù)有良好的集成能力,服務(wù)接口清晰,鏈?zhǔn)紸PI更為優(yōu)雅。Activiti與其他引擎比較,在開發(fā)構(gòu)建方面優(yōu)勢尤為明顯,主要體現(xiàn)在:使用Spring進(jìn)行引擎配置以及各個Bean的管理,綜合使用IoC和AOP技術(shù),使用CXF作為Web服務(wù)實現(xiàn)的基礎(chǔ),使用MyBatis進(jìn)行底層數(shù)據(jù)庫ORM的管理,預(yù)先提供Bundle化包能較容易地與OSGI進(jìn)行集成,通過與Mule ESB的集成和對外部服務(wù)的接口,可以構(gòu)建全面的SOA應(yīng)用。
2 理論研究
2.1 自定義建模
Activiti modeler是基于開源Signavio web流程編輯器的一個定制版本,提供了對BPMN2.0圖形化的規(guī)范支持,建模后的流程以json格式進(jìn)行存儲。用戶只需要了解業(yè)務(wù)流程就可以輕松地建立出復(fù)雜的工作流程。
2.1.1 動態(tài)表單。與業(yè)務(wù)流程相關(guān)的信息有兩種方式:一種包含在自身的流程變量中,另一種是通過流程變量引用的外部信息。Activiti允許存儲復(fù)雜的Java對象作為流程變量,如序列化對象、XML文檔等。用戶都是在啟動流程和完成用戶任務(wù)時與流程進(jìn)行交互的。而表單需要在前臺解析顯示之后才能與用戶進(jìn)行交互。表單所需要顯示的屬性可以通過表單服務(wù)獲取。為了能夠使前臺顯示表單變得容易,將流程定義中包含的對流程變量對象存儲到Map中,然后在前臺使用JSTL和EL對Map內(nèi)容根據(jù)類型不同循環(huán)遍歷展示。通過獲取前臺請求的參數(shù),所有被提交的屬性都將會作為流程變量存儲在數(shù)據(jù)庫中。這意味著在一個表單中新添加一個簡單的字段,也會被作為一個新的變量存儲。通過表單服務(wù)可以從數(shù)據(jù)庫中取出表單屬性并交付給前臺顯示。
2.1.2 外置表單。該種方式常用于基于工作流平臺開發(fā)的方式,開發(fā)人員只需要把表單內(nèi)容配置好保存到.form文件中即可,然后配置每個節(jié)點需要的表單名稱,實際運行時通過引擎提供的API讀取任務(wù)對應(yīng)的表單內(nèi)容進(jìn)行輸出。此種方式對于在經(jīng)常添加新流程的需求較為適用,可以快速發(fā)布新流程,把流程設(shè)計出來之后再設(shè)計表單,最后將兩者進(jìn)行關(guān)聯(lián)。
2.1.3 普通表單。普通表單是最靈活的一種方式,常應(yīng)用在業(yè)務(wù)較為復(fù)雜的系統(tǒng)中。普通表單的特點是把表單的內(nèi)容單獨存放在一個文件中,存放方式也有兩種:一種是把整個流程涉及到的表單放在一個文件,然后根據(jù)處理的環(huán)節(jié)的不同,根據(jù)環(huán)節(jié)名稱匹配顯示;另一種是每個任務(wù)對應(yīng)一個處理頁面,提交任務(wù)時根據(jù)任務(wù)的ID動態(tài)指定表單頁面。
2.2 模型部署
通過一個壓縮文件(Zip、Bar)部署業(yè)模型,也可以通過一個獨立資源(例如bpmn、xml等)構(gòu)建部署,部署過程中要注意編碼格式,防止出現(xiàn)亂碼情況。
2.3 模型熱遷移
一個企業(yè)在流程模型建立運行一段時間后,業(yè)務(wù)規(guī)則發(fā)生變化,需要再添加一個流程節(jié)點,此時先修改模型,然后部署,部署成功后,將原有流程中未完結(jié)的流程通過遷移的方式,可以遷移到新的流程模型上。在遷移過程中,需要修改Activiti的運行表,將流程任務(wù)表中的流程定義ID修改為新的流程定義ID,同時修改運行流程表中的流程定義ID,修改運行時定時任務(wù)數(shù)據(jù)表和運行時流程人員與節(jié)點關(guān)聯(lián)表,最后修改歷史流程實例表。通過攔截器對原有任務(wù)的修改,可以實現(xiàn)未完成的流程熱遷移功能。
2.4 核心功能
2.4.1 會簽,會簽表示同一個任務(wù)節(jié)點需要多人協(xié)同處理,在配置過程中,可以選擇并行處理也可以選擇順序處理。處理過程中可以設(shè)置處理通過率,如果設(shè)置為60%,則審批通過率大于等于該數(shù)時即可流轉(zhuǎn)到下一節(jié)點。會簽符合中小企業(yè)的具體辦公情況,具有一定的應(yīng)用場景。
2.4.2 加減簽。在某一會簽節(jié)點,也存在一種特殊的情況,即在審批過程中,需要新加入審批成員或者減少審批成員,此為加減簽功能。其中加減簽過程,不會改變原有配置。加減簽過程中需要修改循環(huán)次數(shù),集合人員ID等相關(guān)信息。
2.4.3 指派。流程在流轉(zhuǎn)過程中,如果任務(wù)處理人有事不能處理時,管理員可以通過指派功能將任務(wù)強制性的指派給某人進(jìn)行處理。指派過程中需要注意業(yè)務(wù)規(guī)則以及人員的組織結(jié)構(gòu)關(guān)系。
2.4.4 任務(wù)提醒方式??梢栽O(shè)置任務(wù)的提醒時刻,Activiti支持郵件方式提醒。
2.4.5 任務(wù)駁回。任務(wù)審批過程中,如果審批者任務(wù)申請者條件不符合,不能繼續(xù)流轉(zhuǎn),可以選擇駁回到申請人,由申請人重新修改后再次提交。
2.4.6 代理。代理可以分為轉(zhuǎn)派和協(xié)助兩種方式。轉(zhuǎn)派類似于指派,區(qū)別是轉(zhuǎn)派是由任務(wù)處理人發(fā)起的行為,任務(wù)處理人將任務(wù)轉(zhuǎn)派給其他人處理,其他人處理后任務(wù)會繼續(xù)向下一個節(jié)點流轉(zhuǎn)。協(xié)助處理是把任務(wù)轉(zhuǎn)給其他人處理,其他人處理之后,任務(wù)會回到原任務(wù)處理人的代辦事項下,而不是繼續(xù)流轉(zhuǎn)到下一個節(jié)點。
3 實例驗證
基于上面的分析,給出了基于Activiti引擎實現(xiàn)工作流開發(fā)的通用方案。本文以Java EE平臺進(jìn)行設(shè)計開發(fā),數(shù)據(jù)庫使用mysql數(shù)據(jù)庫。以請假流程為示例,通過對請假流程的建模、設(shè)計、開發(fā)、測試,來演示Activiti是如何快速構(gòu)建企業(yè)工作流程的。
3.1 系統(tǒng)設(shè)計
總體結(jié)構(gòu)圖如圖1所示:
圖1 系統(tǒng)結(jié)構(gòu)圖
首先是管理員登錄后,建立工作流模型圖,在建模過程中,需要設(shè)置節(jié)點的處理人變量及表單字段。生成模型后對模型進(jìn)行部署,此過程也可以是對原有模型進(jìn)行修改并重新部署。模型部署成功后,需要根據(jù)具體業(yè)務(wù)情況對節(jié)點處理人進(jìn)行配置。都配置完成后,應(yīng)用程序可以調(diào)用工作流引擎接口實現(xiàn)流程的啟動、表單數(shù)據(jù)的讀取以及任務(wù)的提交處理與駁回處理等。由于activiti集成了Modeler模型編輯界面,所以在Modeler中即可快速建立流程圖。本文采用內(nèi)置表單方式,即在建模過程中,將表單內(nèi)容在節(jié)點圖標(biāo)中設(shè)置完成。
3.2 系統(tǒng)實現(xiàn)
建立好模型之后,需要對模型進(jìn)行部署,部署成功之后就可以正常使用流程了。申請人啟動流程后即可看到設(shè)計過程中內(nèi)置表單的內(nèi)容字段。填寫表單提交后流程即可正常流轉(zhuǎn)。通過如下代碼即可取到表單內(nèi)的內(nèi)容并顯示到前臺頁面。提交任務(wù)時通過如下代碼即可完成任務(wù)的提交,流轉(zhuǎn)到下一環(huán)節(jié)。
3.3 結(jié)果分析
通過如上的框架設(shè)計,如果企業(yè)中需要添加或修改流程,只需建立新的模型或者修改原有模型并重新部署即可。對于新建立部署的模型,可以直接進(jìn)行使用;對于修改的模型,部署后還需要對原有模型的流程進(jìn)行遷移即可。采用上述設(shè)計的解決方案,可以明顯地提高工作效率,降低維護(hù)成本。通過Loadrunner對該流程進(jìn)行了壓力測試,結(jié)果
顯示性能良好,與其他工作流引擎比較具有一定的優(yōu)勢。
4 結(jié)語
本文對基于Activiti的工作流引擎在企業(yè)中的實際應(yīng)用作了深入研究,給出了完整快速地建立工作流模型的解決方案,結(jié)合員工請假流程的例子,首先建立員工請假流程模型,即UML活動圖,然后對建立的模型進(jìn)行部署,部署成功后該流程即可以正常使用。但是對于復(fù)雜流程的遷移還存在問題,比如遷移后的流程圖顯示不準(zhǔn)確等。下一步的工作是深入完善工作流框架的設(shè)計,使該框架具有更廣泛的適用性和應(yīng)用性。
參考文獻(xiàn)
[1] 李海波,戰(zhàn)德臣,徐曉飛.基于工作流引擎的構(gòu)件組裝體系結(jié)構(gòu)[J].軟件學(xué)報,2006,(6).
[2] 金正曄,蔡月茹,馬偉勤,柳西玲.工作流系統(tǒng)的構(gòu)件化開發(fā)[J].計算機工程與設(shè)計,2006,27(23).
作者簡介:任銘亮(1983-),男,供職于河南新飛金信計算機有限公司,碩士,研究方向:軟件工程、面向?qū)ο蟮姆治龊驮O(shè)計;楊之垚(1982-),男,河南新飛金信計算機有限公司系統(tǒng)集成工程師,研究方向:計算機系統(tǒng)集成。
(責(zé)任編輯:秦遜玉)