基于OSWorkflow的设备管理系统
2011-06-19王舒扬柳虹亮
王舒扬,柳虹亮
(长春工业大学 软件职业技术学院,吉林 长春 130022)
0 引 言
工作流管理技术是一种快速发展的技术,正在被越来越多的企业所应用。企业的日常活动中,约有70%是属于流程类活动,如订单出货流程、生产流程、企业内各类申请表单、公文签审、信息传递与签收、公司各类支出与收付等[1]。设备管理(包括设备采购的审批、设备维修等)也属于流程类活动[2]。但与普通流程类活动相比,设备管理具有用户层面广泛、一次性购买量大、审批周期长、生命周期内维护频繁等特点[3]。对大型企业来说,类似电脑等设备的审批周期(包括招标、采购到最终投入使用)可长达2~3个月左右,生命周期更是长达4~6a,期间持续增加的数据量会对工作流系统造成很大的压力[4]。
OSWorkflow是完全用Java语言编写的开放源代码的工作流引擎,具有显著的灵活性及完全面向有技术背景用户的特点[5]。用户可以根据自身的需求,利用这款开源软件设计简单或是复杂的工作流。通过使用,用户就可以把工作中心放在业务和规则的定义上,而不需通过硬编码的方式实现一个Petri网或是一个有穷自动机[6]。用户可以最小代价把OSWorkflow整合到自己的程序中来。
文中设计实现了一个基于OSWorkflow的设备管理系统,并解决了采用Oracle数据库时大量数据查询等关键问题。
1 OSWorkflow工作流引擎
OSWorkflow是三大主流开源工作流引擎之一,它基于FSM(有限状态自动机,FiniteState Machine)理论[7]。每一个state都是由step 和status联合体现出来的,一个state到另一个state的状态跃迁transition依赖于action的执行,在action执行前需要判断动作的执行条件是否满足,在动作执行改变状态前后都可以调用function来执行一些其它操作,动作执行完成后通过判定条件来确定执行结果result[8]。每一个流程都至少有一个或者多个活动的state,流程中至少有一个起始状态,一个或者多个终止状态。OSWorkflow的基本元素及其相互关系如图1所示。
图1 OSWorkflow基本元素关系图
2 设备管理系统总体设计
基于OSWorkflow的设备管理系统采用J2EE技术、Spring框架和Oracle数据库设计并实现,主要分为如下几个模块。
2.1 用户管理模块
对系统内的用户基本信息进行增、删、改、查操作,或对用户的操作权限及所属部门进行变更。
2.2 角色管理模块
对用户的角色信息进行增、删、改、查操作。
2.3 组织管理模块
对用户所属的组织信息进行增、删、改、查操作。
2.4 设备采购模块
对设备申请流程生成的设备采购明细进行采购。
2.5 设备分配模块
针对已经建账的计算机设备,由财务人员进行固定资产卡片的财务信息填报。
2.6 设备申请模块
设备管理系统的核心。一个完整的设备申请流程如下:
1)由“部门提报用户”填报需要的计算机设备申请单,申请单上的内容为提报部门、提报人、提报计算机设备的类型、提报理由。个人申请结束承接2)。
2)由“部门管理用户”进行审批,结果为同意/不同意,同时输入详细的审批意见。如果不同意则申请流程结束;如果同意则进入3)。
3)由“设备管理用户”进行初审,结果为同意/不同意,同时输入详细的审批意见。如果不同意则有两种情况:申请流程结束,或准备进行设备在库分配,进入设备分配流程;如果同意则进入4)。
4)由“设备管理领导用户”进行复审,结果为同意/不同意,同时输入详细的审批意见。如果不同意则申请流程结束;如果同意则进入5)。
5)由计算机设备申请人所在部门的“分管领导用户”进行审批,结果为同意/不同意,同时输入详细的审批意见。如果不同意则申请流程结束;如果同意则进入6)。
6)由“项目管理用户”进行计算机设备详细配置清单的填报,然后由“项目管理领导用户”对配置清单进行审核,如果不同意则返回“项目管理用户”进行重新配置;如果同意则申请流程结束。
7)“设备管理用户”可以根据申请设备清单进行选择是否招标采购,如果“设备管理领导用户”同意招标采购,则生成招标申请书。
8)保存完整的计算机设备申请的记录。
此模块采用了OSWorkflow技术,具体流程如图2所示。
图2 申请模块流程
3 设备管理系统关键问题解决及实现
设备管理系统主要有以下关键问题需要解决:一是过长的申请审批流程造成的大量数据查询失败;二是OSWorkflow仅负责流程的运转,对流程流转中产生的数据,例如审批意见的保存需要做额外的操作。
3.1 大量数据的查询
为了确保工作流程的正确性,OSWorkflow并没有采用直接连接数据库使用sql语句进行流程数据处理的方式,而是使用 WorkflowExpressionQuery对象对数据库进行操作。一个工作流查询语句的处理流程如下:
1)使用FieldExpression对象对可操作项进行映射。FieldExpression继承了Expression类,将工作流表中的字段以及基本操作映射为int型常量,例如public final static int ACTION=4。
2)使用NestedExpression对象创建复合表达式。NestedExpression同样继承了Expression类,其构造函数需要两个参数。一是Expression数组对象,对象中的每个元素可以是另外一个NestedExpression对象,以此形成复合关系,也可是由FieldExpression具体实现的单独的表达式。二是表示各个Expression表达式之间“和”与“或”关系的操作符expressionOperator。
3)使用 WorkflowExpressionQuery创建工作流查询对象。WorkflowExpressionQuery以NestedExpression对象作为参数构建,还定义了表示排序的常量,例如public static final int SORT_DESC=-1。
4)调用AbstractWorkflow类中的getPersistence方法获取 WorkflowStore实例。将 WorkflowExpressionQuery对象作为参数传递,在WorkflowStore接口的具体实现类JDBCWorkflowStore的query方法中对其进行解析并完成sql语句的创建。
5)将创建好的sql语句作为参数传入doExpressionQuery方法中执行,从结果中取出id列放入List对象中,将List对象返回,以返回的id为条件即可与业务表中的设备数据进行关联查询。
因为从设备申报到审批完成进入购买环节的时间很长,且购买数量为公司规模,数据库内可能存在大量未完成的工作流流程数据。在最终返回的List结果中可能包含超过1 000条流程id数据,而Oracle不支持IN子句中List的个数超过1000,从而导致查询失败。为解决这个问题,在OSWorkflow中新增一个数据库表OS_QUERYENTRY,建立JDBCWorkflowStore类的子类并重写其中的doExpressionQuery方法,将原来放入List中的id写入到新增的表OS_QUERYENTRY中。具体步骤如下:
1)组合语句,将结果插入到OS_QUERYENTRY表中。
2)查询序号。
3)删除冗余查询数据。
新增表后的OSWorkflow数据库结构如图3所示。
图3 OSWorkflow数据库结构
实际应用中一个典型查询过程如下:1)准备查询条件集合对象。
2)根据页面选择条件匹配查询条件。
3)装配查询条件。
最终查询效果如图4所示。
3.2 审批过程中审批意见的保存
在OSWorkflow中,函数function是用来定义(引用)并执行外部的商业逻辑和服务,实现OSWorkflow与外部具体的应用之间交互[9]。系统需要保存设备审批过程中的审批意见,只要扩展function接口就可以。function有两种类型:pre function(预处理函数)和post function(后处理函数)。pre function在工作流的一个转变操作执行之前调用,post function在工作流的一个转变操作执行完之后调用[10]。审批意见的保存应在流程流转后,因此,采用post function方式处理。同时,因为流程运转周期长度不定,审批意见应该依附于当前环节的审批动作(action),而不应该依附于整个当前审批环节(step),function在action级别的应用如图5所示。
图4 系统查询效果
图5 function在action级别的应用
具体实现代码如下:
4 结 语
针对设备管理流程用户层面广泛、一次性购买量大、审批周期长、生命周期内维护频繁等特点,采用OSWorkflow作为工作流引擎,在此基础上设计了某电力公司设备管理系统,并解决了Oracle数据库平台下大量数据查询等问题。实际应用结果表明,文中设计的设备管理系统满足企业要求,简化了设备申报流程,大大提高了企业的工作效率。
[1]范玉顺.工作流管理技术基础[M].北京:清华大学出版社,2001.
[2]史美林,杨光信,向勇,等.WFMS:工作流管理系统[J].计算机学报,1999(3):326-328.
[3]李红岩.基于工作流技术的OA系统研究[J].长春工业大学学报:自然科学版,2008,29(3):352-355.
[4]黄世秀,高飞,胡小华.基于工作流的电子政务系统[J].合肥工业大学学报,2004,27(2):140-143.
[5]夏冬,白树仁,邓惠建.基于J2EE的工作流管理系统模型[J].计算机工程与科学,2006,28(3):123-125.
[6]侯秀萍,邵春明,郑虹.基于工作流网的过程模型的合理性分析[J].长春工业大学学报:自然科学版,2006,27(2):162-164.
[7]陈传波,刘黎志.一个基于 Web的工作流引擎及其实现[J].计算机工程与科学,2004,26(11):18-22.
[8]李宏初,冯艳蕾.基于P2P的工作流管理系统研究与应用[J].长春工业大学学报:自然科学版,2007,28(4):435-437.
[9]黄丽梅,李佳林,李瑞然.子流程技术在工作流设计中的应用[J].长春工业大学学报:自然科学版,2010,31(1):62-65.
[10]唐文忠.基于工作流技术的构件模型研究[J].计算机应用研究,2008,25(7):2057-2059.