基于Activiti的工作流引擎在中小企业中的应用研究
2015-03-27任铭亮杨之垚高永祥
任铭亮 杨之垚 高永祥
摘要:随着中小企业信息化的不断发展,企业内部业务流程越来越复杂,流程变化也越来越频繁,传统工作流引擎不能及时满足业务发展的需要。Activiti开源工作流引擎具有快速稳定的优势特征,基于Activiti引擎快速构建符合企业发展业务流程的解决方案,可以使流程随着企业发展而实时变化。
关键词:工作流引擎;Activiti;BPMN2.0;中小企业;工作流模型 文献标识码:A
中图分类号:TP301 文章编号:1009-2374(2015)11-0051-03 DOI:10.13535/j.cnki.11-4406/n.2015.11.026
工作流模型是由工作流管理联盟于1994年提出的工作流管理的体系模型。工作流的概念来源于生产组织和办公自动化领域,通过将工作分解成定义良好的任务、角色,按照一定的规则和过程来执行这些任务,达到提高工作效率和经营管理水平的目标。企业应用工作流管理能提高企业运营效率、改善企业资源利用、提高企业运作的灵活性和适应性等。
众所周知,企业中应用系统的最大特点是不断变化,这种变化常常会带给适应性不强的系统以致命的打击。本文通过深入研究,给出了一种基于Activiti工作流引擎,能够快速构建适应企业流程多变的解决方案。
1 相关理论介绍
1.1 Activiti引擎系统服务结构
Activiti服务包含仓库服务、定义文件、部署文件和支撑数据(如XML流程文件、流程图文件等)。该服务对此提供了存取服务。运行时服务,该服务提供了启动流程、查询流程实例、设置获取流程实例变量等服务功能。任务服务,该服务提供了对用户任务和表单相关的操作服务,如运行时任务查询、认领、完成、删除等功能。标识服务,该服务提供了对系统中的用户和组的管理功能。管理服务,该服务提供了对流程引擎的管理和维护功能,通过获取上下文资源后,对所需处理的事务以命令模式进行拦截处理。历史服务,该服务用于获取正在运行或已经完成的流程实例的信息,并对查询进行了优化。表单服务,该服务可以存取启动和完成任务所需的表单数据并且根据需要来渲染表单。
1.2 Activiti引擎的优势
Activiti引擎最大的优势是采用了PVM(流程虚拟机),支持除了BPMN2.0规范之外的流程格式,与外部服务有良好的集成能力,服务接口清晰,链式API更为优雅。Activiti与其他引擎比较,在开发构建方面优势尤为明显,主要体现在:使用Spring进行引擎配置以及各个Bean的管理,综合使用IoC和AOP技术,使用CXF作为Web服务实现的基础,使用MyBatis进行底层数据库ORM的管理,预先提供Bundle化包能较容易地与OSGI进行集成,通过与Mule ESB的集成和对外部服务的接口,可以构建全面的SOA应用。
2 理论研究
2.1 自定义建模
Activiti modeler是基于开源Signavio web流程编辑器的一个定制版本,提供了对BPMN2.0图形化的规范支持,建模后的流程以json格式进行存储。用户只需要了解业务流程就可以轻松地建立出复杂的工作流程。
2.1.1 动态表单。与业务流程相关的信息有两种方式:一种包含在自身的流程变量中,另一种是通过流程变量引用的外部信息。Activiti允许存储复杂的Java对象作为流程变量,如序列化对象、XML文档等。用户都是在启动流程和完成用户任务时与流程进行交互的。而表单需要在前台解析显示之后才能与用户进行交互。表单所需要显示的属性可以通过表单服务获取。为了能够使前台显示表单变得容易,将流程定义中包含的对流程变量对象存储到Map中,然后在前台使用JSTL和EL对Map内容根据类型不同循环遍历展示。通过获取前台请求的参数,所有被提交的属性都将会作为流程变量存储在数据库中。这意味着在一个表单中新添加一个简单的字段,也会被作为一个新的变量存储。通过表单服务可以从数据库中取出表单属性并交付给前台显示。
2.1.2 外置表单。该种方式常用于基于工作流平台开发的方式,开发人员只需要把表单内容配置好保存到.form文件中即可,然后配置每个节点需要的表单名称,实际运行时通过引擎提供的API读取任务对应的表单内容进行输出。此种方式对于在经常添加新流程的需求较为适用,可以快速发布新流程,把流程设计出来之后再设计表单,最后将两者进行关联。
2.1.3 普通表单。普通表单是最灵活的一种方式,常应用在业务较为复杂的系统中。普通表单的特点是把表单的内容单独存放在一个文件中,存放方式也有两种:一种是把整个流程涉及到的表单放在一个文件,然后根据处理的环节的不同,根据环节名称匹配显示;另一种是每个任务对应一个处理页面,提交任务时根据任务的ID动态指定表单页面。
2.2 模型部署
通过一个压缩文件(Zip、Bar)部署业模型,也可以通过一个独立资源(例如bpmn、xml等)构建部署,部署过程中要注意编码格式,防止出现乱码情况。
2.3 模型热迁移
一个企业在流程模型建立运行一段时间后,业务规则发生变化,需要再添加一个流程节点,此时先修改模型,然后部署,部署成功后,将原有流程中未完结的流程通过迁移的方式,可以迁移到新的流程模型上。在迁移过程中,需要修改Activiti的运行表,将流程任务表中的流程定义ID修改为新的流程定义ID,同时修改运行流程表中的流程定义ID,修改运行时定时任务数据表和运行时流程人员与节点关联表,最后修改历史流程实例表。通过拦截器对原有任务的修改,可以实现未完成的流程热迁移功能。
2.4 核心功能
2.4.1 会签,会签表示同一个任务节点需要多人协同处理,在配置过程中,可以选择并行处理也可以选择顺序处理。处理过程中可以设置处理通过率,如果设置为60%,则审批通过率大于等于该数时即可流转到下一节点。会签符合中小企业的具体办公情况,具有一定的应用场景。
2.4.2 加减签。在某一会签节点,也存在一种特殊的情况,即在审批过程中,需要新加入审批成员或者减少审批成员,此为加减签功能。其中加减签过程,不会改变原有配置。加减签过程中需要修改循环次数,集合人员ID等相关信息。
2.4.3 指派。流程在流转过程中,如果任务处理人有事不能处理时,管理员可以通过指派功能将任务强制性的指派给某人进行处理。指派过程中需要注意业务规则以及人员的组织结构关系。
2.4.4 任务提醒方式。可以设置任务的提醒时刻,Activiti支持邮件方式提醒。
2.4.5 任务驳回。任务审批过程中,如果审批者任务申请者条件不符合,不能继续流转,可以选择驳回到申请人,由申请人重新修改后再次提交。
2.4.6 代理。代理可以分为转派和协助两种方式。转派类似于指派,区别是转派是由任务处理人发起的行为,任务处理人将任务转派给其他人处理,其他人处理后任务会继续向下一个节点流转。协助处理是把任务转给其他人处理,其他人处理之后,任务会回到原任务处理人的代办事项下,而不是继续流转到下一个节点。
3 实例验证
基于上面的分析,给出了基于Activiti引擎实现工作流开发的通用方案。本文以Java EE平台进行设计开发,数据库使用mysql数据库。以请假流程为示例,通过对请假流程的建模、设计、开发、测试,来演示Activiti是如何快速构建企业工作流程的。
3.1 系统设计
总体结构图如图1所示:
图1 系统结构图
首先是管理员登录后,建立工作流模型图,在建模过程中,需要设置节点的处理人变量及表单字段。生成模型后对模型进行部署,此过程也可以是对原有模型进行修改并重新部署。模型部署成功后,需要根据具体业务情况对节点处理人进行配置。都配置完成后,应用程序可以调用工作流引擎接口实现流程的启动、表单数据的读取以及任务的提交处理与驳回处理等。由于activiti集成了Modeler模型编辑界面,所以在Modeler中即可快速建立流程图。本文采用内置表单方式,即在建模过程中,将表单内容在节点图标中设置完成。
3.2 系统实现
建立好模型之后,需要对模型进行部署,部署成功之后就可以正常使用流程了。申请人启动流程后即可看到设计过程中内置表单的内容字段。填写表单提交后流程即可正常流转。通过如下代码即可取到表单内的内容并显示到前台页面。提交任务时通过如下代码即可完成任务的提交,流转到下一环节。
3.3 结果分析
通过如上的框架设计,如果企业中需要添加或修改流程,只需建立新的模型或者修改原有模型并重新部署即可。对于新建立部署的模型,可以直接进行使用;对于修改的模型,部署后还需要对原有模型的流程进行迁移即可。采用上述设计的解决方案,可以明显地提高工作效率,降低维护成本。通过Loadrunner对该流程进行了压力测试,结果
显示性能良好,与其他工作流引擎比较具有一定的优势。
4 结语
本文对基于Activiti的工作流引擎在企业中的实际应用作了深入研究,给出了完整快速地建立工作流模型的解决方案,结合员工请假流程的例子,首先建立员工请假流程模型,即UML活动图,然后对建立的模型进行部署,部署成功后该流程即可以正常使用。但是对于复杂流程的迁移还存在问题,比如迁移后的流程图显示不准确等。下一步的工作是深入完善工作流框架的设计,使该框架具有更广泛的适用性和应用性。
参考文献
[1] 李海波,战德臣,徐晓飞.基于工作流引擎的构件组装体系结构[J].软件学报,2006,(6).
[2] 金正晔,蔡月茹,马伟勤,柳西玲.工作流系统的构件化开发[J].计算机工程与设计,2006,27(23).
作者简介:任铭亮(1983-),男,供职于河南新飞金信计算机有限公司,硕士,研究方向:软件工程、面向对象的分析和设计;杨之垚(1982-),男,河南新飞金信计算机有限公司系统集成工程师,研究方向:计算机系统集成。
(责任编辑:秦逊玉)