如何在 InfoPath 2003 表單中動態載入資料

文章翻譯 文章翻譯
文章編號: 896451 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文說明在 Microsoft Office InfoPath 2003 表單中動態載入資料的三種方法。您可使用 OnLoad 事件、自動化 InfoPath ExternalApplication 物件,或建立 ASP 頁面。本文也提供程式碼範例。

簡介

本文說明如何在 Microsoft Office InfoPath 2003 表單中動態載入資料。

其他相關資訊

InfoPath 表單為 XML 檔。檔案包括表單中的資料,以及幫助 Microsoft Windows 檔案總管或 Microsoft Internet Explorer 識別 XML 資料所屬應用程式的 XML 處理指示。

您可使用以下三種方法之一來將資料動態載入至 InfoPath 中:
  • 使用 OnLoad 事件。

    OnLoad 事件裡,您可以呼叫 ASP 頁面或是另外一個外部資料來源以擷取資料並複製至表單中。
  • 自動化 InfoPathExternalApplication 物件。

    此方法將根據外部來源的資料建立新表單。
    注意 要使用此方法,必須將 Internet Explorer 中的 [起始不標示為安全的 ActiveX 控制項] 設定設為 [提示][啟用]
    來自外部來源的資料也必須是有效的 InfoPath XML。
  • 建立 ASP 頁面。

    ASP 頁面會以正確的 InfoPath 格式傳回 XML 資料,以表單檔案的形式開啟。XML 資料包含 InfoPath 表單範本 (當中應該會顯示資料) 的參考。InfoPath 可以正確地顯示資料。

建立新的虛擬目錄

  1. 啟動 Microsoft Internet Information Services 管理員。
  2. 在樹狀檢視中展開 [網站] 目錄。
  3. 用滑鼠右鍵按一下您想要建立新虛擬目錄的網站,指向 [新增],然後按一下 [虛擬目錄]
  4. 依照 [虛擬目錄建立精靈] 中的步驟來建立新的虛擬目錄。

    注意 您必須授予虛擬目錄「寫入」權限。

設計 Microsoft Office InfoPath 2003 表單

  1. 啟動 InfoPath。在左邊窗格中,按一下 [設計表單]
  2. [設計表單] 下,按一下 [新空白表單]
  3. [設計工作] 下,按一下 [控制項]
  4. 按兩下 [文字方塊] 以新增兩個文字方塊控制項到表單中。
  5. [檔案] 功能表上,按一下 [發佈]
  6. 在「發佈精靈」中,按一下 [下一步],再按一下 [到網頁伺服器],然後按一下 [下一步]
  7. [網址與檔案名稱] 方塊中,輸入您建立的虛擬目錄 URL。
  8. [表單名稱] 方塊中,輸入 twofield.xsn
    注意 請確定 URL 的格式類似:http://myServer/myVirtualDirectory/twofield.xsn。
  9. 按一下 [下一步],再按一下 [完成],然後按一下 [關閉]
  10. 結束 InfoPath 2003。

建立 Default.asp 頁面

  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,並存放在您於<建立新的虛擬目錄>一節裡建立的虛擬目錄中。

建立 ASP 頁面以動態產生表單

  1. 找到然後按兩下您剛發佈的 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 宣告,然後複製其值。
    注意 此值類似於 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 中複製的值取代 strNamespace 變數的值。
  12. 按一下 [儲存],然後結束 [記事本]。
  13. 將 GetData.asp 複製到 Twofield.xsn 表單範本所在的虛擬目錄中。

將程式碼新增至 InfoPath 表單中以自動從 ASP 頁面載入資料

  1. 啟動 InfoPath。
  2. 在左邊窗格中,按一下 [設計表單]
  3. [設計表單] 工作窗格中,在 [以設計模式開啟表單] 下,按一下 [在我的電腦上]
  4. 輸入您發佈的表單範本 URL。
    注意 此 URL 類似於 http://myServer/myVirtualDirectory/twofield.xsn。
  5. [工具] 功能表上,按一下 [程式設計],然後按一下 [OnLoad 事件]
  6. 以下列程式碼取代預設的 [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. [檔案] 功能表上,按一下 [儲存],然後關閉 InfoPath 2003 表單。

測試 InfoPath 表單

使用 OnLoad 事件

來載入資料 如果表單中沒有其他資料,TwoField.xsn 表單 OnLoad 事件會從 GetData.asp 頁面載入資料。如果要載入資料,請依照下列步驟執行:
  1. 按一下 [開始],然後按一下 [執行],輸入表單路徑,再按一下 [確定]。您輸入的路徑與下列路徑類似:
    http://myServer/IPDynamicData/TwoField.xsn
  2. 如果有提示出現,按一下 [開啟]
請注意,InfoPath 將啟動而且 TwoField.xsn 表單將會開啟。Field1 包括 "test field 5",Field2 則包括 "test field 6"。當 dataRequest 參數設定為 3 時,GetData.asp 會傳回這些值。

使用 ExternalApplication.New 載入預設表單

Default.asp 頁面會建立用戶端指令碼以自動化 ExternalApplication 物件來啟動 InfoPath,然後建立新表單。新表單是根據由 GetData.asp 傳回的 XML 資料。如果要建立新表單,請按一下 [開始],再按一下 [執行],輸入 Default.asp 頁面的路徑,然後按一下 [確定]。您輸入的路徑與下列路徑類似:
http://myServer/IPDynamicData/default.asp


注意 如果要使用此方法,您必須按一下 Internet Explorer 中,[起始不標示為安全的 ActiveX 控制項] 設定裡的 [提示][啟用]

請注意,InfoPath 將啟動而且 TwoField.xsn 表單將會開啟。Field1 包括 "test field 3",Field2 則包括 "test field 4"。當 dataRequest 參數設定為 2 時,GetData.asp 會傳回這些值。

從 ASP 頁面載入目前的表單

GetData.asp 頁面會以正確的 InfoPath 格式傳回 XML,以表單檔案的形式開啟。如果要執行這項操作,請按一下 [開始],再按一下 [執行],輸入 GetData.asp 頁面的路徑,然後按一下 [確定]。您輸入的路徑與下列路徑類似:
http://myServer/IPDynamicData/getData.asp?dataRequest=1
請注意,InfoPath 將啟動而且 GetData.asp 表單將會開啟。Field1 包括 "test field 1", 而 Field2 包括 "test field 2"。當 dataRequest 參數設定為 1 時,GetData.asp 會傳回這些值。

Microsoft 僅提供示範性的程式設計範例,不做任何明示或默示的保證。其中包括 (但不限) 其適售性與適合某特定用途之默示擔保。本文假設您對於示範所用的程式設計語言,以及用來建立和偵錯程序的工具相當熟悉。Microsoft 技術支援工程師可以協助說明特定程序的功能,但無法修改這些範例以提供附加功能或建構程序來滿足您的特定需求。

屬性

文章編號: 896451 - 上次校閱: 2006年4月11日 - 版次: 2.0
這篇文章中的資訊適用於:
  • Microsoft Office InfoPath 2003
  • Microsoft Office InfoPath 2003, Service Pack 1 (SP1)
關鍵字:?
kbscript kbasp kbhowto KB896451
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com