黄伟建,宋晓洁,王子轩
(1.河北工程大学信息与电气工程学院,河北邯郸 056038;2.北京师范大学 艺术与传媒学院,北京 100875)
办公自动化系统(Office Automation,OA)的核心是对办公室的文书处理。目前,由于各个企业、单位的管理方式千差万别,管理的流程不尽相同,并且事务处理的文书流转过程差异非常大,导致了大多数工作流系统仍然不够灵活,无法满足不断变化的实际需求[1]。针对工作流的动态性等问题,国内外很多科研机构定义了多种工作流模型,试图从不同角度建立能够适应业务过程动态变化的工作流模型,使其具有可伸缩性和可扩展性等适应性特征。文献[2]提出了基于对象Petri网(Object Petri-Net,OPN)和基于 OPN 的文本描述语言和工作流过程定义接口标准,即支持动态工作流的流程建模。文献[3]阐述了一种基于数据库技术的柔性工作流建模方法,将DBMS与工作流技术结合起来,定义了一系列工作流活动的工作流模板及其完整约束,并将工作流进行细分,提供了基于DBMS的工作流管理实现动态性和适应性的一种方法。文献[4]中对工作流的柔性做出了大体的分类与讨论,设计了一个基于面向对象技术开发的工作流管理系统的原型。
本文将工作流技术中的过程逻辑从应用软件中分离出来,使用户可以在不修改应用软件具体功能的情况下,通过修改原有过程模型或定义新的过程模型来改变和扩展系统功能,来提高了软件的适应性和重用率,以便更好地发挥出系统的效能。
主要负责对流程、规则以及活动这三种定义对象的定义和读取。用户在进行相应对象定义时,该组件调用用户的接口,首先应判断用户需要定义的对象,根据定义对象的类型,引擎定义组件得到用户相应的输入,最终将其存入引擎定义数据库中的相应定义对象中。其中,定义存储器是用来判断用户定义的对象并将其拆分成适合存储的形式。活动选择器是用来读取当前的所有活动定义并记录用户选择的结果。引擎定义组件工作原理如图1所示。
主要负责将流程定义拆分成单个活动,并对路由进行解析和运算。该组件可以分解一个完整的流程定义,也可以分解一个流程定义中的某个子串,其输出的结果为单个活动的序列和活动间的路由关系。其中,流程分析器读出流程的定义,并调用运算分析器进行路由运算和活动分解。流程解析组件工作原理如图2所示。
主要负责进程的启动,进程活动的路由控制,状态的判断与活动的执行。包括进程启动器、进程存储器、进程控制器、状态判断器和活动执行器。进程启动器是生成新的进程和活动并将其实例化为实际运行的实例;进程存储器主要是存储进程和活动;进程控制器负责活动的路由流转并通过状态判断器来判断当前活动的状态和当前进程的状态;活动执行器是将当前的活动分配给有权限的用户并且将用户的操作结果记录下来。流转控制组件工作原理如图3所示。
元数据是描述信息资源或数据等对象的数据,一经建立,便可共享。由于元数据也是数据,因此可以用类似数据的方法在数据库中进行存储和获取。如果提供数据元的组织同时提供描述数据元的元数据,将会使数据元的使用变得准确而高效。用户在使用数据时可以首先查看其元数据以便能够获取自己所需的信息[5]。
文中采用结构性元数据来描述流程定义。从数据库设计层面上来看,传统的办公自动化系统中,需求阶段的每项办公业务的功能与流程都是固定不变的,设计阶段会将这些业务流程转化成数据库中固定的一个或多个表。在业务功能和流程有需要变化时,则应该修改底层数据库中的业务表结构,这样的话代价会很大。因为不同业务功能所经历的操作的活动内容和活动的个数不同,所以,采用元数据来描述流程定义和进程。
首先定义单个活动,根据不同的业务流程需要,动态地生成流程定义,就相当于为每一个流程定义实现了一张虚拟的流程定义表。当某一流程定义实例化时,组成一个进程,由活动实例来描述,根据虚拟的流程定义表结构来存储。换句话说当业务功能与流程有需要变化时,不需要触动底层数据库的表结构,只需要重新组织出一张虚拟表即可。这种方法提高了系统的灵活性,减少重复性的开发工作,具有很大的优势。
Java的优点包括跨平台性,较高的安全性,面向对象,良好的健壮性等。JavaBean具有Java语言的所有优点,是Java在组建技术方面的扩展,而JavaBean的存在也离不开Java语言的强大支持[6]。另外,对于JavaBean,用户可以在应用程序构造器工具中使用各种JavaBean组件,而不需要编写任何代码。因此文中采用Java和JavaBean技术来进行实现。
针对工作流的动态修改存在的三个问题[7]—动态性不强、可重用性不高、缺乏对修改操作合法性的检验,本文增加了动态修改组件部分,主要负责对活动、进程、流程的修改。包括修改执行器、修改存储器、级联修改判断器。根据接收到的修改请求判断做何修改,在保证规则定义合法的情况下,将对活动、进程、流程的修改结果存入修改存储器。级联修改判断器是用来判断与修改对象所关联的进程或流程,并对其是否可修改作出判断。动态修改组件工作原理如图4所示。
动态工作流的核心部分就是动态修改,而动态修改策略是动态修改的主要研究内容之一。本文主要是对工作流两方面进行动态修改:流程的定义和进程。
对流程定义的动态修改相当于在工作流中新增加了一个流程定义,但是系统中可能已经有多个进程已经按照旧的流程定义在运行,并且这些进程的执行速度不同,因此处理好已经运行的进程是问题的关键。传统的策略——重新启动策略、继续执行策略、转换策略,并不能很好地处理所遇到的问题。其中,重新启动策略相当于删除了流程中与业务相关的活动,放弃了所有已经在执行的进程,这种代价非常昂贵;继续执行策略是对已经运行的进程不做任何处理,该执行还继续执行,这种策略对实际变化的响应速度比较慢,灵活性比较差;转换策略是自动将已经运行的进程转换为新定义的流程结构来运行,但是已经运行的进程执行速度不同,若将其生硬的转换为新的流程定义会造成无法继续执行的问题。
本文将转换的策略分为两种情况来处理:(1)系统中已经存在需要转换的进程有多个,并且它们从来没有进行过动态修改;(2)系统中已经存在需转换的进程有多个,有的进行过动态修改,有的没有进行过动态修改。
针对以上两种情况,文中实行的转换策略为:(1)对于没有经过任何动态修改的进程,若用户同意按照新的流程定义结构执行,则按照新的流程定义结构继续执行;反之,则按照旧的流程定义结构来执行。(2)对于单个曾经修改过的进程,通常是因为一些实际业务的变动进行的修改,一般不允许转换成新的流程定义结构,但如果需要按照新的流程定义结构来执行,则对其进行修改。
本设计主要包括动态工作流运行所支撑的数据库,动态工作流引擎,WEB应用服务和用户界面。
其中,动态工作流运行所支撑的数据库包括引擎定义数据库与引擎运行数据库两部分,引擎定义数据库属于动态工作流的定义层面,用来存储动态工作流的定义信息,如流程定义、规则定义、角色定义、活动定义等;引擎运行数据库属于工作流的执行层面,用来存储工作流的进程,是用户通过动态工作流引擎采用流程定义来驱动进程运行时候所产生的数据。引擎定义数据库与引擎运行数据库的分离使维护起来更容易些。
动态工作流引擎是指workflow作为应用系统的一部分,并为之提供对各应用系统有决定作用的根据角色、分工和条件的不同决定信息传递路由、内容等级等核心解决方案[8]。
WEB应用服务主要是提供了对办公自动化中业务工作的支持。
用户界面是提供给用户的操作接口,根据管理员和普通用户的不同权限分为工作流管理界面和普通用户界面。动态工作流引擎技术方案设计如图5所示。
本文设计的动态工作流引擎继承了原有的工作流引擎,是在原有的工作流引擎基础上的扩展,是文中整个动态工作流技术设计方案的核心部分,主要包括引擎定义组件、流程解析组件、流转控制组件、动态修改组件以及进程管理。引擎提供了流程定义,并为进程提供执行环境,让其在适当的时候按照规定的路由,将特定的某一活动送达到相应的执行者,来实现业务流程的自动化。与此同时,当工作流外部环境有变化时,还提供对流程定义与进程的动态修改的支持。这样,既能修改流程定义、分配与执行活动,又能了解流程定义修改后对进程的影响。
本文通过动态工作流引擎的设计来完成对工作流的动态修改,使其能够正确地对工作流程进行定义,能够按照用户要求进行动态修改与验证,保证修改后活动、流程、进程的正常执行,同时,修改操作简单,易于用户使用。还需进一步完善的工作包括两点,一是图形化流程定义,目前采用的是字符输入的方式,用户使用时不够直观明了;二是动态的生成表单,由于在业务系统中会存在各种各样的表单,而且表单的元素也很复杂,因此能够动态的生成表单是今后主要研究的一个方向。
[1]曲桂东.工作流技术在OA系统中的应用[D].山东:中国海洋大学,2006.
[2]曹化工,杨曼红.基于对象Petri网的工作流过程定义[J].计算机辅助设计与图形学学报,2001,13(1):13-18.
[3]赵莉香,殷国富,舒 斌.基于数据库管理的柔性工作流建模方法[J].计算机集成制造系统,2003,9(2):112-116.
[4]朱文华,王 茜.企业动态联盟中柔性工作流的研究与实现[D].小型微型计算机系统,2003,24(4):758-762.
[5]许永涛,王延章,陈雪龙.电子政务办公系统中的元数据研究[J].计算机工程与设计,2009,28(4):907-910.
[6]李霏坤.用于数据访问的JavaBean自动生成器设计与实现[J].计算机系统应用,2003(12):28-30.
[7]方明.基于动态工作流的企业办公自动化系统的研究[D]湖北:武汉理工大学,2005.
[8]邓水光,吴朝晖,俞镇.支持动态建模的工作流管理系统的研究与设计[J].计算机辅助设计与图形学学报,2004,16(5):712-717.