基于Infopath实现WEB动态表单的研究

2012-12-17 10:49天地常州自动化股份有限公司陈小林
电子世界 2012年24期

天地(常州)自动化股份有限公司 陈小林 赵 亮 韩 安

1.引言

在笔者煤矿信息化项目的具体实施应用中,很多业务功能都需要通过WEB方式进行简单数据收集,通用的做法是根据每个业务需求点利用ASP.NET进行定制开发,这种做法工作效率低,编程的重复性较高,工作量大。研究一个快速构建数据收集WEB表单系统有助于提高工作效率,将工作重心更好的放在关注核心业务功能实现上。

2.WEB动态表单

WEB动态表单系统借助于Office InfoPath来实现表单设计,由于Office InfoPath支持行业标准的可扩展标记语言(XML)。完全的XML支持使用户通过InfoPath可以在公司间和业务进程间共享信息。基于此,将设计后的Office InfoPath表单使用转换程序转换成使用ASP.NET技术实现的WEB动态表单,从而实现基于WEB的数据展现及收集。

InfoPath的表单模板是通过XML、XSD(XML架构)、XSL、CSS等一系列文件的集合(.XSN后缀结尾的文件包)来定义。通过解包InfoPath模板文件,可以看到如下几个部分内容文件:

(1)一个或多个XML架构文件,该文件用于验证和约束表单模板中的数据。与表单模板关联的每个数据源都具有相应的.xsd文件。

(2)对应于表单模板中每个视图的XSL转换文件。通过该文件可查看供用户填写的表单中所含的显示数据并且将这些数据转换为HTML文件。

(3)用户首次打开基于该表单模板的表单文件时默认的XML数据内容文件。该文件包含表单模板显示在特定控件中的默认数据。当首次打开表单时将调用并且显示这些数据,直到用户在控件中选择了其他值。

(4)脚本文件或托管代码程序集。利用.vbs和.js这些解释性语言实现特定表单行为的脚本。利用.dll、.exe、.cab等提供编程代码和其他业务逻辑的外部文件。

(5)名为Manifest.xsf的表单定义文件,该文件包含有关表单内使用的所有其他文件和组件的信息,包括用户界面自定义、XML架构、视图及部署设置等。

WEB动态表单的实现总体思路也就是将以上所提的解包文件通过程序进行转换,从而形成基于Infopath模板文件,采用ASP.NET技术实现的WEB动态表单。

3.WEB动态表单功能定义

WEB动态表单系统首先可以通过Office InfoPath来创建或者修改表单模板,然后将表单模板上传到Asp.net WEB系统中,通过编写基于XSL的XML转换程序分析并且转换该表单模板,添加Asp.net页面的必须信息,关联Asp.net页面的前后台执行代码,最后生成以ASP.NET技术展现的动态表单。实际使用中将InfoPath表单模板发布到系统中后,用户所需要做的只是通过WEB来浏览和填写表单,无需任何的控件支持。

3.1 表单系统功能设计

(1)生成与InfoPath模板拥有一样外观的Asp.net表单。

(2)转换Infopath部分控件和用户自定义控件成相应的Asp.net WebControls控件:TextBox、CheckBox、DatePicker、RadioButton、DropDownList。

(3)可以自定义动态表单头和动态表单脚显示的内容。

(4)应用XML的数据格式定义文件结合业务系统数据校验接口(例如,对表单上所输入的姓名进行是否存在及是否输入正确的校验),自动进行表单输入数据的动态校验。

3.2 表单管理部分功能

(1)发布表单:完成Infopath表单模板的上传及解包功能。

(2)配置表单:完成上传的Infopath表单模板解包之后的分析及转换功能,将通过转换形成的ASP.NET WEB表单模板、WEB数据验证文件、WEB表单默认数据填充文件等以文件存储的方式进行归类存储。

(3)删除表单:根据需要删除选中的WEB表单模板。

4.Web动态表单转换引擎的设计

通过ASP.NET编写转换逻辑以实现Web表单的转换。通过四个步骤的转换来实现可在浏览器里进行浏览、编辑、提交的WEB动态表单。第一步将Infopath模板文件解包后,随后三个步骤中每个转换步骤中都使用解包后的XSLT文件来实现。

第一步:Infopath模板文件解包。

Infopath的模板文件是一个后缀为xsn的文件,等同于通常所见的cab文件,通过调用一个Windows自带的工具extract.exe来实现文件的解包。解包后有六个文件:manifest.xsf、myschema.xsd、sampledata.xml、template.xml、upgrade.xsl、view1.xsl。其中XML后缀的文件是模板默认数据,XSD后缀的文件是数据Schema,而XSL后缀的文件则是表现,主要是配色方案。接下来的三个转换步骤都是围绕这六个文件展开。

第二步:InfoPathToXml XSL转换。

该转换负责读取InfoPath视图(例如,view1.xsl),并且创建一个适合于InfoPath读取的模板(Template.xml中的XSLT)。InfoPathToXml转换实现在InfoPath controls和ASP.NET控件之间进行映射,即找到与InfoPath controls功能相对应的ASP.NET控件,并且更改相应的XML描述标签,例如:InfoPath controls的下拉列表框对应ASP.NET控件中的Dropdown List,在转换后该控件的描述标签即为“

第三步:XmlToAspxHtml XSL转换。

该转换负责添加一个ASP.NET页面的页面头,附加该页面所需要的样式表及脚本库的引用,以及指定该页面执行时使用的是哪个Code-Behide。

第四步:XmlToHtml XSL转换。

该转换负责创建一个等同于XSL样式表样式的HTML页面从而可以以只读方式显示XML数据。

5.WEB动态表单模板及表单数据管理

考虑到WEB动态表单模板基于XML技术构建,所以表单模板的存储,设计不采用数据库存储,而是以一个文件夹集合方式进行存储,囊括了从Infopath模板转换而来的多个文件,如图1示为转换后的WEB表单模板文件集。

针对WEB动态表单运行时数据,考虑整个WEB动态表单基于XML构建,设计将表单数据直接以XML文本进行存储,在相应的数据库中记录该数据文件在服务器上的相对路径,从而保证了以XML数据流方式同信息化系统的其他功能及业务模块数据共享及互通,如图2所示。

图1 转换后的WEB表单模板文件集

图2 表单数据实体

通过将流程运行时运行数据与用户提交数据及处理数据分别采用数据库及文件两种方式进行存放有如下两个好处:

第一,每个表单的XML数据文件不但可以通过反序列化进入到流程运行时,与流程运行时进行无缝的衔接,也可以直接在Infopath中进行规格化显示,无需再进行数据的导出导入操作。

第二,在每一个任务流程结束后可以方便的将每个XML数据文件直接转换成存档的格式化的文档文件,从而每个任务流程处理的最终结果(格式化表单,审批痕迹,数据)可以以文件方式进行存档、转移、拷贝、打印、分发。

6.结论

通过本次研究,提出了将基于XML技术构建的Office InfoPath客户端与ASP.NET浏览器技术进行有效结合构建WEB动态表单的思路,并给出了具体的实现路径与步骤。实际应用表明,该方案切实减少了在煤矿信息化项目中通用数据收集表单的程序编写量,极大的提高了工作效率。

[1]R.Powell,R.Weeks,C#和.NET架构,袁鹏飞译.北京:人民邮电出版社,2002.

[2]J.Richter,Applied Microsoft.Net Framework Programming,Microsoft Press,2002.

[3]Halstead,Patrick,Developing Solutions With Microsoft Infopath,Microsoft Press,2005.