張瑞圓
(西安科技大學(xué) 陜西 西安 710054)
Activiti工作流結(jié)合外置表單技術(shù)研究
張瑞圓
(西安科技大學(xué) 陜西 西安 710054)
針對煤礦機(jī)械制造企業(yè),實(shí)現(xiàn)對產(chǎn)品生產(chǎn)全面管理為目的,設(shè)計使用Activiti工作流結(jié)合外置表單技術(shù),通過在管理系統(tǒng)中部署測試,得出該方法可有效監(jiān)控生產(chǎn)進(jìn)度,保證信息及時而通暢傳遞。構(gòu)建的過程模型,具有高兼容、可擴(kuò)展、易移植、靈活穩(wěn)定等特點(diǎn),解決了業(yè)務(wù)流程邏輯繁瑣開發(fā)難的問題,進(jìn)一步提升工作流系統(tǒng)的作用。
Activiti;工作流;外置表單;進(jìn)度監(jiān)控
軟件系統(tǒng)在使用工作流管理時,利用生產(chǎn)流程引擎與外部表單結(jié)合部署,被稱之為外置表單技術(shù)。Activiti是當(dāng)下熱門的一種工作流引擎,它提供了既方便快捷又簡單靈活的方式,來給業(yè)務(wù)流程中的流程節(jié)點(diǎn)添加表單。添加方案一般分為兩類:使用表單屬性的內(nèi)置表單渲染和外置表單渲染。在此,設(shè)計使用的Activiti結(jié)合外置表單可以高效的創(chuàng)建生產(chǎn)流程模型。所建模型發(fā)布迅速且易于修改,在系統(tǒng)中運(yùn)轉(zhuǎn)穩(wěn)定。
此種方式對于經(jīng)常新增流程的管理系統(tǒng)比較適用,它的特長是可以快速發(fā)布新流程。開發(fā)人員用設(shè)計器把流程設(shè)計出來之后,再設(shè)計外部表單,并使二者關(guān)聯(lián)就能部署使用。例如在某企業(yè)內(nèi)部的管理系統(tǒng)中,需要創(chuàng)建多級審批的業(yè)務(wù)流程,或需要業(yè)務(wù)邏輯處理的請求時,通過運(yùn)用Activiti添加外置表單創(chuàng)建流程模型,對企業(yè)生產(chǎn)進(jìn)度監(jiān)控將會十分便利。
外置表單常用于基于工作流平臺開發(fā)的方式,代碼書寫較少[1]。使用時只需設(shè)計出外部表單模板,將其內(nèi)容寫好保存到.form文件中,然后配置每個節(jié)點(diǎn)需要的表單名稱 (即給form key賦值),通過引擎提供的API讀取Task對應(yīng)的form內(nèi)容輸出到頁面即完成了全部過程。
系統(tǒng)獲得部署的外置表單資源,是通過Activiti引擎中的兩串核心代碼。再通過這類方式,就能獲得模板定義文件,從而渲染應(yīng)用中的表單。表單的內(nèi)容通常都是以key和value的形式數(shù)據(jù)保存在引擎中,當(dāng)流程需要一些特殊處理時可以借助Listener或者Delegate方式實(shí)現(xiàn)[2]。Activiti工作流結(jié)合外置表單技術(shù)的設(shè)計結(jié)構(gòu),如圖1所示。
圖1 設(shè)計結(jié)構(gòu)圖
設(shè)計思路大致分為三步:第一步,用戶根據(jù)企業(yè)生產(chǎn)流程圖,利用流程設(shè)計器繪制流程模型,再依照實(shí)際任務(wù)需求創(chuàng)建form(外置表單),并將兩者關(guān)聯(lián)后打包為流程資源;為滿足系統(tǒng)的部署要求和activiti流程規(guī)范,一般情況下,打包好的外置表單資源bar包內(nèi),含有一個bpmn文件,一個png文件,還有若干個form文件[3];第二步,將打包好的資源文件(bar或zip),通過預(yù)留好的服務(wù)接口,部署到系統(tǒng)相應(yīng)的位置;第三步,用戶啟動部署后的資源,可以有效監(jiān)控生產(chǎn)進(jìn)度,管理者能查詢到流程啟動時間、任務(wù)狀態(tài)、責(zé)任人及其所屬部門等相關(guān)信息,運(yùn)行中流程可隨時掛起、激活,流程運(yùn)行結(jié)束后系統(tǒng)輸出歷史記錄。
相互關(guān)系指的是系統(tǒng)中引擎、服務(wù)、對象以及對象之間的關(guān)系。引擎API是與Activiti交互最常用的方式,主要出發(fā)點(diǎn)是ProcessEngine。獲得ProcessEngine的方式是使用 org.activiti.engine.ProcessEngines類,該方法會在第一次被調(diào)用時初始化,并查找路徑下的activiti.cfg.xml文件,該文件內(nèi)代碼如圖2所示:
圖2 核心代碼
根據(jù)文件中的配置構(gòu)建流程引擎,從圖2中可以看出,activiti.cfg.xml文件內(nèi)含有一個id名為processEngineConfiguration的bean,這個bean就是用來構(gòu)造引擎ProcessEngine的。
由ProcessEngine獲取到工作流的不同服務(wù),并提供了流程引擎的所有接口,Activiti的引擎接口實(shí)現(xiàn)了以一個Java類來定義流程服務(wù)和用戶任務(wù)以及流程中的邏輯[4],如圖3所示。
圖3 引擎接口
實(shí)際上,每個服務(wù)都會對應(yīng)一個或多個對象[5]。本文就舉例介紹在工作流中出現(xiàn)的4個對象,以及它們之間的關(guān)系,如圖4所示。
圖4 服務(wù)對象
1)流程實(shí)例啟動通過runtimeService.startProcessInstance()方法啟動,這時引擎會創(chuàng)建一個ProcessInstance(流程實(shí)例)。流程實(shí)例是根據(jù)一條業(yè)務(wù)數(shù)據(jù)用流程驅(qū)動的入口,兩者一一對應(yīng)。啟動流程之后,業(yè)務(wù)和流程已經(jīng)建立了關(guān)聯(lián);
2)Execution的含義就是一個流程實(shí)例(ProcessInstance)具體要執(zhí)行的過程對象。兩者的對象映射關(guān)系:ProcessInstance(1)--->Execution(N),其中N>=1;
3)HistoryActivity包含了流程中所有的活動數(shù)據(jù),例如開始事件、各種分支 (排他、并行等)、以及Task執(zhí)行記錄。HistoryActivit和Task是一對一關(guān)系;
4)上面說到ProcessInstance是和業(yè)務(wù)一對一關(guān)聯(lián)的,和業(yè)務(wù)數(shù)據(jù)最親密;Task則是和用戶最親密的(UserTask),用戶每天的待辦事項就是一個個的Task對象。Execution和Task也是一對一關(guān)系。
外置表單中,業(yè)務(wù)流程相關(guān)的信息存在流程變量自身內(nèi),或者是通過流程變量引用的,Activiti支持復(fù)雜java對象的流程變量。人員通過啟動流程和完成用戶任務(wù)參與進(jìn)流程,表單通過UI技術(shù)渲染后與人通訊。流程定義包含流程變量中復(fù)雜Java類型的屬性放置在一個Map<String,String>內(nèi),Map中的一個值就代表一個屬性。這些屬性能在流程變量之上提供一個專有的視圖。
Activiti API中說明了這一屬性信息的方法,UI技術(shù)利用這些屬性構(gòu)建表單。實(shí)現(xiàn)表單屬性映射到流程變量,顯示一個表單所需要的屬性配置在 StartFormData FormService.getStartFormData(String processDefinitionId)和 TaskFormData FormService.getTaskFormData(String taskId)里,這些屬性從它們的 FormData返回值中獲得。使用 ProcessInstance Form Service.submitStartFormData(String processDefinitionId,Map<String,String>properties) 和 void FormService.submitStart FormData(String tasked,Map<String,String>properties)來提交表單屬性[6]。
BPMN代碼片段如圖5所示。
圖5BPMN代碼片段
1)屬性<StartEventactiviti:formKey=*>和屬性<userTaskactiviti:formKey=*>都是通過API發(fā)布外置表單內(nèi)容[7];
2)屬性<startEvent activiti:initiator=applyUserId>聲明了流程的發(fā)起者,由UI技術(shù)使用的表單屬性<name=userId>就可以關(guān)聯(lián)到表達(dá)式${applyUserId};
3)<user Task activiti:candidataeGroups=hr activiti:candidateUsers=hruser>內(nèi)屬性代表的是任務(wù)指派的候選組和候選人;
4)系統(tǒng)通過屬性<process id=leave-formkey>找到部署的外置表單。實(shí)現(xiàn)類代碼如圖6所示。
圖6 實(shí)現(xiàn)類代碼片段
當(dāng)控制器處理完請求時,通常會將包含視圖名稱或視圖對象以及一些模型屬性的ModelAndView對象返回到DispatcherServlet。因此,經(jīng)常需要在控制器中構(gòu)造ModelAndView對象[8]。ModelAndView代表了MVC Web程序中Model和View的對象,它的作用是封裝這兩個對象的holder,方便一次性返回,不過Model和View仍是分離的。圖中代碼首先實(shí)例化了一個View的ModelAndView實(shí)例,其次通過id只讀取外置表單,然后添加一個Model對象,最后返回mav。
將打包好的流程資源,部署到先前開發(fā)的生產(chǎn)過程管理系統(tǒng)中,測試對生產(chǎn)進(jìn)度的監(jiān)控。以某企業(yè)“產(chǎn)品加工制造流程流程圖”創(chuàng)建的流程模型為例,如圖7所示。將其各節(jié)點(diǎn)關(guān)聯(lián)對應(yīng)的外置表單,并和圖形文件一起打包并部署在系統(tǒng)內(nèi)。
圖7 流程模型
啟動流程,用戶錄入相應(yīng)信息,實(shí)現(xiàn)界面跳轉(zhuǎn)至“啟動流程”。流程中各個節(jié)點(diǎn)對應(yīng)各項Task(任務(wù)),Task合理處置各項form(工作),催動流程正常運(yùn)轉(zhuǎn),對應(yīng)關(guān)系為:節(jié)點(diǎn):Task:form=1:1:1。
按照流程設(shè)計為各個任務(wù)分派處理人,當(dāng)流程處于相應(yīng)的節(jié)點(diǎn),再以當(dāng)前相應(yīng)角色登錄系統(tǒng),系統(tǒng)會在首頁出現(xiàn)“待辦任務(wù)”消息提示。當(dāng)前任務(wù)正處于“副總工審核”階段。再以副總工“Jhon Li”的身份登錄,對該流程中當(dāng)下任務(wù)進(jìn)行簽收辦理。
當(dāng)一連串任務(wù)工作處理完成時,點(diǎn)擊“運(yùn)行中流程表”,實(shí)現(xiàn)生產(chǎn)進(jìn)度的跟蹤監(jiān)控界面彈出,如圖8所示。當(dāng)前流程正運(yùn)轉(zhuǎn)到“副總工審核”節(jié)點(diǎn),系統(tǒng)會用紅色框圖標(biāo)注。將鼠標(biāo)放到所要查詢的任務(wù)節(jié)點(diǎn)上,系統(tǒng)功能顯示 “當(dāng)前處理人”、“任務(wù)所屬角色”和“任務(wù)類型”三項屬性。
圖8 進(jìn)度監(jiān)控
按照流程各節(jié)點(diǎn)的指派順序,依次對任務(wù)進(jìn)行簽收辦理,直至流程運(yùn)行結(jié)束,系統(tǒng)會在“結(jié)束流程”目錄輸出流程運(yùn)行的歷史記錄,以備管理者查詢已結(jié)束流程的ID、啟動時間、結(jié)束時間、結(jié)束原因等相關(guān)信息。
從系統(tǒng)實(shí)例驗證過程可見,用戶在對生產(chǎn)過程管理過程中,流程運(yùn)行通暢,任務(wù)分派有序,人員操作合理。從運(yùn)行過程展示出,其功能足以達(dá)到對生產(chǎn)進(jìn)度監(jiān)控的目的,完成了本文最初的目標(biāo)和預(yù)想。最后,通過對流程的創(chuàng)建、配置、打包、部署、運(yùn)行全過程,表明Activiti工作流結(jié)合外置表單技術(shù),具有流程靈活、系統(tǒng)易操作的特點(diǎn),對整個生產(chǎn)過程的監(jiān)控更直觀、準(zhǔn)確,使工作流管理系統(tǒng)的特點(diǎn)更突出,優(yōu)勢最大化。
[1]LI Shou-bing,ZHANG You-sheng,LIU Li-hua.Workflow management technology[J].Microcomputer Application,2000,16(6):28-30.
[2]林信良.Spring技術(shù)手冊[M].北京:電子工業(yè)出版社,2006.
[3]吳越勝,李新磊.Eclipse 3.0程序開發(fā)技術(shù)詳解[M].北京:清華大學(xué)出版社,2010.
[4]Henry Yan.工作流引擎Activiti使用總結(jié)[EB/OL].http:// www.kafeitu.me/activiti/2012/03/22/workflow-activiti-action.html,2012.
[5]WANG She-wei,YANG Hai-cheng,MO Rong.Research on dynamic form system for management of aeroengine assembly[J].Computer Engineering and Design,2011(8):133-135.
[6]Tijs Rademakers.Activiti in Action[M].New York:Manning Publications Co,2012.
[7]Martinez J.S,Diaz V.G Garcia-Bustelo B.C.P,Lovelle J.M.C.Isastur Modeler:A tool for BPMN MUSIM[R].CISTI,2011 6th Iberian Conference on,2011.15-18,1-6.
[8]WU Shao-long,F(xiàn)ANG Xiao-fen,DONG Jian-feng.Design and implementation in integration of form system and workflow engine[J].China Mechanical Engineering,2012(1):47-50.
Research on the Activiti workflow combined with external form technology
ZHANG Rui-yuan
(Xi'an University of Science&Technology,Xi'an 710054,China)
In order to manage the whole process in coal mine machinery manufacturing enterprises,the design of the Activiti workflow combined with external form technology can control production schedule effectively,which to ensure the delivery of information quickly and smoothly.By the use of external form technology,to complete the process model this has the characteristics of compatibility,easy to transplant,extensibility and portability,which to solve the difficulty of developing process model,it can enhance the function of workflow system.
Activiti;workflow;external form;schedule monitor and control
TN957.52+9
A
1674-6236(2016)18-0024-03
2016-09-24 稿件編號:201509171
張瑞圓(1989-),男,陜西省西安市人,助理工程師,碩士。研究方向:生產(chǎn)管理與質(zhì)量控制。