摘 要:开发项目管理软件中很多业务都有一级审核、二级审核甚至多级审核机制。近期,在项目管理软件迭代升级的需求分析过程中,客户业务活动审核机制调整了多次需求,也出现了系统流程与业务耦合性增强的问题,对老版本中多套临时表的维护越来越困难。在这种背景下,对开源工作流管理框架进行了研究,Activiti6.0 在技术选型中脱颖而出,继而又对 Activiti6.0是否能够实现具体项目的业务要求做了研究。
关键词:Activiti6.0;BPMN;工作流;项目管理软件
0 引 言
项目管理软件没有普及时,相关人员在项目管理过程中,一部电话加上堆积如山的文件是许多办公桌的标配,流程审核是传统手工递交纸张的方式,逐级找领导签字,效率低下。随着 PC 办公时代的到来,办公人员只需要在项目管理系统中填写工作内容,系统就会按照定义好的流程自动执行,各级审批者可以登录 PC 系统,看到工作内容再进行相应的审批管理操作。办公桌上干净了许多。技术总是不断在更新,人们的需求总是不断增加。项目管理软件也需要不断做出迭代升级,如何实现业务与流程的分离?是不是可以将流程从业务中单独剥离出来做统一的流程管理?基于这些问题笔者开始对工作流管理框架展开研究,以供读者参考,共同完善。
1 什么是工作流
1.1 工作流相关概念
工作流:对工作流程及其各操作步骤之间业务规则的抽象、概括、描述。
工作流程图如图 1 所示。一个比较形象的比喻是:工作流就像是列车的轨道,而所要执行的对象像是一辆自动运行的列车,只要列车启动,它就能沿着轨道一直走到终点,其中的节点就像是列车到达终点途中所要经过的火车站,它会告诉火车下一站是哪里,然后火车就往指定的下一站驶去,一直这样开到终点站。
1.2 BPMN 元素
BPMN 规范的发布是为了让业务流程的全部参与人员对流程可以进行可视化管理,提供一套让所有参与人员都易于理解的语言和标记。2011 年 1 月发布 BPMN2.0 规范。我们首先要熟悉 BPMN 定义的每个元素代表的含义。使用BPMN2.0 的目的是建立简单并且易懂的业务流程模型,但是同时又需要处理高度复杂的业务流程,因此要解决这两个矛盾的要求,需要在规范中定义标准的图形和符号。
BPMN 定义了基本元素。每个元素均有自己对应的图形。除了基本元素,还有很多在其基础上的子元素。最常见的网关,子元素为排他网关、并行网关、包容网关等等。
1.3 BPMN2.0 XML 结构
常见的工作流有 Activiti、OSWorkflow、JBoss jBPM、JFlow、FixFlow 等。怎样的流程描述文件可在不同的工作流中使用?除了图形定义。一份用 XML 语法标准定义,依据 BPMN2.0 标准的流程描述文件,就可在不同的工作流中使用,只要该工作流符合 BPMN2.0 规范。特别标记的是,除了 BPMN2.0 标准的元素及其属性外,工作流的供应商还 可以在不改造已有属性的基础上,增添额外的属性,但是增 加的属性不能与已有的属性产生矛盾,还需要简易易懂。比 如:Activiti 扩展的属性,属性名称统一用“ ctivity;”开头。 Activiti;class=“com.bestpay.DemoService”。
2 工作流选型
基于老版本维护越来越困难,笔者进行了开源工作流管 理框架的研究。市面上开源工作流引擎框架有很多,例如: OSWorkflow、jBPM、JFlow、FixFlow、Activiti 等。在技术 选型中,主要遵循的原则是“主流,适用,简单”。
Activiti6.0 是在 jBPM 版本从 1 到 4 的基础上开发的,是 5.0 的升级版,满足 BPMN2.0 标准。很“主流”:Activiti6.0 用户多,文档丰富,技术经历市场已经成熟,网上社区强大, 很多网站还有专栏讨论,学习周期相对较短,界面简单,有 很好的发展趋势;很“简单”:可控可驾驭,可扩展,轻量 级。Activiti6.0 支持大部分工作流流程,少数工作流流程需要 进行二次开发;很“适用”:满足我们对软件的各种需求。
3 Activiti
Alfresco 软件在 2010 年 5 月 17 日发布 Activiti,它是一 个业务流程管理(BPM)框架,它是覆盖了业务流程管理、 工作流、服务协作等领域的一个开源的、灵活的、易扩展的 可执行流程语言框架。Activiti 基于 Apache 许可的开源 BPM 平台,采用了宽松的 Apache License 2.0 开源协议。创始人 Tom Baeyens 也是 jBPM 的创始人,2010 年,Tom Baeyens 离开了 JBPM 同时加入到 Alfresco 公司。2010 年的 5 月 17 日,Tom Baeyens 发布了第一个 Activiti 版本,即 5.0.alpha 版,之所以把 Activiti 的第一个版本定义为 5.0,外界猜测也 许是为了让它更像 jBPM4 的延续。
3.1 接口简介
在 Activiti 中,流程引擎的实例对象是 ProcessEngine,当创建了流程引擎实例后,在 ProcessEngine 中会初始化一系列接口实例,这些接口实例提供了大部分操作流程引擎数据的业务方法,可以使用 ProcessEngine 中的 getXXXService方法得到这些接口的实例。接口实例具体信息如图 2 所示。
3.2 编写 Activiti 程序
既然这是一个框架,自然就是引进 jar 包,画流程图,然后实现该框架提供的接口来做我们想要做的事情。
前期环境配置工作包括 3 步:Eclipse 插件安装、IDEA插件安装、Activiti 安装。一系列的环境准备工作结束,就可以编写 Activiti 程序。
Activiti 框架会帮我们把对应的数据库表创建起来,它关联的数据库表有 23 个,不同的表头代表不同的用途,对应 Service 的不同 API。
3.2.1 定义工作流
新建一个含有二级审核的工作流程,在每一步任务中,我们都可以指定对应的处理人是谁。流程图如