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