面向OA系统的工作流引擎研发(上)
关键字:办公自动化系统 工作流引擎 灵活定制 交互协同 权限控制
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类中的方法完成用户提交的任务请求,并返回执行结果。