Activiti工作流结合外置表单技术研究
2016-11-25张瑞圆
张瑞圆
(西安科技大学 陕西 西安 710054)
Activiti工作流结合外置表单技术研究
张瑞圆
(西安科技大学 陕西 西安 710054)
针对煤矿机械制造企业,实现对产品生产全面管理为目的,设计使用Activiti工作流结合外置表单技术,通过在管理系统中部署测试,得出该方法可有效监控生产进度,保证信息及时而通畅传递。构建的过程模型,具有高兼容、可扩展、易移植、灵活稳定等特点,解决了业务流程逻辑繁琐开发难的问题,进一步提升工作流系统的作用。
Activiti;工作流;外置表单;进度监控
软件系统在使用工作流管理时,利用生产流程引擎与外部表单结合部署,被称之为外置表单技术。Activiti是当下热门的一种工作流引擎,它提供了既方便快捷又简单灵活的方式,来给业务流程中的流程节点添加表单。添加方案一般分为两类:使用表单属性的内置表单渲染和外置表单渲染。在此,设计使用的Activiti结合外置表单可以高效的创建生产流程模型。所建模型发布迅速且易于修改,在系统中运转稳定。
此种方式对于经常新增流程的管理系统比较适用,它的特长是可以快速发布新流程。开发人员用设计器把流程设计出来之后,再设计外部表单,并使二者关联就能部署使用。例如在某企业内部的管理系统中,需要创建多级审批的业务流程,或需要业务逻辑处理的请求时,通过运用Activiti添加外置表单创建流程模型,对企业生产进度监控将会十分便利。
1 设计过程
外置表单常用于基于工作流平台开发的方式,代码书写较少[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),通过预留好的服务接口,部署到系统相应的位置;第三步,用户启动部署后的资源,可以有效监控生产进度,管理者能查询到流程启动时间、任务状态、责任人及其所属部门等相关信息,运行中流程可随时挂起、激活,流程运行结束后系统输出历史记录。
2 相互关系
相互关系指的是系统中引擎、服务、对象以及对象之间的关系。引擎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也是一对一关系。
3 表单渲染与属性
外置表单中,业务流程相关的信息存在流程变量自身内,或者是通过流程变量引用的,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。
4 部署实现
将打包好的流程资源,部署到先前开发的生产过程管理系统中,测试对生产进度的监控。以某企业“产品加工制造流程流程图”创建的流程模型为例,如图7所示。将其各节点关联对应的外置表单,并和图形文件一起打包并部署在系统内。
图7 流程模型
启动流程,用户录入相应信息,实现界面跳转至“启动流程”。流程中各个节点对应各项Task(任务),Task合理处置各项form(工作),催动流程正常运转,对应关系为:节点:Task:form=1:1:1。
按照流程设计为各个任务分派处理人,当流程处于相应的节点,再以当前相应角色登录系统,系统会在首页出现“待办任务”消息提示。当前任务正处于“副总工审核”阶段。再以副总工“Jhon Li”的身份登录,对该流程中当下任务进行签收办理。
当一连串任务工作处理完成时,点击“运行中流程表”,实现生产进度的跟踪监控界面弹出,如图8所示。当前流程正运转到“副总工审核”节点,系统会用红色框图标注。将鼠标放到所要查询的任务节点上,系统功能显示 “当前处理人”、“任务所属角色”和“任务类型”三项属性。
图8 进度监控
按照流程各节点的指派顺序,依次对任务进行签收办理,直至流程运行结束,系统会在“结束流程”目录输出流程运行的历史记录,以备管理者查询已结束流程的ID、启动时间、结束时间、结束原因等相关信息。
5 结束语
从系统实例验证过程可见,用户在对生产过程管理过程中,流程运行通畅,任务分派有序,人员操作合理。从运行过程展示出,其功能足以达到对生产进度监控的目的,完成了本文最初的目标和预想。最后,通过对流程的创建、配置、打包、部署、运行全过程,表明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-),男,陕西省西安市人,助理工程师,硕士。研究方向:生产管理与质量控制。