0 引 言
由于企业业务流程的频繁变更,导致业务流程的管理和控制出现了两个复杂化:一是业务流程处理复杂化;二是参与管理人员权限复杂化。然而,传统的办公自动化(office automation,OA)系统不能适应灵活多变的业务流程处理方式、难以进行权限控制,交互性、协作性明显不足。因此,需要建立一个易于动态修改办公业务流程的,便于权限控制的、支持协同办公的OA系统。
本文解决的核心问题是业务处理流程的可灵活定制性,以及操作权限的绑定性。以工作流引擎为基础,以XML语言描述的业务处理流程为依据,使流程的流动、交互、控制、管理成为机动可变的过程,并通过对各种角色的定义以及对各种角色权限的定义,把权限控制与办公人员联系起来。
1 工作流引擎设计
工作流引擎主要解决复杂业务流程灵活定制和方便更改的问题。引擎的作用相当于一个业务流程管理器,它以一个软件组件(或者构件)的形式运行在使用它的业务应用中。在OA系统中使用工作流引攀技术,可以实现业务流程与应用程序的分离。OA系统通过工作流引擎集中管理业务流程包含的所有过程,引擎为业务流程提供执行环境,并驭动业务流程中各个过程的自动运行。所有的业务流程都在引擎的管理、监控卜运行。当业务流程变更时用户不必修改应用程序,只修改业务流程模型就可以解决流程变更的问题,从而实现了业务流程的灵活定制。
1.1 引擎设计思路
工作流引擎的设计是从够用、灵活和低成木的设计原则出发,不追求工作流引擎的功能的完备和复杂,只实现其中必不可少的功能和特征。基于上述设计原则,引擎的设计主要从以下几个方面考虑:
(1)引擎支持顺序、分支、并发、循环、同步、异步流程的流转;在分支上可以定义条件,实现按条件自动流转,条件转移之间还可设置逻辑关系;在并发流转中,多个活动节点可以同时激活。
(2)用户之间相互协作,交换数据,从而提高工作流引擎处理业务流程的灵活性和适用范围。
(3)如果引擎状态异常,可对引擎进行重新启动,如果重新启动几次后仍然异常,发信号给备份服务器启动引擎,加载原有引擎工作状态,保证关键业务不被中断。
1.2 引擎调度算法
本文采用基于优先级的调度算法,优先级分派策略作为一个函数应用于工作流引擎中。任务的优先级通常是由一个或多个特征参数来确定,特征参数包括:任务提交时间、任务在最坏情况下无中断执行所需的处理器时间、任务截止日期。运行调度算法函数后所有提交的任务组成一个任务表队列,在实施调度时,优先级最高的任务在队首,优先级最低的任务在队尾。采用优先调度优先级最高的任务的算法,能提供确定性的服务质量保证,使系统能够在负载过重情况下保证优先等级高的任务优先调度。调度算法的步骤如下:
(1)遍历任务表队列;
(2)计算任务的优先级;
(3)确定任务的优先等级后,对任务表队列重新排序;
(4)选择优先级最高的任务进行处理;
(5)任务处理完毕,提交;
(6)转至步骤(1),循环执行该调度算法。
1.3 引擎功能设计
工作流引擎作为OA系统的核心部件,其主要功能包含:解释流程定义的业务模型;创建、解释、执行和控制流程实例,管理其运行过程;根据流程定义和工作流相关数据为流程实例的运行进行导航;根据任务之间的关联和任务的执行条件,决定并行或串行执行后续任务;确定任务项目,实现用户意图,提供接口,支持用户交互;与外部资源交互,维护工作流控制数据和工作流相关数据;监控流程实例的运行情况,对异常的流程进行处理。
工作流引擎内部功能结构如图1所示。引擎是流程处理的调度中心和资源分配中心。采用XML语言把实际业务流程描述成计算机可识别的工作流程,XML文档的内容包含预先定义好的任务,以及任务执行顺序,执行规则,执行角色等信息。控制中心负责接受用户发送的任务请求,根据任务类型、任务优先级调用相应的处理模块完成与本次任务相关的操作并将结果返回;流程解释器负责完成流程文件的解析,然后把解析出来的数据存储到数据库中;任务管理负责与流程参与者交互,通过任务管理对任务表进行管理、控制、维护:任务指派负责根据任务的类型确定执行此任务的群体;流转控制负责读取流程实例转换的条件,确定流程实例的状态;路由选扦负责辨别流程实例的状态,选择下一个执行的任务;异常处理负责监控系统内流程实例的运行情况,通过人工和白动处理相结合的方式,使工作流重新恢复到正常流程或预期状态。
图1 工作流引擎内部功能结构
1.4 引擎功能实现工作流引擎的功能实现采用面向对象的方法,将引擎具有的功能分成各个方面,进行开发。引擎主要包含:WorkflowContainerManage类,WorkflowFunctionManage类,WorkflowOperation类,WorkflowExceptionHandel类,类图如图2所示。把这些类封装成组件,相互配合实现工作流引擎的功能。
图2 工作流引擎类图
类的功能及其主要方法:
·WorkflowContainerManage类:完成控制中心的功能。负责接受外部接口发送请求,根据请求的类型调用其它类中的方法完成与请求相关的操作,并返回结果。
StartWorkflowService()启动流程实例,并获得实例信息;
LoadWorkflowService()加载己经存在的流程实例;
StopWorkflowService()终止流程实例;
DisposeWorkflowService0释放流程实例占用的资源;
ExtemalDataExchangeService()外部数据交互;
·WorkflowFunctionManage类:完成任务管理、任务分配、流程控制、路由选择的功能。负责流程实例创建,流程实例状态转换,流程实例相关数据维护,保存系统所涉及的所有流程实例,管理流程实例。流程实例状态包含:Start、Suspend、Wait、Resume、Abort、End。任务状态包含:Run、Lock、Commit、Camplete。
CreatWorkflowlns()创建一个流程实例,初始化所有数据;
AppendWorkflowlns()添加流程实例;
RemoveWorkfIowlns()移除流程实例;
GetWorkflowlns0根据流程名称获取流程实例;
GetInsStatelnfo()获得流程实例的状态信息;
GetAII Workflowlns0得到所有工作流实例的集合;
StartTask()根据任务的优先级,启动一个任务;
CommitTask()提交一个任务;
GetTaskPR1()获取一个任务优先级;
TaskState()根据状态,初始化任务的所有数据;
TaskGetState()根据状态名和当前用户角色获取一个任务状态;
GetTasktNextState()根据任务当前状态,获取任务下一个状态;
IsMatch()判断当前角色是否与该状态要求的角色匹配;
GetUserGrRolelnfo()获取指定状态的用户或角色的信息;
NextTaskName()根据当前的任务的状态获取下一个任务名称;
·WorkflowOoeration类:主要完成流程解释器的功能,定义一些与用户相关的操作。
GetWorkflowInfo()读取工作流配置文件,获取流程绑定的页面流信息;
GetInsInfo()获取用户指定流程状态信息;
GetAlIComplateTask()获取所有已经完成的任务;
GMRoleRight()获取角色的权限;
·WorkflowExceptionHandel类:主要完成异常处理功能;异常处理方式主要有挂起、终止等操作。
WorkflawlnsStateMonitor()流程实例运行状态监控;
WarkflowInsQperationMonitor()流程实例操作监控;
WorkflowInsExceptionHandel()流程异常处理;
以上是类的功能及其主要方法的简要介绍。其中WorkflowCantainerManage类是引擎的核心,通过使用ExtemalDataExchangeService方法与用户进行交互。WorkflawContainerManage类通过调用WorkflowFunctionManage类、WorkflowOperation类与WorkflowExceptionHandel类中的方法完成用户提交的任务请求,并返回执行结果。
2 基于工作流引擎的OA系统
一次业务流程的充成通常需要在一个部门的多名用户之间或多个部门的不同用户之间协作交互进行,通过设置用户的访问与操作权限,将需要协作交互完成的任务发送到协作人的工作区,从而实现业务流程的协作交互处理。基于工作流引擎的OA系统的设计采用二层体系架构,组件化的思想。这二层分别是:客户层、业务处理层、数据层。系统架构如图3所示。
OA系统通过调用工作流引擎对文档的流动、交互、控制、管理进行动态管理,并随时跟踪和监督文档处理过程,实现部门之间、人员之间的协作阁。工作流引擎的作用不仅仅是处理流程,使信息从一个地方流向另一个地方,而且管理这些规则与流程的运作,工作组成员间依据一组己定义的规则及己制定的共同目标交换文档或与任务相关的信息。
流程定义管理对业务流程进行集中管理,首先设计业务流程的数学模型,然后用XML语言进行描述,最后生成该业务流程的XML文档。本文采用XML语言定义了流程描述模式(Schema),如图4所示。在XML Schema中,通过对元素的定义和元素关系的定义来实现对整个流程定义文档性质和内容的定义,流程定义每个步骤的描述只有符合XML Schema的要求,才能被工作流引擎解释器解析。该模式描述了任务状态名称、任务名称、执行任务的角色、任务的下一个状态名称等信息。用户可以根据实际情况添加、修改、删除、查找描述某业务流程的XML文档,从而可以对业务流程进行灵活的定制,实现了业务过程逻辑与信息支撑系统的分离。
图4 XML Schema
传统的权限控制是土体与客体直接发生关系,主体能对客体直接访问,但不能控制主体对客体的间接访问。本文采用基于角色的权限控制,引入中间介质角色,将角色作为用户与权限联系的中间桥梁,用户通过被授予一定的兔色而获得相应权限,从而大大简化权限管理,客服了传统权限控制的不足,是一种高效灵活的权限控制策略。系统将角色的权限与办公人员绑定,用户登录后,依据角色的不同,系统所提供的功能也不相同。流程处理中角色和工作流状态接点绑定,通过工作流自身的逻辑对权限验证后,根据实际的流程继续往下执行。
图3中其它业务逻辑组件的功能如下:
任务表:等待用户处理的由仟务项组成的队列。
系统应用组件:信息的处理、存储和检索;系统管理、使用权限设置等操作。
数据统计分析:对文档数据中心进行数据分析、统计汇总等操作。
流程监控:从工作流引擎中获得各个流程实例的运行状况资料,监督正在执行的任务,可以进行相关的查询、统计,如果发生流程异常状况,可以迅速地反应。
组织、角色管理:设定角色的权限,并把角色分配给用户和部门。
用户通过任务管理启动工作流引擎,调用数据库中的流程定义文档,解析流程定义,推动流程实例的执行,流程实例执行过程如图5所示。
3 应用举例
以某公司的发文流程为例,说明系统如何实现流程的动态变更。该公司发文流程为:系统管理员使用XML语言对该发文流程进行描述,并通过流程定义管理生成一个发文流程的XML文档,发文流程必须按照XML Schema进行编写,如图6所示。如果发文流程变更为:拟稿→部门负责人审核→分管该部门的副总审核→总经理签发→校对→分发→归档,系统管理员只需通过流程定义管理找到发文流程,并依据XML Schema修改该发文流程定义,不需修改应用程序,只需修改流程的XML文档就可以实现发文流程的变更,变更后的发文流程如图7所示。当用户再次执行发文流程时,工作流引擎就会调用数据库中变更后的发文流程定义推动流程的执行。
图6 变更前的流程
图7 变更后的流程
4 结束语
本文运用工作流的理论、方法设计开发了面向OA系统的工作流引擎,组件化的体系结构使信息的收集、存储、处理、流转、发布相分离,既保证了系统的可靠性,又保证了系统的柔性和扩展性。基于工作流引擎的OA系统是一个易于动态修改办公业务流程,便于权限控制,支持协同办公的系统。该系统在某企业使用后,极大地提高了办公效率,规范了业务流程处理,减少了违规操作,缩短了流程处理的生命周期,有效地推动了企业的发展。
系统在流程可视化定义方面未做深入地研究,仅依据工作流管理联盟的规范直接把业务流程转换成XML文档,并对XML文档进行管理,用户在进行流程定义时操作不便,下一步将深入研究流程的可视化定义,开发出一个界面友好,易于操作的流程定义工具。
CIO之家 www.ciozj.com 公众号:imciow