程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 用程序修改infopath的xsn模板文件

用程序修改infopath的xsn模板文件

編輯:關於C#
 

infopath模板介紹
在infopath中,模板文件定義了infopath表單的數據、行為和顯示等三方面的信息。這些信息不是存儲在一個文件中,而是分別存

放的。主要的文件有:
manifest.xsf是工程文件,定義了模板中包含哪些文件,它們定義那類信息,以及data connect的信息。相當於Visual Studio中的

項目工程文件。
myschema.xsd,sampledata.xml,template.xml三個文件都是定義的infopath中的datasource。其中myschema.xsd是一個schema文

件,定義了datasource的數據結構和每個數據節點的數據類型。template.xml是根據myschema.xsd產生的一個空的xml數據文件。

sampledata.xml沒有仔細研究,應該記錄了預定義的數據默認值。
view1.xsl是定義如何顯示數據的,是標准的xsl文件。
upgrade.xsl則記錄版本信息,用於版本比較和版本升級。
除了這些基本文件,如果在infopath中加入script腳本或managed code代碼如c#代碼。這些腳本文件或代碼編譯後的dll文件也要包

含在模板中。

如果了解了infopath模板的定義方式,我們就可以用程序直接修改模板,在有些情況下,這是非常方便的。例如,你已經發布了上

百個各種infopath模板,它們都有同樣的對某個web service的數據連結。現在,web services的地址變化了,如果手工修改,工作

量可想而知。
在InfoPath Team Blog上有文章專門講解如何使用腳本方式來修改infopath模板


基本的處理方式是
第一步: 將XSN文件解包到一個臨時目錄下。
第二步: 用xml方式打開manifest.xsf等定義文件,修改其內容
第三步: 將文件重新打包成xsn文件

第一步:
從MSDNs下載MicrosoftCabinet 軟件開發工具包,http://support.microsoft.com/kb/310618。裡面包含了我們需要的解包和打包工

具。裡面包含多個微軟文件打包工具,其中我們會用到extract.exe和cabarc.exe。
解包的命令行指令: extract.exe /y /e template1.xsn /l template
template1.xsn是要解包的xsn文件名,/l template 表示解開後的文件放在子目錄template 下面。
MicrosoftCabinet軟件開發工具包也提供了dll和API,你可以把它加入你的工程,然後直接調用API來完成同樣的操作。

第二步:修改infopath模板
這裡把每個文件要修改的部分簡單地說明
1) manifest
<xsf:xDocumentClass>節點是根節點,如果要修改模板文件的名字,需要修改這個節點的name屬性
name="urn:schemas-microsoft-com:office:infopath:Template1:-myXSD-2006-12-17T09-42-45"中Template1是模板文件的名字,改成你自己的名字就好。
<xsf:fileNew><xsf:initialXmlDocument caption="Template1" href="template.xml"></xsf:initialXmlDocument>
</xsf:fileNew>節點也需要修改caption屬性,注意,別修改href="template.xml"(這是文件引用,指向template.xml的)。
2)myschema
如果要修改datasource,如增加幾個數據field或group,主要工作就是修改這個文件。這是一個標准的XML的schema,需要你非常熟悉schema的格式。下面是一個infopath的schema內容
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema targetNamespace="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-12-17T09:42:45" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-12-17T09:42:45" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="WorkflowData">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="my:WorkflowName" minOccurs="0"/>
<xsd:element ref="my:WorkflowGUID" minOccurs="0"/>
<xsd:element ref="my:WorkflowStep1" minOccurs="0"/>
</xsd:sequence>
<xsd:anyAttribute processContents="lax" namespace="http://www.w3.org/XML/1998/namespace"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="WorkflowName" type="xsd:string"/>
<xsd:element name="WorkflowGUID" type="xsd:string"/>
<xsd:element name="WorkflowStep1">
<xsd:complexType>
<xsd:sequence/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
例如,你要為WorkflowData增加一個author的field,數據類型為text.修改後的內容為
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema targetNamespace="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-12-17T09:42:45" xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2006-12-17T09:42:45" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="WorkflowData">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="my:WorkflowName" minOccurs="0"/>
<xsd:element ref="my:WorkflowGUID" minOccurs="0"/>
<xsd:element ref="my:WorkflowAuhtor" minOccurs="0"/>
<xsd:element ref="my:WorkflowStep1" minOccurs="0"/>
</xsd:sequence>
<xsd:anyAttribute processContents="lax" namespace="http://www.w3.org/XML/1998/namespace"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="WorkflowName" type="xsd:string"/>
<xsd:element name="WorkflowGUID" type="xsd:string"/>
<xsd:element name="WorkflowAuhtor" type="xsd:string"/>
<xsd:element name="WorkflowStep1">
<xsd:complexType>
<xsd:sequence/>
</xsd:complexType>
</xsd:element>
</xsd:schema>

3)template
這個文件比較簡單,就是一個沒有數據的空白infopath文件。如果你修改了datasource,這裡也要同樣作修改。
4) sampledata
5) view1
這是一個xslt文件,用來把xml數據格式化輸出到infopath中顯示。如果你熟悉xslt和HTML,修改這個文件也很容易。
需要注意的是,如果你在infopath中定義了多個view,如有View1,view2兩個view,則xsn中會有兩個文件:view1.xsl,view2.xsl。


第三步:當所有的模板文件都修改完成後,我們可以使用cabarc.exe來重新打包xsn
打包命令: cabarc.exe n template1.xsn template/*.*
template1.xsn是產生的模板文件的名字,template/*.*是指定將template所有文件打包。

 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved