天地(常州)自動(dòng)化股份有限公司 陳小林 趙 亮 韓 安
在筆者煤礦信息化項(xiàng)目的具體實(shí)施應(yīng)用中,很多業(yè)務(wù)功能都需要通過(guò)WEB方式進(jìn)行簡(jiǎn)單數(shù)據(jù)收集,通用的做法是根據(jù)每個(gè)業(yè)務(wù)需求點(diǎn)利用ASP.NET進(jìn)行定制開發(fā),這種做法工作效率低,編程的重復(fù)性較高,工作量大。研究一個(gè)快速構(gòu)建數(shù)據(jù)收集WEB表單系統(tǒng)有助于提高工作效率,將工作重心更好的放在關(guān)注核心業(yè)務(wù)功能實(shí)現(xiàn)上。
WEB動(dòng)態(tài)表單系統(tǒng)借助于Office InfoPath來(lái)實(shí)現(xiàn)表單設(shè)計(jì),由于Office InfoPath支持行業(yè)標(biāo)準(zhǔn)的可擴(kuò)展標(biāo)記語(yǔ)言(XML)。完全的XML支持使用戶通過(guò)InfoPath可以在公司間和業(yè)務(wù)進(jìn)程間共享信息?;诖?,將設(shè)計(jì)后的Office InfoPath表單使用轉(zhuǎn)換程序轉(zhuǎn)換成使用ASP.NET技術(shù)實(shí)現(xiàn)的WEB動(dòng)態(tài)表單,從而實(shí)現(xiàn)基于WEB的數(shù)據(jù)展現(xiàn)及收集。
InfoPath的表單模板是通過(guò)XML、XSD(XML架構(gòu))、XSL、CSS等一系列文件的集合(.XSN后綴結(jié)尾的文件包)來(lái)定義。通過(guò)解包InfoPath模板文件,可以看到如下幾個(gè)部分內(nèi)容文件:
(1)一個(gè)或多個(gè)XML架構(gòu)文件,該文件用于驗(yàn)證和約束表單模板中的數(shù)據(jù)。與表單模板關(guān)聯(lián)的每個(gè)數(shù)據(jù)源都具有相應(yīng)的.xsd文件。
(2)對(duì)應(yīng)于表單模板中每個(gè)視圖的XSL轉(zhuǎn)換文件。通過(guò)該文件可查看供用戶填寫的表單中所含的顯示數(shù)據(jù)并且將這些數(shù)據(jù)轉(zhuǎn)換為HTML文件。
(3)用戶首次打開基于該表單模板的表單文件時(shí)默認(rèn)的XML數(shù)據(jù)內(nèi)容文件。該文件包含表單模板顯示在特定控件中的默認(rèn)數(shù)據(jù)。當(dāng)首次打開表單時(shí)將調(diào)用并且顯示這些數(shù)據(jù),直到用戶在控件中選擇了其他值。
(4)腳本文件或托管代碼程序集。利用.vbs和.js這些解釋性語(yǔ)言實(shí)現(xiàn)特定表單行為的腳本。利用.dll、.exe、.cab等提供編程代碼和其他業(yè)務(wù)邏輯的外部文件。
(5)名為Manifest.xsf的表單定義文件,該文件包含有關(guān)表單內(nèi)使用的所有其他文件和組件的信息,包括用戶界面自定義、XML架構(gòu)、視圖及部署設(shè)置等。
WEB動(dòng)態(tài)表單的實(shí)現(xiàn)總體思路也就是將以上所提的解包文件通過(guò)程序進(jìn)行轉(zhuǎn)換,從而形成基于Infopath模板文件,采用ASP.NET技術(shù)實(shí)現(xiàn)的WEB動(dòng)態(tài)表單。
WEB動(dòng)態(tài)表單系統(tǒng)首先可以通過(guò)Office InfoPath來(lái)創(chuàng)建或者修改表單模板,然后將表單模板上傳到Asp.net WEB系統(tǒng)中,通過(guò)編寫基于XSL的XML轉(zhuǎn)換程序分析并且轉(zhuǎn)換該表單模板,添加Asp.net頁(yè)面的必須信息,關(guān)聯(lián)Asp.net頁(yè)面的前后臺(tái)執(zhí)行代碼,最后生成以ASP.NET技術(shù)展現(xiàn)的動(dòng)態(tài)表單。實(shí)際使用中將InfoPath表單模板發(fā)布到系統(tǒng)中后,用戶所需要做的只是通過(guò)WEB來(lái)瀏覽和填寫表單,無(wú)需任何的控件支持。
(1)生成與InfoPath模板擁有一樣外觀的Asp.net表單。
(2)轉(zhuǎn)換Infopath部分控件和用戶自定義控件成相應(yīng)的Asp.net WebControls控件:TextBox、CheckBox、DatePicker、RadioButton、DropDownList。
(3)可以自定義動(dòng)態(tài)表單頭和動(dòng)態(tài)表單腳顯示的內(nèi)容。
(4)應(yīng)用XML的數(shù)據(jù)格式定義文件結(jié)合業(yè)務(wù)系統(tǒng)數(shù)據(jù)校驗(yàn)接口(例如,對(duì)表單上所輸入的姓名進(jìn)行是否存在及是否輸入正確的校驗(yàn)),自動(dòng)進(jìn)行表單輸入數(shù)據(jù)的動(dòng)態(tài)校驗(yàn)。
(1)發(fā)布表單:完成Infopath表單模板的上傳及解包功能。
(2)配置表單:完成上傳的Infopath表單模板解包之后的分析及轉(zhuǎn)換功能,將通過(guò)轉(zhuǎn)換形成的ASP.NET WEB表單模板、WEB數(shù)據(jù)驗(yàn)證文件、WEB表單默認(rèn)數(shù)據(jù)填充文件等以文件存儲(chǔ)的方式進(jìn)行歸類存儲(chǔ)。
(3)刪除表單:根據(jù)需要?jiǎng)h除選中的WEB表單模板。
通過(guò)ASP.NET編寫轉(zhuǎn)換邏輯以實(shí)現(xiàn)Web表單的轉(zhuǎn)換。通過(guò)四個(gè)步驟的轉(zhuǎn)換來(lái)實(shí)現(xiàn)可在瀏覽器里進(jìn)行瀏覽、編輯、提交的WEB動(dòng)態(tài)表單。第一步將Infopath模板文件解包后,隨后三個(gè)步驟中每個(gè)轉(zhuǎn)換步驟中都使用解包后的XSLT文件來(lái)實(shí)現(xiàn)。
第一步:Infopath模板文件解包。
Infopath的模板文件是一個(gè)后綴為xsn的文件,等同于通常所見的cab文件,通過(guò)調(diào)用一個(gè)Windows自帶的工具extract.exe來(lái)實(shí)現(xiàn)文件的解包。解包后有六個(gè)文件:manifest.xsf、myschema.xsd、sampledata.xml、template.xml、upgrade.xsl、view1.xsl。其中XML后綴的文件是模板默認(rèn)數(shù)據(jù),XSD后綴的文件是數(shù)據(jù)Schema,而XSL后綴的文件則是表現(xiàn),主要是配色方案。接下來(lái)的三個(gè)轉(zhuǎn)換步驟都是圍繞這六個(gè)文件展開。
第二步:InfoPathToXml XSL轉(zhuǎn)換。
該轉(zhuǎn)換負(fù)責(zé)讀取InfoPath視圖(例如,view1.xsl),并且創(chuàng)建一個(gè)適合于InfoPath讀取的模板(Template.xml中的XSLT)。InfoPathToXml轉(zhuǎn)換實(shí)現(xiàn)在InfoPath controls和ASP.NET控件之間進(jìn)行映射,即找到與InfoPath controls功能相對(duì)應(yīng)的ASP.NET控件,并且更改相應(yīng)的XML描述標(biāo)簽,例如:InfoPath controls的下拉列表框?qū)?yīng)ASP.NET控件中的Dropdown List,在轉(zhuǎn)換后該控件的描述標(biāo)簽即為“ 第三步:XmlToAspxHtml XSL轉(zhuǎn)換。 該轉(zhuǎn)換負(fù)責(zé)添加一個(gè)ASP.NET頁(yè)面的頁(yè)面頭,附加該頁(yè)面所需要的樣式表及腳本庫(kù)的引用,以及指定該頁(yè)面執(zhí)行時(shí)使用的是哪個(gè)Code-Behide。 第四步:XmlToHtml XSL轉(zhuǎn)換。 該轉(zhuǎn)換負(fù)責(zé)創(chuàng)建一個(gè)等同于XSL樣式表樣式的HTML頁(yè)面從而可以以只讀方式顯示XML數(shù)據(jù)。 考慮到WEB動(dòng)態(tài)表單模板基于XML技術(shù)構(gòu)建,所以表單模板的存儲(chǔ),設(shè)計(jì)不采用數(shù)據(jù)庫(kù)存儲(chǔ),而是以一個(gè)文件夾集合方式進(jìn)行存儲(chǔ),囊括了從Infopath模板轉(zhuǎn)換而來(lái)的多個(gè)文件,如圖1示為轉(zhuǎn)換后的WEB表單模板文件集。 針對(duì)WEB動(dòng)態(tài)表單運(yùn)行時(shí)數(shù)據(jù),考慮整個(gè)WEB動(dòng)態(tài)表單基于XML構(gòu)建,設(shè)計(jì)將表單數(shù)據(jù)直接以XML文本進(jìn)行存儲(chǔ),在相應(yīng)的數(shù)據(jù)庫(kù)中記錄該數(shù)據(jù)文件在服務(wù)器上的相對(duì)路徑,從而保證了以XML數(shù)據(jù)流方式同信息化系統(tǒng)的其他功能及業(yè)務(wù)模塊數(shù)據(jù)共享及互通,如圖2所示。 圖1 轉(zhuǎn)換后的WEB表單模板文件集 圖2 表單數(shù)據(jù)實(shí)體 通過(guò)將流程運(yùn)行時(shí)運(yùn)行數(shù)據(jù)與用戶提交數(shù)據(jù)及處理數(shù)據(jù)分別采用數(shù)據(jù)庫(kù)及文件兩種方式進(jìn)行存放有如下兩個(gè)好處: 第一,每個(gè)表單的XML數(shù)據(jù)文件不但可以通過(guò)反序列化進(jìn)入到流程運(yùn)行時(shí),與流程運(yùn)行時(shí)進(jìn)行無(wú)縫的銜接,也可以直接在Infopath中進(jìn)行規(guī)格化顯示,無(wú)需再進(jìn)行數(shù)據(jù)的導(dǎo)出導(dǎo)入操作。 第二,在每一個(gè)任務(wù)流程結(jié)束后可以方便的將每個(gè)XML數(shù)據(jù)文件直接轉(zhuǎn)換成存檔的格式化的文檔文件,從而每個(gè)任務(wù)流程處理的最終結(jié)果(格式化表單,審批痕跡,數(shù)據(jù))可以以文件方式進(jìn)行存檔、轉(zhuǎn)移、拷貝、打印、分發(fā)。 通過(guò)本次研究,提出了將基于XML技術(shù)構(gòu)建的Office InfoPath客戶端與ASP.NET瀏覽器技術(shù)進(jìn)行有效結(jié)合構(gòu)建WEB動(dòng)態(tài)表單的思路,并給出了具體的實(shí)現(xiàn)路徑與步驟。實(shí)際應(yīng)用表明,該方案切實(shí)減少了在煤礦信息化項(xiàng)目中通用數(shù)據(jù)收集表單的程序編寫量,極大的提高了工作效率。 [1]R.Powell,R.Weeks,C#和.NET架構(gòu),袁鵬飛譯.北京:人民郵電出版社,2002. [2]J.Richter,Applied Microsoft.Net Framework Programming,Microsoft Press,2002. [3]Halstead,Patrick,Developing Solutions With Microsoft Infopath,Microsoft Press,2005.5.WEB動(dòng)態(tài)表單模板及表單數(shù)據(jù)管理
6.結(jié)論