分享

基于Word的工作流表单引擎设计和实现

 yiyiyicz 2012-06-16

 

 基于Word的工作流表单引擎设计和实现

 

 1.引言

工作流技术是当今信息系统中应用最广泛的技术,广泛应用于办公自动化系统、电子政务应用等多个信息化应用领域。根据国际工作流管理联盟(WfMC)的定义工作流是一类能够完全或者部分自动执行的业务过程,根据一系列过程规则,文档、信息或任务能够在不同的执行者之间传递、执行

表单在工作流系统中承载着各种信息的收集和发布的任务,在应用系统中存在着大量的表单驱动的业务流程,业务的灵活多变必然要求工作流表单引擎也要具有灵活、易用的特性。在当今工作流的发展中,缺少一个表单定制工具来定制流程所对应的页面成为新的研究课题。然而,由于UI开发不属于流程引擎的范畴,很多工作流产品不包含表单开发工具,或者只包含一个简单而死板的页面开发工具,对应用的UI开发不能提供很好的帮助。

随着近年来Microsoft Word在办公领域的普及,使得Word已成为各种文档、表单事实上的标准。本文在对Microsoft Word深入研究的基础上,给出了基于Word的工作流表单引擎的设计思路和实现方案,借助Word具有的普及性、易用性等诸多优点,对于实现大量的以表单驱动的业务流程自动化,具有很高的应用价值。

 

 2Microsoft Word对象模型

构建基于Microsoft Word的工作流表单引擎,首先要对Word有足够的了解。一篇Word文档是由若干诸如段(Paragraph),(Table)等对象构成。Word文档中经常操作的对象主要有以下一些:

Application : 代表Word应用程序。

Documents : Word当前打开的所有文档对象所组成的集合。

Document : 代表一篇文档。

InlineShapes : 代表由InlineShape对象组成的集合,代表文档、区域或选定内容的所有嵌入式图形。

InlineShape : 代表文档的文字层中的对象,只能是图片、OLE对象或ActiveX控件。

Paragraphs : 代表所选内容、范围或文档中的所有段落。

1 Word对象模型

Fig.1 Word Object Model

Range : 该对象代表文档中的一个范围。每一个Range 对象由一起始和一终止字符位置定义。

若要针对Microsoft Word开发解决方案,就需要与Word对象模型[1] (1)进行交互。

3.表单信息模型的建立

针对政府、企业需要处理的大量的基于表单的业务流程,本文提出了一种利用表单来表达工作流信息的方法,流程运行中的各种信息,如表单的结构、表单的数据、该表单所代表的业务类型和内容、任务创建时间、任务涉及到的参与者等信息都是记录在表单中的。表单是这种模式下的主要信息载体,也是系统和用户交互的主要方式。

定义1(过程) 一个过程是定义好的一个有向图p=(A,L),这里A={αi|i=1…,n}是活动集;L{(αi,αj)|αi,αjA}是链接集,一个链接如(αi,αj)表示第i个活动是第j个活动的前置活动。

定义2(表单) 一个表单Fk(k=1,,K),由一系列的表单单元组成,每个表单单元由最基本的表单元素组成,Fk={Um|m=1,,M},Um={fl|l=1,,L},f表示表单的基本元素。

根据表单信息的范围和表现形式,可以把表单信息模型分为三层:表示层、数据层和控制层,其结构如图2所示:

2 表单信息模型

Fig.2 Form Information Model

表示层即表单的外观,包括表单的样式和表单域。表单样式主要由文字、表格、图形等元素构成。表单域是进行数据交互的接口,常用的表单域对象有:标签(Label)、文本框(TextBox)、复选框(CheckBox)、选项按钮(OptionButton)等。

数据层包含了表单中的全部数据信息。其中,表单域数据是数据信息的主体,用于系统与用户以及用户之间的数据交互。表单的相关信息包含两部分内容:用户基本信息和用户权限。其中,用户的基本信息包括参与者的部分重要属性,如姓名、角色和E-Mail等。用户的权限信息描述了不同的参与者对表单的操作权限,如只读、只写、无权、可见或不可见等。

控制层用于控制表示层和数据层的实现。对表示层的控制主要包括对表单样式和表单域的添加、编辑、删除等,对各种表单元素属性的控制,如颜色、大小、位置等,以及对表单域对象的属性控制,如默认值、名称等。对数据层的控制,目的是将表单的相关数据提取出来进行处理,并存放到后台数据库中。

4Word表单引擎的系统设计

4.1 需求分析

在政府、企业中大量的以表单驱动的业务流程中,表单是处于核心地位的,表单的样式、内容和组合方式决定了业务的种类和特点。因此,客观上要求表单引擎在工作流管理系统中应该成为核心部件,并以此作为整个系统设计的根本原则和出发点。

在软件开发的开始阶段,通常由用例图来描述客户的需求,用例图用图形化的方式表示系统需求,具有简单、直观的特点。Word表单引擎的用例图如下:

3 用例图

Fig.3 Use-Case Diagram

4.2 总体设计

从总体架构上分析,工作流管理系统是以表单引擎为核心和基础的一套悬挂式系统,表单引擎的内部结构以及与其他子系统的关系如图4所示:

4 表单引擎结构

Fig.4 Structure of the Form Engine

表单定义工具属于表单信息模型中的表示层。根据表单定义创建表单,包括表单样式和表单域。

表单管理器、表单调度管理器和访问控制管理器同属于表单信息模型中的控制层。表单管理器主要功能包括创建新表单、修改现存表单和删除表单等操作。表单调度管理器在工作流引擎的支持下,实现表单的发布和提交。访问控制管理器在相关服务系统得支持下,对组织机构中与该业务相关的参与者进行访问控制。

表单数据属于表单信息模型中的数据层。其中,持久化数据是指表单中的各个元素,将以模板的形式整体存入模板库。动态数据是指表单域中的数据,在提交的同时会发送到数据库中相应的数据表中。数据访问基础服务则通过ADO(ActiveX Data Objects)来实现表单引擎与后台数据库的连接。

4.3 数据库设计

根据系统的总体设计,表单引擎的数据库结构如图5所示:

5 数据库设计

Fig.5 Database Design

其中,表单和数据项之间是一对多的关系,它们共同构成表单模板。表单实例和数据实例之间也是一对多的关系,它们构成具体的表单实例。同样,同一表单模板也可创建多个表单实例。

5Word表单引擎的系统设计

5.1 Word电子表单的创建

1)创建表单样式。根据相关的业务需求和规范,利用Word所提供的功能,可以在已有的Word文档上进行修改,也可以重新定义一份表单。这样完成的表单是静态的,不具有数据交互能力。

2)添加表单域。将创建表单域的功能以Word工具栏的形式提供给用户。Word中,CommandBars集合代表 Microsoft Word 中的菜单栏和所有的工具栏,要自定义工具栏,首先创建CommandBars对象,如:myCommandBar,通过CommandBars.Add()方法将其添加到CommandBars集合,再定义各Button对象,再用myCommandBar.Controls.Add()方法将自定义Button对象添加到工具栏。

表单域实质上是ActiveX控件,在Word中可用OLE编程标识符(有时也称ProgID)创建Automation对象。表1列出了AxtiveX控件的OLE编程标识符[4]


1 ActiveX控件的OLE编程标识符

Tab.1 OLE programmatic identifier of the ActiveX controls

控件名称

OLE编程标识符

控件名称

OLE编程标识符

标签

Forms.Label.1

框架

Forms.Frame.1

文本框

Forms.TextBox.1

图像

Forms.Image.1

复选框

Forms.CheckBox.1

滚动条

Forms.ScrollBar.1

组合框

Forms.ComboBox.1

命令按钮

Forms.CommandButton.1

列表框

Forms.ListBox.1

选项按钮

Forms.OptionButton.1

要在光标所在处添加表单域,需要用到Selection对象和InlineShapes集合对象,前者代表某个选定的范围或插入点,后者代表文档、区域或选定内容中的所有嵌入式图形。利用InlineShapes集合对象的AddOLEControl方法,并设置ClassType(对象类型)的值为相应的OLE编程标识符,可以将控件添加至文档,如:添加文本框:ClassType:="Forms.TextBox.1"

为使表单域能通过鼠标拖动而自由移动位置,需要将InlineShapes对象转换位Shape对象,可以使用ConvertToShape方法来完成图形的类型转换。

5.2 Word电子表单的维护

维护一张已创建的Word电子表单,可使用Word自身的功能编辑表单样式,使用表单引擎的扩展功能修改其中的表单域。以编辑文本框为例,主要涉及到的属性[4]如表2所示:

2 文本框常用属性

Tab.2 Common properties of the TextBox Object

属性名称

功能描述

属性名称

功能描述

Name

名称,唯一标识

TextAline

文本对齐方式(left,center,right)

Text

文本框的取值

ScrollBars

滚动条(horizontal,vertical,both)

Height

高度

Backcolor

背景色

Width

宽度

Bordercolor

边框色

PassWordChar

密码字符

Visible

可见性

Multiline

多行显示(True,False)

Enabled

可用性

在为Application对象编写过程之前,必须创建新的类模块并声明一个包含事件的Application类型对象。例如,假定已创建新的类模块并命名为EventClassModule。该类模块包含下列代码:

Public WithEvents App As Word.Application

定义了包含事件的新对象后,为其编写事件过程,双击鼠标时,App_WindowBeforeDoubleClick()事件发生,单击鼠标右键,App_WindowBeforeRightClick()事件发生,在相应的过程中自定义功能。

在运行过程前,必须将类模块中已声明的对象连接到Application对象,可在任何模块中实现过程:Register_Event_Handler(),使App对象指向Microsoft Word Application。事件发生时,将运行类模块中的事件过程,即根据对象的不同类型,弹出相应的属性设置窗体,对各个属性进行设置。

5.3 访问控制

表单引擎可以对组织机构中的各个角色以及个人进行权限设置,主要支持3种类型的访问控制:

(1) Word自身功能的控制

(2) 对表单引擎扩充功能的控制

(3) 对表单域的访问控制

Word菜单栏、工具栏(包括表单引擎自定义的工具栏)中的每一个子项目都有唯一的标识,通过该标识可以设置每一个项目的可见性与可用性,对应于VisibleEnabled属性,从而达到限制Word功能的目的。

同样,在表单中的表单域对象是一个集合,通过ActiveDocument.Shapes.count可以统计出表单中表单域的总个数,其中的表单域对象可表示为Shapes(i).OLEFormat.Object,其中i是索引号,因此只需对各个对象的VisibleEnabled属性进行相应得设置,即可实现对表单域的控制。

5.4 使用Jmail组件发布表单

Word表单引擎不是基于B/S结构的,表单的流转方式是在邮件服务器的支持下,通过E-Mail方式实现的。E-Mail服务和技术自从因特网建立到现在,已经发展的非常成熟,普及率也很高,因此表单流转采用E-Mail方式实现,更容易被用户接受和使用。

在众多的邮件发送组件中,Jmail组件功能强大,可支持多种格式的邮件发送,比如以HTMLTXT的方式发送,用户也可设置邮件发送的优先级等。Jmail支持发送附件,并具有密件发送/抄送/紧急信件发送能力,此外Jmail能详细的记录日志,便于维护,最关键的是Jmail是免费的,因此可以降低开发成本,所以非常值得使用。

在系统中注册Jmail.dll控件,将控件添加到工程中,就可以调用Jmail的各项功能。例如:可以使用Subject属性设定消息的标题,用Body属性设置邮件正文,用RecipientsSender属性指定收件人、发件人的邮件地址,ServerAddress指定邮件服务器的地址等,最后调用Execute()方法将表单送出。

5.5 表单引擎与数据库的连接

表单引擎通过ADO(ActiveX Data Object)建立无源数据库连接。ADO[4]Microsoft数据库应用程序开发接口,是建立在OLE DB之上的高层数据库访问技术。它封装了OLE DB供的接口,相比于OLE DB提供者,ADO的接口可以使程序员在更高级别上进行数据交互,大大简化了程序编制,增加了程序的可移植性。而采用无源数据库连接方式,无需用户配置ODBC环境,利用ADO就可通过代码进行连接。

在连接数据库前,需要在工程中引入 Microsoft ActiveX Data Objects 2.0 Library,然后创建Connection对象并设置ConnectionString属性进行连接。ConnectionString为可读写string类型,用于指定一个连接字符串,告诉ADO如何连接数据库,如:

ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=DB_NAME;Data Source=127.0.0.1"

其中Initial Catalog指定数据库的名称,Data Source指定数据库服务器的IP地址。

open方法打开建立的连接,创建结果集对象Recordset,根据需求编写SQL语句,利用Connection对象的Execute()方法可将结果集返回到客户端,进行各种处理。

最后用Connection对象的Close方法关闭已建立的连接。

6.结论

传统的基于HTML/XML表单的工作流管理系统(WFMS),在用户友好性、扩展性和灵活性方面存在较大的缺陷,采用基于Word的表单引擎能够很好的解决这些问题。在实践中,我们已经将Word表单引擎与工作流管理系统集成,通过在具体业务中的应用和对应用情况的认真分析,得出结论如下:

(1) 基于Word构建的工作流表单引擎能使用户轻松的创建、维护各种动态电子表单而不需要用户具有专业的技术,且能对企业、政府中现存的大量静态电子表单进行升级,较好的解决了各种表单驱动的业务流程中表单的不确定性问题。

(2) Word表单引擎采用电子邮件作为表单流转的方式,提高了工作流系统的灵活性和易用性,较好的解决了各种表单驱动的业务中流程的不确定性问题。

(3) Word电子表单继承了Microsoft Word的全部功能,功能强大,操作简单,且具有所见即所得的打印特性,使得政府或企业可以轻松完成电子表单的打印存档工作,而且用户不需要花费专门的时间和经费接受培训,就可以很好的适应系统,从多方面为组织降低成本。

 

基于表单的分布式工作流系统研究与实现

http://www.docin.com/p-130337217.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多