如何在 InfoPath 2003 表单中动态加载数据
生活随笔
收集整理的這篇文章主要介紹了
如何在 InfoPath 2003 表单中动态加载数据
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
轉(zhuǎn)自微軟:http://support.microsoft.com/kb/896451/zh-cn
概要 簡介 更多信息 創(chuàng)建新的虛擬目錄 設(shè)計 Microsoft Office InfoPath 2003 表單 創(chuàng)建 Default.asp 網(wǎng)頁 創(chuàng)建可以動態(tài)生成表單的 ASP 頁 將代碼添加到 InfoPath 表單中,以便從 ASP 頁中自動加載數(shù)據(jù) 測試 InfoPath 表單 通過使用 OnLoad 事件 通過使用 ExternalApplication.New 加載默認(rèn)表單 加載 ASP 頁中現(xiàn)有的表單
您可以通過使用以下三種方法之一將數(shù)據(jù)動態(tài)加載到 InfoPath 中:
注意,InfoPath 將啟動,并且 TwoField.xsn 表單將打開。Field1 包含“test field 5”,Field2 包含“test field 6”。在將其 dataRequest 參數(shù)設(shè)置為“3”時,GetData.asp 就會返回這些值。
注意:要使用此方法,必須在 Internet Explorer 中單擊“對沒有標(biāo)記為安全的 ActiveX 控件進行初始化和腳本運行”設(shè)置的 “提示”或“啟用”。
注意,InfoPath 將啟動,并且 TwoField.xsn 表單將打開。Field1 包含“test field 3”,Field2 包含“test field 4”。在將其 dataRequest 參數(shù)設(shè)置為“2”時,GetData.asp 就會返回這些值。
Microsoft 提供的編程示例只用于說明目的,不附帶任何明示或默示的保證。這包括但不限于對適銷性或特定用途適用性的默示保證。本文假定您熟悉所演示的編程語言和用于 創(chuàng)建和調(diào)試過程的工具。Microsoft 的支持工程師可以幫助解釋某個特定過程的功能,但是他們不會修改這些示例以提供額外的功能或構(gòu)建過程以滿足您的特殊需求。
Microsoft 和/或其各供應(yīng)商對于為任何目的而在本服務(wù)器上發(fā)布的文件及有關(guān)圖形所含信息的適用性,不作任何聲明。 所有該等文件及有關(guān)圖形均"依樣"提供,而不帶任何性質(zhì)的保證。Microsoft和/或其各供應(yīng)商特此聲明,對所有與該等信息有關(guān)的保證和條件不負(fù)任何 責(zé)任,該等保證和條件包括關(guān)于適銷性、符合特定用途、所有權(quán)和非侵權(quán)的所有默示保證和條件。在任何情況下,在由于使用或運行本服務(wù)器上的信息所引起的或與 該等使用或運行有關(guān)的訴訟中,Microsoft和/或其各供應(yīng)商就因喪失使用、數(shù)據(jù)或利潤所導(dǎo)致的任何特別的、
概要 簡介 更多信息 創(chuàng)建新的虛擬目錄 設(shè)計 Microsoft Office InfoPath 2003 表單 創(chuàng)建 Default.asp 網(wǎng)頁 創(chuàng)建可以動態(tài)生成表單的 ASP 頁 將代碼添加到 InfoPath 表單中,以便從 ASP 頁中自動加載數(shù)據(jù) 測試 InfoPath 表單 通過使用 OnLoad 事件 通過使用 ExternalApplication.New 加載默認(rèn)表單 加載 ASP 頁中現(xiàn)有的表單
概要
本文描述了在 InfoPath 2003 表單中動態(tài)加載數(shù)據(jù)的三種方法。您可以使用 OnLoad 事件,自動創(chuàng)建 InfoPath ExternalApplication 對象,或者創(chuàng)建 ASP 頁。本文還提供了代碼示例。簡介
本文描述如何在 Microsoft Office InfoPath 2003 表單中動態(tài)加載數(shù)據(jù)。更多信息
InfoPath 表單是 XML 文件。此類文件包含表單中的數(shù)據(jù),以及幫助 Microsoft Windows 資源管理器或 Microsoft Internet Explorer 識別這些 XML 數(shù)據(jù)所屬應(yīng)用程序的 XML 處理指令。您可以通過使用以下三種方法之一將數(shù)據(jù)動態(tài)加載到 InfoPath 中:
| ? | 使用 OnLoad 事件。 在 OnLoad 事件中,您可以調(diào)用 ASP 頁或其它的外部數(shù)據(jù)源來檢索數(shù)據(jù)并將其復(fù)制到表單中。 |
| ? | 自動創(chuàng)建 InfoPathExternalApplication 對象。 此方法將創(chuàng)建一個基于來源于外部的數(shù)據(jù)的新表單。 注意:要使用此方法,必須將 Internet Explorer 中的“對沒有標(biāo)記為安全的 ActiveX 控件進行初始化和腳本運行”設(shè)置設(shè)為“提示”或“啟用”。 來源于外部的數(shù)據(jù)也必須是有效的 InfoPath XML。 |
| ? | 創(chuàng)建 ASP 頁。 ASP 頁會以正確的 InfoPath 格式返回 XML 數(shù)據(jù),以便作為表單文件打開。這些 XML 數(shù)據(jù)包含一個引用,該引用指向?qū)⒃谄渖巷@示這些數(shù)據(jù)的 InfoPath 表單模板。 InfoPath 可以正確地顯示數(shù)據(jù)。 |
回到頂端
創(chuàng)建新的虛擬目錄
| 1. | 啟動 Microsoft Internet 信息服務(wù)管理器。 |
| 2. | 展開樹視圖中的“網(wǎng)站”目錄。 |
| 3. | 右鍵單擊您想要在其中創(chuàng)建新虛擬目錄的網(wǎng)站,指向“新建”,然后單擊“虛擬目錄”。 |
| 4. | 按照“虛擬目錄創(chuàng)建向?qū)А敝械牟襟E創(chuàng)建新的虛擬目錄。 注意:您必須將寫權(quán)限授予虛擬目錄。 |
回到頂端
設(shè)計 Microsoft Office InfoPath 2003 表單
| 1. | 啟動 InfoPath。在左窗格中,單擊“設(shè)計表單”。 |
| 2. | 在“設(shè)計表單”下,單擊“新建空白表單”。 |
| 3. | 在“設(shè)計任務(wù)”下,單擊“控件”。 |
| 4. | 單擊“文本框”兩次,將兩個文本框控件添加到表單中。 |
| 5. | 在“文件”菜單上,單擊“發(fā)布”。 |
| 6. | 在“發(fā)布向?qū)А敝?#xff0c;單擊“下一步”,單擊“到 Web 服務(wù)器”,然后單擊“下一步”。 |
| 7. | 在“Web URL 和文件名”框中,鍵入您所創(chuàng)建的虛擬目錄的 URL。 |
| 8. | 在“表單名稱”框中,鍵入 twofield.xsn。 注意:確保 URL 類似于以下形式:http://myServer/myVirtualDirectory/twofield.xsn。 |
| 9. | 單擊“下一步”,單擊“完成”,然后單擊“關(guān)閉”。 |
| 10. | 退出 InfoPath 2003。 |
回到頂端
創(chuàng)建 Default.asp 網(wǎng)頁
| 1. | 單擊“開始”,單擊“運行”,鍵入 notepad,然后單擊“確定”。 |
| 2. | 將下面的代碼粘貼到記事本中。 <%@ Language=VBScript %> <% dim serverName, hrefPath, fileNamePos, serverPath serverName = Request.ServerVariables("SERVER_NAME") hrefPath = Request.ServerVariables("PATH_INFO") fileNamePos = InStr( 1, hrefPath, "/Default.asp", 1 ) hrefPath = Left(hrefPath, fileNamePos ) serverPath = "http://" + serverName + hrefPath %> <HTML> <head> <SCRIPT LANGUAGE=VBScript> Sub ButtonClick() Dim oInfoPathApp set oInfoPathApp = CreateObject("InfoPath.ExternalApplication") oInfoPathApp.New "<%=serverPath%>GetData.asp?dataRequest=2" set oInfoPathApp = Nothing window.close End Sub </SCRIPT> </HEAD> <BODY onload="ButtonClick"> </BODY> </HTML> |
| 3. | 將該文件另存為 Default.asp,保存在“創(chuàng)建新的虛擬目錄”一節(jié)中創(chuàng)建的虛擬目錄中。 |
回到頂端
創(chuàng)建可以動態(tài)生成表單的 ASP 頁
| 1. | 查找然后雙擊您剛剛發(fā)布的表單 Twofield.xsn。 注意:此時將打開一個新的空白表單供您填寫。 |
| 2. | 單擊“文件”,然后單擊“另存為”。 |
| 3. | 將文件另存為 Form1.xml。 |
| 4. | 單擊“開始”,單擊“運行”,鍵入 notepad,然后單擊“確定”。 |
| 5. | 將下面的代碼粘貼到記事本中: <%@ Language=VBScript %> <% ' Define the XML namespace for the form. Dim strNamespace strNamespace = "http://schemas.microsoft.com/office/infopath/2003/myXSD/2003-04-21T15:25:26" 'Calculate the path of this server directory. dim serverName, hrefPath, fileNamePos, serverPath serverName = Request.ServerVariables("SERVER_NAME") hrefPath = Request.ServerVariables("PATH_INFO") fileNamePos = InStr( 1, hrefPath, "/GetData.asp", 1 ) hrefPath = Left(hrefPath, fileNamePos ) serverPath = "http://" + serverName + hrefPath ' Set our return content type. Response.ContentType = "text/xml" 'Create an XML document to return. Dim oXML Set oXML = Server.CreateObject("MSXML.DOMDocument") 'Create the XML header that all XML documents must have. dim myPI1 set myPI1 = oXML.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""") oXML.insertBefore myPI1, oXML.childNodes.item(0) 'Create the mso-infopathSolution processing instruction that binds the XML from this page to the 'TwoField.xsn InfoPath form template. dim myPI2 set myPI2 = oXML.createProcessingInstruction("mso-infoPathSolution", "solutionVersion=""1.0.0.1"" productVersion=""11.0.5531"" PIVersion=""1.0.0.0"" href=""" + serverPath + "TwoField.xsn""") oXML.insertBefore myPI2, oXML.childNodes.item(1) 'Create the mso-application processing instruction that marks the XML from this page as an InfoPath form. dim myPI3 set myPI3 = oXML.createProcessingInstruction("mso-application", "progid=""InfoPath.Document""") oXML.insertBefore myPI3, oXML.childNodes.item(2) 'Generate the XML for the form. dim myFields set myFields = oXML.createNode( 1, "myFields", strNamespace ) oXML.appendChild myFields dim field1 set field1 = oXML.createNode( 1, "field1", strNamespace ) dim field2 set field2 = oXML.createNode( 1, "field2", strNamespace ) dim requestedData requestedData = Request("dataRequest") Select Case requestedData Case "1" field1.text = "test field 1" field2.text = "test field 2" Case "2" field1.text = "test field 3" field2.text = "test field 4" Case "3" field1.text = "test field 5" field2.text = "test field 6" Case Else field1.text = "test field 7" field2.text = "test field 8" end Select myFields.appendChild field1 myFields.appendChild field2 'Return the XML to the client. Response.Write oXML.XML %> |
| 6. | 在“文件”菜單上,單擊“另存為”,在“文件名”框中鍵入 GetData.asp,然后單擊“保存”。 |
| 7. | 再啟動一個記事本實例。 |
| 8. | 在“文件”菜單上,單擊“打開”,單擊“Form1.xml”,然后單擊“打開”。 |
| 9. | 在 Form1.xml 中查找 xmlns:my namespace,然后復(fù)制其值。 注意:此值類似于“http://schemas.microsoft.com/office/infopath/2003/myXSD/2003-04-21T15:25:26”。 |
| 10. | 切換回包含 GetData.asp 的記事本會話,然后在 GetData.asp 中查找下面的行: strNamespace = "http://schemas.microsoft.com/office/infopath/2003/myXSD/2003-04-21T15:25:26" |
| 11. | 用您在步驟 9 中復(fù)制的值替換“strNamespace”變量的值。 |
| 12. | 單擊“保存”,然后退出記事本。 |
| 13. | 將 GetData.asp 復(fù)制到 Twofield.xsn 表單模板所在的虛擬目錄中。 |
回到頂端
將代碼添加到 InfoPath 表單中,以便從 ASP 頁中自動加載數(shù)據(jù)
| 1. | 啟動 InfoPath。 |
| 2. | 在左窗格中,單擊“設(shè)計表單”。 |
| 3. | 在“設(shè)計表單”任務(wù)窗格中,在“在設(shè)計模式中打開表單”下單擊“本機上的模板”。 |
| 4. | 鍵入您發(fā)布的表單模板的 URL。 注意:此 URL 類似于 http://myServer/myVirtualDirectory/twofield.xsn。 |
| 5. | 在“工具”菜單上,單擊“編程”,然后單擊“OnLoad 事件”。 |
| 6. | 用以下代碼替換默認(rèn)的“OnLoad 事件”代碼: function XDocument::OnLoad(eventObj) { //Only load data if the fields are empty. if (XDocument.DOM.selectSingleNode("/my:myFields/my:field1").text == "" ) { //Work out the location of the data file based on the current install directory. searchExpression = new RegExp( "TwoField.xsn", "ig" ); searchResults = XDocument.Solution.URI.match( searchExpression ); if (searchResults.length == 0) return; //Clear the "TwoField.xsn" part of the string. var targetDirectory = XDocument.Solution.URI.slice(0, searchResults.index ); //Load the example data into and XML document. var objExternalData = new ActiveXObject("MSXML2.DomDocument.5.0"); objExternalData.async = false; objExternalData.validateOnParse = false; objExternalData.load( targetDirectory + "getData.asp?dataRequest=3" ); //Set the SelectionNamespaces property so that we can search the example data. var strSelectionNamespaces = XDocument.DOM.getProperty("SelectionNamespaces"); objExternalData.setProperty("SelectionNamespaces", strSelectionNamespaces ); //Find the root node in the example data and import it into the InfoPath document. var objExternalXML = objExternalData.selectSingleNode("my:myFields"); var objReplacementXML = XDocument.DOM.importNode( objExternalXML, true ); //Find the original data in the form and replace it with the example data. var objOriginalXML = XDocument.DOM.selectSingleNode("my:myFields"); XDocument.DOM.replaceChild( objReplacementXML, objOriginalXML ); } } |
| 7. | 在“文件”菜單上,單擊“保存”,然后關(guān)閉 InfoPath 2003 表單。 |
回到頂端
測試 InfoPath 表單
通過使用 OnLoad 事件
加載數(shù)據(jù) 如果表單中沒有其他數(shù)據(jù),則 TwoField.xsn 表單 OnLoad 事件將從 GetData.asp 頁面中加載數(shù)據(jù)。要加載這些數(shù)據(jù),請按照下列步驟操作:| 1. | 依次單擊“開始”和“運行”,鍵入表單路徑,然后單擊“確定”。鍵入的路徑類似于以下網(wǎng)址: http://myServer/IPDynamicData/TwoField.xsn |
| 2. | 按照提示,單擊“打開”。 |
通過使用 ExternalApplication.New 加載默認(rèn)表單
Default.asp 頁會創(chuàng)建客戶端腳本來自動生成 ExternalApplication 對象,以便啟動 InfoPath 并創(chuàng)建一個新表單。新表單基于由 GetData.asp 返回的 XML 數(shù)據(jù)。要創(chuàng)建新表單,依次單擊“開始”、“運行”,鍵入 Default.asp 頁面的路徑,然后單擊“確定”。鍵入的路徑類似于以下網(wǎng)址: http://myServer/IPDynamicData/default.asp注意:要使用此方法,必須在 Internet Explorer 中單擊“對沒有標(biāo)記為安全的 ActiveX 控件進行初始化和腳本運行”設(shè)置的 “提示”或“啟用”。
注意,InfoPath 將啟動,并且 TwoField.xsn 表單將打開。Field1 包含“test field 3”,Field2 包含“test field 4”。在將其 dataRequest 參數(shù)設(shè)置為“2”時,GetData.asp 就會返回這些值。
加載 ASP 頁中現(xiàn)有的表單
GetData.asp 頁會以正確的格式返回 XML,以便 InfoPath 將其作為表單文件打開。為此,請依次單擊“開始”、“運行”,鍵入 GetData.asp 的路徑,然后單擊“確定”。鍵入的路徑類似于以下網(wǎng)址: http://myServer/IPDynamicData/getData.asp?dataRequest=1 注意,InfoPath 將啟動,并且 GetData.asp 將打開。Field1 包含“test field 1”, Field2 包含“test field 2”。在將其 dataRequest 參數(shù)設(shè)置為“1”時,GetData.asp 就會返回這些值。Microsoft 提供的編程示例只用于說明目的,不附帶任何明示或默示的保證。這包括但不限于對適銷性或特定用途適用性的默示保證。本文假定您熟悉所演示的編程語言和用于 創(chuàng)建和調(diào)試過程的工具。Microsoft 的支持工程師可以幫助解釋某個特定過程的功能,但是他們不會修改這些示例以提供額外的功能或構(gòu)建過程以滿足您的特殊需求。
回到頂端
這篇文章中的信息適用于:
| ? | Microsoft Office InfoPath 2003 |
| ? | Microsoft Office InfoPath 2003, Service Pack 1 (SP1) |
回到頂端
Microsoft 和/或其各供應(yīng)商對于為任何目的而在本服務(wù)器上發(fā)布的文件及有關(guān)圖形所含信息的適用性,不作任何聲明。 所有該等文件及有關(guān)圖形均"依樣"提供,而不帶任何性質(zhì)的保證。Microsoft和/或其各供應(yīng)商特此聲明,對所有與該等信息有關(guān)的保證和條件不負(fù)任何 責(zé)任,該等保證和條件包括關(guān)于適銷性、符合特定用途、所有權(quán)和非侵權(quán)的所有默示保證和條件。在任何情況下,在由于使用或運行本服務(wù)器上的信息所引起的或與 該等使用或運行有關(guān)的訴訟中,Microsoft和/或其各供應(yīng)商就因喪失使用、數(shù)據(jù)或利潤所導(dǎo)致的任何特別的、
總結(jié)
以上是生活随笔為你收集整理的如何在 InfoPath 2003 表单中动态加载数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10%4人+20%1人+70%2人=20
- 下一篇: 建行分期通被拒还可以申请吗