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