第四章 基于Activiti的工作流管理系统ABPM
4.1 系统开发背景
具有流程特征的活动或者业务在我们的生活中无处不在,比如企业和单位的员工请假审批,出差报销单的审批流程等等,笔者参与开发的软件项目就有不少设计到审批流程的。那么在没有使用工作流引擎技术的时候,我们一般是怎么实现的呢?就以出差报销流程为例说明。为了实现报销单在不同的角色人员之间流转和审批最终完成报销流程,我们除了报销单实体类表之外,还需要一个状态表来记录报销单的状态信息。系统通过报销单的状态字段来判断报销单所处的状态,决定应该由哪个角色来查看审批报销单。审批人员填写审批信息以后,通过改变状态字段来实现报销单的流转,最终实现整个报销流程。
1 : 1
图4.1 报销单与状态实体关系图
上面的实现方式简单直观,对系统的开销也比较小,但是在实际应用中我们发现这种方式有不少的弊端。比如:
? 流程没有办法调整。如果企业的报销流程保持不变,我们的系统可以一
直正常的工作下去。一旦用户需要对报销流程作出调整,就必须要修改程序源代码,这样就使系统的后期维护成本大大增加,甚至可以说系统难以满足用户要求。在实际情况下,随着企业人事组织机构的变动,业务流程的调整是难以避免的。
? 人员角色和组织结构没有办法改变。这种实现方式必须要实现知道企业
的人员组织结构和角色,不同的流程对应的角色是固化在代码当中的。当企业人员结构或者角色进行调整的时候,系统就不能满足企业日常运
14
行需求。
? 不能满足复杂业务场景需要。以上设计方案的特点是流程只能顺序执行,
但是在一些复杂使用场景下,比如:某些流程需要多人会审;某些流程需要回退;可以让其他的角色代理执行业务等等,上面的设计方案就无能为力了。
? 流程和业务耦合度太高,不利于开发和后期维护。在上面的实现方案中,
业务代码和流程实现是融合在一起的,开发人员必须对企业流程有足够的了解才能进行软件开发。某些成熟的企业有专门的流程设计人员来进行流程管理,但是在上面的设计方案中不借助开发人员的帮助,流程管理人员是没有办法对流程进行再造和调整。
工作流引擎(Workflow Engine)和工作流管理系统就是为了解决上面的问题而产生的。工作流引擎通过对业务操作进行抽象和建模来完成工作流的定义和管理,并可以按照在计算机中预先定义好的逻辑推进工作流实例的执行。工作流引擎是整个工作流管理系统的关键与核心,通过工作流引擎对用户提供工作流定义、实现和管理工作流运行功能,并提供友好的用户界面帮助用户完成流程从定义、执行、监控到后期统计分析的整个生命周期工作。
采用工作流管理软件来帮助我们完成流程定义、流程执行、流程后期管理等方面的工作,使开发人员专注于系统的业务实现,可以减少开发人员工作量,缩短项目的开发时间。然而当许多IT公司在选择工作流软件产品时,往往面临如下的难题:国外大公司的产品价格昂贵,使用门槛高;开源产品功能和质量参差不齐,而且缺乏完善的文档和后期维护保障;从头开始自己开发工作流产品,代价一般的公司难以承受。Activiti作为一款优秀的开源工作流引擎软件,从一开始出现就吸引了作者的注意,本文的目的就在于吸收Activiti优点之上设计实现一款轻量级的简单易用的工作流管理系统。
4.2 系统设计目标
ABPM工作流管理系统目标是建立一套统一的遵循J2EE标准的性能优秀的一体化工作流设计、建模、运行和监控平台,系统对计算机资源消耗少,便于安装和部署。ABPM为企业业务人员、系统开发人员、系统管理人员提供了不同的工作区间,业务人员可以通过基于浏览器的流程设计器来完成企业的业务流程设计,开发人员可以在Eclipse设计器插件中完成业务的开发和调试,系统管理人员可以通过ABPM控制台来查看系统的运行状态,所有的流程和任务信息,并进行必要的设置。不同角色的人员互不干扰,又可以方便的进行协作和交流,提高了工作效率。
(1)灵活的流程调度模型。流程调度是工作流引擎的基本功能,也是最为
15
重要的功能,ABPM系统除了支持常见的顺序、分支、并发、循环、嵌套子流程、多路选择、多路归并等基本流程模式之外,还支持回退、条件路由、并行会审、串行会审等特殊流程调度模式。这些特殊调度模式考虑到了企业流程执行的实际情况,更适合中国的企业文化,这也是ABPM区别与其他工作流管理系统的特色之一。
(2)强大的任务处理机制。ABPM系统具有快速任务查询能力以及多种灵活的任务分配和任务代理机制。通过ABPM系统提供的查询代办任务接口,用户可以即时查看自己的代办任务信息,而不会出现遗漏或者不及时的情况,用户还可以查看流程的运行状态以及历史信息,大大方便了用户的日常工作。ABPM系统默认支持基于角色的任务分配机制,同时还可以在业务系统中指定活动的参与者,或者通过前驱活动指定参与者等方式来进行任务分配。在任务处理方面,通过ABPM可以完成领取、撤销、退回、结束、会审等多种操作。任务代理是现代工作流引擎的特点之一,也是企业日常业务流程中经常出现的一种情况,ABPM支持基于角色和人员的任务代理模式,同时又可以设置代理的有效期,超过有效期自动收回代理权。如果需要的话,可以设置为代理权确认模式,即受委托的人完成业务流程后再由委托人确认方能使操作生效,进一步明确权限的范围。
(3)方便的与用户IDE、开发框架、运行环境融合。ABPM提供了标准的Eclipse工作流程设计器,让开发人员在IDE中就可以完成流程的所有设计和开发工作,并可以很方便的进行测试。ABPM也可以很好的与常见的Spring、Struts、Hibernate框架一起工作,不需要进行额外的配置工作。同时,也可以将ABPM系统嵌入到业务应用系统当中,让用户参与工作流的管理工作,以获取更好的用户体验。
(4)支持“集中/独立/分级”等多种引擎部署模式。ABPM提供了多种灵活的部署模式以满足不同企业的业务需要。集中部署模式:对于一般的中小型规模的企业应用系统,可以将ABPM嵌入到应用系统当中统一部署运行,这种模式比较简单直观。独立部署模式:即业务应用系统和ABPM各自单独部署,两个系统互不干扰,ABPM系统故障不会影响到整个业务系统的正常运行,一般推荐这种模式。分级部署模式:一般适合规模比较大在地域上比较分散的企业,可以在上级单位和下级单位分别部署ABPM系统,来协作完成业务流程。
(5)支持图形化、集中的管理监控和明晰的分域授权管理。相比于单一的命令行控制台和复杂的配置文件,图形化的管理监控界面更能让用户接受,同时降低了用户的学习和使用成本。管理员可以通过基于WEB的控制台来对流程进行深入的跟踪、监控、分析。在控制台上可以看到所有的流程定义文件、流程运行实例、活动实例以及所有流程的运行状态。如果ABPM部署了多个节点,在控制台界面上还可以看到任一节点的所有任务信息,并可以对流程的子流程进行深入跟踪。ABPM系统对系统管理权限可以实现分域授权管理,即对不同业务目录下的所有资源可以设置不同的角色来进行管理,以方便系统角色区分。
16
(6)支持深入的流程执行跟踪和审计功能。ABPM系统提供了强大的流程执行跟踪和审计功能,系统可以根据用户设置的级别来记录不同详细程度的日志信息。包括流程节点执行的时间、执行的角色、从上一节点到下一个节点的处理时间、每个节点的平均处理时间、整个流程的耗时以及系统中的异常信息,都会被记录下来,以方便后期的统计和分析。用户可以通过这些数据来统计业务流程的执行效率,发现业务流程中的问题,管理员也可以通过日志信息来定位和解决系统故障。
(7)支持灵活的流程版本管理机制。ABPM支持热部署模式,即流程变更后无需重启服务器就可以使设置生效。此外,ABPM还支持流程回退、特事特办等个性化需求以满足特殊使用场景。
4.3 ABPM总体架构
工作流引擎是整个工作流管理系统的核心,工作流定义的解析、流程实例化以及流程的执行都由引擎来完成[16]。要完成流程整个生命周期的工作,引擎还需要与外围的模块和资源打交道,包括过程建模工具、用户组织角色模型、任务表、和客户端应用程序等。系统的总体结构图如下:
图4.2 ABPM系统总体结构图
ABPM系统采用分层的设计思想,把系统的不同部分进行抽象,每个部分完
17
成独立的工作,通过接口的方式进行数据交换。处在系统最核心的是工作流引擎,工作流引擎负责完成流程的解析实例化,并把任务安排给合适的角色或者人员来执行。执行的过程和结果在流程监控界面上可以看到。
用户一般不直接和工作流引擎打交道,用户需要做的是通过过程建模工具完成过程的定义,定义好的流程会被工作流引擎引用。除了工作流的相关信息,在系统中还需要定义用户组织、角色和权限模型,通过将用户模型与任务相关联,工作流引擎才能知道在什么时机把任务发送给什么角色的人员来完成。
在系统外围的是客户端应用程序,工作流引擎通过接口的方式完成外围应用的调用。因为外围应用程序的结构不可预知,因此需要精心设计并遵循一定的标准才能保证客户端程序和工作流管理系统能够协同完成业务。
18