共用方式為


InfoPath 2003 相容的物件模型

Microsoft Office InfoPath 2007 會撰寫為「元件物件模型」(COM) 應用程式,而且會以 COM 介面的形式針對外部自動化和表單範本指令碼公開其程式設計介面。為了支援使用 Visual C# 和 Visual Basic Managed 程式碼語言所建立的 InfoPath 方案,InfoPath 安裝程式會安裝三個 Interop 組件;Interop 組件屬於當做 Managed 與 Unmanaged 程式碼之間橋樑的 .NET 組件,會將 COM 物件成員對應至同等的 .NET Managed 成員。

由 InfoPath 安裝之三個 Interop 組件的檔案名稱為:

  • Microsoft.Office.Interop.InfoPath.dll

  • Microsoft.Office.Interop.InfoPath.SemiTrust.dll

  • Microsoft.Office.Interop.InfoPath.Xml.dll

本主題討論透過 Microsoft.Office.Interop.InfoPath.SemiTrust Interop 組件公開的物件模型,此組件專門用在 InfoPath 表單範本 (.xsn) 中撰寫及執行 Managed 程式碼商務邏輯。

如需 Microsoft.Office.Interop.InfoPath 與 Microsoft.Office.Interop.InfoPath.Xml 組件 (這兩個組件專門利用外部應用程式中的 Managed 程式碼來自動化 InfoPath 應用程式) 的詳細資訊,請參閱隨 Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office system 安裝之文件內的「從其他應用程式自動化 InfoPath」。

重要安裝資訊

根據預設,InfoPath 安裝程式的 [一般] 安裝選項會在 C:\Program Files\Microsoft Office\Office12 資料夾內安裝 Microsoft.Office.Interop.InfoPath.SemiTrust 與 Microsoft.Office.Interop.InfoPath.Xml 組件的複本。Microsoft.Office.Interop.InfoPath 與 Microsoft.Office.Interop.InfoPath.Xml 組件也會安裝在「全域組件快取」(GAC) 中,您可從 C:\Windows\Assembly 資料夾檢視其內容。

如果尚未安裝這些組件,您應該確認 Microsoft Office InfoPath 2007 已正確安裝。只要在執行安裝程式之前先安裝 .NET Framework 1.1 版可轉散發套件或 .NET Framework 1.1 版軟體開發套件 (SDK),則 InfoPath 安裝程式中的 [.NET 程式設計支援] 選項就會在 [一般] InfoPath 安裝中設為 [從我的電腦執行]。如果電腦上沒有這些 Interop 組件,則必須確認 .NET Framework 1.1 已安裝,然後從 [控制台] 執行 [新增或移除程式],接著將 [.NET 程式設計支援] 選項設為 [從我的電腦執行]。

如需下載 .NET Framework 1.1 版可轉散發套件的詳細資訊,請參閱 .NET Framework 1.1 版可轉散發套件 (英文)。

Microsoft.Office.Interop.InfoPath.SemiTrust 命名空間

在發行 Microsoft Office InfoPath 2003 Service Pack 1 與 Microsoft Office InfoPath 2003 Toolkit for Visual Studio® .NET 之前,InfoPath 表單範本的所有程式設計邏輯都是使用 Microsoft JScript 或 Microsoft VBScript 所建立 (這兩者是在整合到 InfoPath 的 Microsoft Script Editor (MSE) 開發環境內所撰寫)。在 MSE 中撰寫的指令碼會在執行階段解譯,並存取由 IPEDITOR.dll 動態連結程式庫所公開的 COM 物件模型。

為了支援使用 Managed 程式碼語言 (如提供程式設計邏輯的 Visual C# 與 Visual Basic) 之表單範本的建立,在 InfoPath 中加入了允許主控 Common Language Runtime (CLR) 的功能,並且建立了 Microsoft.Office.Interop.InfoPath.SemiTrust Interop 組件,好讓 Managed 程式碼能夠以安全的方式來與 InfoPath 公開的 COM 物件模型交互操作。如需套用至 InfoPath Managed 程式碼表單範本之安全性模型的詳細資訊,請參閱關於 Managed 程式碼表單範本的安全性模型

雖然在 InfoPath 表單範本中為特定工作撰寫 Managed 程式碼的程序,與撰寫指令碼來執行相同程式設計工作非常類似,但是當從 Microsoft Visual Studio Tools for Applications (VSTA)、具有 Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office system 的 Visual Studio 2005 或 Visual Studio 2008 附 Visual Studio Tools for Office 內的 [物件瀏覽器] 來檢視 Microsoft.Office.Interop.InfoPath.SemiTrust 命名空間時,所公開的物件模型看起來會更複雜。這是因為用來支援 InfoPath 2003 相容物件模型的 .NET Framework 互通性技術會要求 COM 伺服器公開它的所有公用介面,以及 .NET Framework 本身所需的一些其他結構。

COM 物件如何公開到 InfoPath 2003 相容的物件模型

在 JScript、VBScript 或 Visual Basic (但不是 .NET 版本的 Visual Basic 和 Visual C#) 等高階語言中使用原始的 COM 伺服器時,公開的物件模型會比基礎的 COM 類別和介面更為簡單。例如,當使用這些語言時,InfoPath UI 物件會公開七個方法,像是用來向使用者顯示訊息方塊的 Alert 方法。

然而,支援 UI 物件的基礎 COM 結構實際上是由三個項目所組成:兩個名為 UIUI2 的介面,以及 COM coclass (實作這兩個介面的成員)。一共有兩個版本的 UI 介面,因為 COM 架構需要保留固定的介面定義,以維護呼叫該介面實作的程式與元件的舊版相容性。

在此例中,UI 介面是為第一版的 InfoPath 所定義,共提供四個方法,其中包括 Alert 方法。UI2 介面可視為第二版的 UI 介面,它是為 InfoPath Service Pack 1 所定義。UI2 介面繼承原始 UI 介面的四個方法,並新增三個新方法,例如 Confirm 方法。雖然您可以使用指令碼或 Managed 程式碼來撰寫一行程式碼,以呼叫使用 XDocument.UI.ConfirmConfirm 方法,但是基礎程式碼實際上是從 COM coclass 中該方法的實作,來呼叫 UI2 介面的 Confirm 方法。

對指令碼公開物件模型時會隱藏這些詳細資料,但是與 Managed 程式碼中的 COM 伺服器搭配使用所需的 interop 組件,會公開 coclass 與兩個介面。至於在 MSE 指令碼開發環境中使用單一的 UI 物件時,Microsoft.Office.Interop.InfoPath.SemiTrust 命名空間會公開下列三個項目:

雖然這三個介面都會在 Visual Studio 的 [物件瀏覽器] 中公開,並且會包含在此命名空間的「類別庫」文件中,但是您只會使用 UIObject coclass 介面,此介面會實作 UI 物件,而且在搭配 UI2 介面的成員時,會是 UIObject coclass 介面所實作的最新版本介面。若要從其父物件 XDocument 存取 UIObject coclass 介面,就像在指令碼中一樣,您可以使用 UI 存取子屬性。除了一些值得注意的例外狀況之外,這是 InfoPath 原始版本中所有物件的型態,這些在發行 InfoPath Service Pack 1 時已獲得更新。

雖然此型態基本上是相同的,但是 InfoPath Service Pack 1 中所加入的全新物件會更為簡單,例如 Certificate 物件。在此情況下,只需要注意兩個項目:CertificateObject coclass 介面以及 Certificate 介面的成員,此介面是由 CertificateObject coclass 介面所實作之最近且唯一的介面。就像使用指令碼中的 InfoPath COM 物件一樣,Certificate 存取子屬性是用來存取其父代中的物件。

除了在集合的名稱後面附加 "Collection" (非 "Object" ) 的 coclass 介面之外,這個相同的模型會套用至集合的介面。例如,COM DataAdapters 集合的 coclass 介面是名為 DataAdaptersCollection,而它實作的介面則是 DataAdapters 介面。相同的,XDocument 父代物件的 DataAdapters 存取子屬性是用來存取該集合。

這個命名型態有三個例外狀況。COM ApplicationXDocument 物件的 coclass 介面名稱後面沒有附加 "Object",其名稱與對應的 COM 物件相同:ApplicationXDocument。此外,由 ApplicationXDocument coclass 介面實作的介面名稱會在前面加上底線字元 (_):_Application2_XDocument2。第三個例外狀況是 COM DataObject 物件,此物件的 coclass 介面命名為 DataSourceObject,但就像其他 InfoPath COM 物件一樣,它所實作的介面是 DataObject 介面。

Microsoft XML Core Services (MSXML) 5.0 for Microsoft Office 物件如何公開到 InfoPath 2003 相容的物件模型

由 Microsoft XML Core Services (MSXML) 5.0 for Microsoft Office 提供的物件模型之物件與成員的子集合,也是一個 COM 伺服器,都是由 Microsoft.Office.Interop.InfoPath.SemiTrust interop 組件公開的介面所包裝。此為必要的理由為,某些 InfoPath COM 物件模型的成員是依賴 MSXML 5.0,而且必須以安全的方式存取這些成員。在 Microsoft.Office.Interop.InfoPath.SemiTrust 命名空間 (包裝 MSXML 5.0 物件模型的物件與成員) 中的介面名稱與 MSXML 5.0 COM 伺服器公開的名稱相同。在大部分情況下,會在這些名稱的前面加上 "IXMLDOM",因為它們是用來使用 XML 文件物件模型 (DOM)。例如,XDocument 介面的 DOM 屬性 (用來傳回表單基礎 XML 文件的參照),會傳回 Microsoft.Office.Interop.InfoPath.SemiTrust interop 組件包裝的 IXMLDOMDocument 介面。呼叫和使用 IXMLDOMDocument 介面的成員基本上與在不使用 Managed 程式碼的表單範本中使用指令碼相同。

如需在 Managed 程式碼表單範本中使用 Microsoft XML Core Services (MSXML) 5.0 for Microsoft Office 成員的詳細資訊,請參閱使用 InfoPath 2003 物件模型處理 MSXML5 和 System.Xml

使用 IntelliSense

如果是在 Managed 程式碼表單範本中撰寫的多數程式碼,您將會使用 thisXDocumentthisApplication 這兩個變數,它們是在預設的 FormCode.cs 或 FormCode.vb 類別檔案的 _Startup 方法中初始化。您可以使用 thisXDocumentthisApplication 變數來存取 XDocumentApplication coclass 介面的成員。當您輸入其中一個變數名稱,且後面跟著句點之後,IntelliSense 陳述式完成將會顯示對應 coclass 介面的清單成員。您可以使用此方法繼續存取您想要使用的物件模型成員。

以下會顯示使用 thisXDocument 變數來存取 Alert 方法的簡單範例,以便使用從 thisApplication 變數中存取的 Version 屬性來顯示 InfoPath 應用程式的版本。

thisXDocument.UI.Alert(thisApplication.Version);
thisXDocument.UI.Alert(thisApplication.Version)

使用類別庫參考文件

Microsoft.Office.Interop.InfoPath.SemiTrust 命名空間類別庫參照文件的組織方式會反映 coclass 介面與其實作之繼承介面之間的關係,詳細資訊,請參閱本主題稍早的「如何將 COM 物件公開到 Managed 程式碼」一節。

雖然 Microsoft.Office.Interop.InfoPath.SemiTrust 命名空間參照文件的組織方式與命名一開始似乎讓人覺得困惑,然而這些主題的組織方式基本上與「InfoPath 物件模型參照」(屬於「InfoPath 開發人員參考資料」的一部分,隨附在 InfoPath 中) 的組織方式相同。由於 ApplicationXDocument 介面主題的例外狀況,所有的 COM coclass 介面主題都會對應至 InfoPath 指令碼參照中對等的「物件」與「集合」主題。例如,Microsoft.Office.Interop.InfoPath.SemiTrust 命名空間參照文件中的「UIObject 介面」與「WindowsCollection 介面」主題,會對應至「InfoPath 物件模型參照」指令碼參照中「UI 物件」與「Windows 集合」主題內類似的內容。

然而,在主題開始的介面描述之後,至 coclass 介面成員的連結,會顯示空的主題。若要顯示 coclass 介面實作的成員清單,必須開啟 coclass 繼承的最近介面主題,然後開啟其成員的表格。在 coclass 介面主題中的「註解」小節開頭提供了繼承介面的連結。

當您在程式碼編輯器中按 F1 時,其行為是類似的 (除了您叫用 F1 說明所針對的成員會直接顯示以外),因為您會最常使用介面的成員。然而,可以從建立版本的介面實作成員這項事實,可能會讓您在初次遇到時感到混淆。例如,如果您輸入 thisXDocument.UI.Alert,然後將游標放在 Alert 上並按 F1,則會顯示「UI2.Alert 方法」主題,這是因為 Alert 方法是由 UI2 介面的成員所實作。

傳遞選用參數給 InfoPath 物件模型成員

如果 InfoPath 2003 相容的物件模型成員含有選用參數,而且您未針對該參數指定值,則必須改為針對該參數傳遞 Type.Missing 欄位。如果在省略實際值時未能傳遞 Type.Missing 欄位,將會造成建置錯誤;無論是以 Visual C# 還是 Visual Basic 所撰寫的程式碼,都會錯回錯誤。例如,ViewObject 介面的 SelectNodes 方法包括兩個選用參數:varEndNode 和 varViewContext。當您沒有針對這兩個選用參數指定實際值時,程式碼行看起來應該如以下範例所示。

IXMLDOMNode group1 = 
   thisXDocument.DOM.selectSingleNode("/my:myFields/my:group1");
thisXDocument.View.SelectNodes(group1, Type.Missing, Type.Missing);
Dim group1 As IXMLDOMNode = _
   thisXDocument.DOM.selectSingleNode("/my:myFields/my:group1")
thisXDocument.View.SelectNodes(group1, Type.Missing, Type.Missing)

關於 Common Language Specification 相容性

Microsoft.Office.Interop.InfoPath.SemiTrust 組件內部的每個介面與成員,都將 CLSCompliant 屬性設為 false。由於參考文件有一部分是使用 System.Reflection 所產生,因此每個介面與成員描述的後面都有附加上「這個介面/方法/屬性和 CLS 不相容」。不過,大部分的 Microsoft.Office.Interop.InfoPath.SemiTrust 命名空間之介面與成員實際上都是和 CLS 相容。

請參閱

概念

使用 InfoPath 2003 物件模型開發表單範本的一般工作
關於 Managed 程式碼表單範本的安全性模型

其他資源

使用 InfoPath 2003 物件模型建立 Managed 程式碼表單範本
了解 InfoPath 2003 物件模型