張瑞圓
(西安科技大學 陜西 西安 710054)
Activiti工作流結合外置表單技術研究
張瑞圓
(西安科技大學 陜西 西安 710054)
針對煤礦機械制造企業,實現對產品生產全面管理為目的,設計使用Activiti工作流結合外置表單技術,通過在管理系統中部署測試,得出該方法可有效監控生產進度,保證信息及時而通暢傳遞。構建的過程模型,具有高兼容、可擴展、易移植、靈活穩定等特點,解決了業務流程邏輯繁瑣開發難的問題,進一步提升工作流系統的作用。
Activiti;工作流;外置表單;進度監控
軟件系統在使用工作流管理時,利用生產流程引擎與外部表單結合部署,被稱之為外置表單技術。Activiti是當下熱門的一種工作流引擎,它提供了既方便快捷又簡單靈活的方式,來給業務流程中的流程節點添加表單。添加方案一般分為兩類:使用表單屬性的內置表單渲染和外置表單渲染。在此,設計使用的Activiti結合外置表單可以高效的創建生產流程模型。所建模型發布迅速且易于修改,在系統中運轉穩定。
此種方式對于經常新增流程的管理系統比較適用,它的特長是可以快速發布新流程。開發人員用設計器把流程設計出來之后,再設計外部表單,并使二者關聯就能部署使用。例如在某企業內部的管理系統中,需要創建多級審批的業務流程,或需要業務邏輯處理的請求時,通過運用Activiti添加外置表單創建流程模型,對企業生產進度監控將會十分便利。
外置表單常用于基于工作流平臺開發的方式,代碼書寫較少[1]。使用時只需設計出外部表單模板,將其內容寫好保存到.form文件中,然后配置每個節點需要的表單名稱 (即給form key賦值),通過引擎提供的API讀取Task對應的form內容輸出到頁面即完成了全部過程。
系統獲得部署的外置表單資源,是通過Activiti引擎中的兩串核心代碼。再通過這類方式,就能獲得模板定義文件,從而渲染應用中的表單。表單的內容通常都是以key和value的形式數據保存在引擎中,當流程需要一些特殊處理時可以借助Listener或者Delegate方式實現[2]。Activiti工作流結合外置表單技術的設計結構,如圖1所示。

圖1 設計結構圖
設計思路大致分為三步:第一步,用戶根據企業生產流程圖,利用流程設計器繪制流程模型,再依照實際任務需求創建form(外置表單),并將兩者關聯后打包為流程資源;為滿足系統的部署要求和activiti流程規范,一般情況下,打包好的外置表單資源bar包內,含有一個bpmn文件,一個png文件,還有若干個form文件[3];第二步,將打包好的資源文件(bar或zip),通過預留好的服務接口,部署到系統相應的位置;第三步,用戶啟動部署后的資源,可以有效監控生產進度,管理者能查詢到流程啟動時間、任務狀態、責任人及其所屬部門等相關信息,運行中流程可隨時掛起、激活,流程運行結束后系統輸出歷史記錄。
相互關系指的是系統中引擎、服務、對象以及對象之間的關系。引擎API是與Activiti交互最常用的方式,主要出發點是ProcessEngine。獲得ProcessEngine的方式是使用 org.activiti.engine.ProcessEngines類,該方法會在第一次被調用時初始化,并查找路徑下的activiti.cfg.xml文件,該文件內代碼如圖2所示:

圖2 核心代碼
根據文件中的配置構建流程引擎,從圖2中可以看出,activiti.cfg.xml文件內含有一個id名為processEngineConfiguration的bean,這個bean就是用來構造引擎ProcessEngine的。
由ProcessEngine獲取到工作流的不同服務,并提供了流程引擎的所有接口,Activiti的引擎接口實現了以一個Java類來定義流程服務和用戶任務以及流程中的邏輯[4],如圖3所示。

圖3 引擎接口
實際上,每個服務都會對應一個或多個對象[5]。本文就舉例介紹在工作流中出現的4個對象,以及它們之間的關系,如圖4所示。

圖4 服務對象
1)流程實例啟動通過runtimeService.startProcessInstance()方法啟動,這時引擎會創建一個ProcessInstance(流程實例)。流程實例是根據一條業務數據用流程驅動的入口,兩者一一對應。啟動流程之后,業務和流程已經建立了關聯;
2)Execution的含義就是一個流程實例(ProcessInstance)具體要執行的過程對象。兩者的對象映射關系:ProcessInstance(1)--->Execution(N),其中N>=1;
3)HistoryActivity包含了流程中所有的活動數據,例如開始事件、各種分支 (排他、并行等)、以及Task執行記錄。HistoryActivit和Task是一對一關系;
4)上面說到ProcessInstance是和業務一對一關聯的,和業務數據最親密;Task則是和用戶最親密的(UserTask),用戶每天的待辦事項就是一個個的Task對象。Execution和Task也是一對一關系。
外置表單中,業務流程相關的信息存在流程變量自身內,或者是通過流程變量引用的,Activiti支持復雜java對象的流程變量。人員通過啟動流程和完成用戶任務參與進流程,表單通過UI技術渲染后與人通訊。流程定義包含流程變量中復雜Java類型的屬性放置在一個Map<String,String>內,Map中的一個值就代表一個屬性。這些屬性能在流程變量之上提供一個專有的視圖。
Activiti API中說明了這一屬性信息的方法,UI技術利用這些屬性構建表單。實現表單屬性映射到流程變量,顯示一個表單所需要的屬性配置在 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發布外置表單內容[7];
2)屬性<startEvent activiti:initiator=applyUserId>聲明了流程的發起者,由UI技術使用的表單屬性<name=userId>就可以關聯到表達式${applyUserId};
3)<user Task activiti:candidataeGroups=hr activiti:candidateUsers=hruser>內屬性代表的是任務指派的候選組和候選人;
4)系統通過屬性<process id=leave-formkey>找到部署的外置表單。實現類代碼如圖6所示。

圖6 實現類代碼片段
當控制器處理完請求時,通常會將包含視圖名稱或視圖對象以及一些模型屬性的ModelAndView對象返回到DispatcherServlet。因此,經常需要在控制器中構造ModelAndView對象[8]。ModelAndView代表了MVC Web程序中Model和View的對象,它的作用是封裝這兩個對象的holder,方便一次性返回,不過Model和View仍是分離的。圖中代碼首先實例化了一個View的ModelAndView實例,其次通過id只讀取外置表單,然后添加一個Model對象,最后返回mav。
將打包好的流程資源,部署到先前開發的生產過程管理系統中,測試對生產進度的監控。以某企業“產品加工制造流程流程圖”創建的流程模型為例,如圖7所示。將其各節點關聯對應的外置表單,并和圖形文件一起打包并部署在系統內。

圖7 流程模型
啟動流程,用戶錄入相應信息,實現界面跳轉至“啟動流程”。流程中各個節點對應各項Task(任務),Task合理處置各項form(工作),催動流程正常運轉,對應關系為:節點:Task:form=1:1:1。
按照流程設計為各個任務分派處理人,當流程處于相應的節點,再以當前相應角色登錄系統,系統會在首頁出現“待辦任務”消息提示。當前任務正處于“副總工審核”階段。再以副總工“Jhon Li”的身份登錄,對該流程中當下任務進行簽收辦理。
當一連串任務工作處理完成時,點擊“運行中流程表”,實現生產進度的跟蹤監控界面彈出,如圖8所示。當前流程正運轉到“副總工審核”節點,系統會用紅色框圖標注。將鼠標放到所要查詢的任務節點上,系統功能顯示 “當前處理人”、“任務所屬角色”和“任務類型”三項屬性。

圖8 進度監控
按照流程各節點的指派順序,依次對任務進行簽收辦理,直至流程運行結束,系統會在“結束流程”目錄輸出流程運行的歷史記錄,以備管理者查詢已結束流程的ID、啟動時間、結束時間、結束原因等相關信息。
從系統實例驗證過程可見,用戶在對生產過程管理過程中,流程運行通暢,任務分派有序,人員操作合理。從運行過程展示出,其功能足以達到對生產進度監控的目的,完成了本文最初的目標和預想。最后,通過對流程的創建、配置、打包、部署、運行全過程,表明Activiti工作流結合外置表單技術,具有流程靈活、系統易操作的特點,對整個生產過程的監控更直觀、準確,使工作流管理系統的特點更突出,優勢最大化。
[1]LI Shou-bing,ZHANG You-sheng,LIU Li-hua.Workflow management technology[J].Microcomputer Application,2000,16(6):28-30.
[2]林信良.Spring技術手冊[M].北京:電子工業出版社,2006.
[3]吳越勝,李新磊.Eclipse 3.0程序開發技術詳解[M].北京:清華大學出版社,2010.
[4]Henry Yan.工作流引擎Activiti使用總結[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,FANG 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-),男,陜西省西安市人,助理工程師,碩士。研究方向:生產管理與質量控制。