from: 微軟
|
| 操作方法:建立 COM 增益集以將自訂功能添加到 InfoPath |
Microsoft Office InfoPath 2007 支援用於擴充表單編輯使用者體驗的 COM 增益集。儘管這是 Office InfoPath 2007 的新功能,但其他 Office 應用程式(如 Microsoft Office Word 和 Microsoft Office Excel)從 Office 2000 起就已經支援 COM 增益集。
Office InfoPath 2007 中的 COM 增益集支援在表單編輯環境中可用。無法通過使用 COM 增益集來擴充表單設計環境。
IDTExtensibility2 介面
InfoPath 編輯環境提供了對 IDTExtensibility2 介面的支援,該介面是 COM 增益集開發人員所必須實現的。IDTExtensibility2 是一種雙介面對象,它提供了五個在編輯環境內充當事件的方法。這些方法允許 COM 增益集對下表中列出的環境啟動和關閉條件進行響應。
| 介面 |
說明 |
| OnAddInsUpdate (ByVal custom() As Variant) |
在環境中載入或卸載附加元件時發生。 |
| OnBeginShutdown (ByVal custom() As Variant) |
在環境正在關閉時發生。 |
| OnConnection(ByVal Application As Object, ByVal ConnectMode As ext_ConnectMode, ByVal AddInInst As Object, ByVal custom() As Variant) |
在環境中載入附加元件時發生。 |
| OnDisconnection (ByVal RemoveMode As ext_DisconnectMode, ByVal custom() As Variant) |
從環境中卸載附加元件時發生。 |
| OnStartupComplete (ByVal custom() As Variant) |
在環境已完成啟動時發生。 |
註冊 COM 增益集
所有 Office 應用程式(包括 InfoPath)都使用註冊表來列出 COM 增益集集合中的附加元件、儲存串連狀態,以及儲存引導或按需載入資訊。對於 InfoPath COM 增益集,每個附加元件的名稱都出現在以下登錄機碼之下:
HKEY_CURRENT_USER\Software\Microsoft\Office\InfoPath\AddIns\
對於安裝為可供用戶端電腦的每個使用者使用的 COM 增益集,該登錄機碼位於 HKLM 註冊表登錄區中:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\InfoPath\AddIns\
登錄機碼名稱對應於附加元件的 ProgIdAttribute,並包含以下值。
| 名稱 |
類型 |
說明 |
| FriendlyName |
String |
將出現在“COM 增益集”對話方塊中並列在信任中心的“附加元件”頁面中的名稱。 |
| Description |
String |
在信任中心中選擇附加元件時將出現的字串。 |
| LoadBehavior |
DWORD |
指定 COM 增益集的載入方式。值可以是 0、1、2、8 和 16 的組合。有關詳細資料,請參閱下表。 |
LoadBehavior 的 DWORD 值應包含一個描述 COM 增益集在編輯環境中如何載入的值。該值可以是下表中的值,或下表中各個值的組合。例如,某個在 Visual Studio 2005 中建立的 COM 增益集的 LoadBehavior 值將為“3”:在應用程式啟動時載入,並且已串連。
| 值 |
說明 |
| 0 |
已中斷連線。附加元件在“COM 增益集”對話方塊中顯示為“非活動”。 |
| 1 |
已串連。附加元件在“COM 增益集”對話方塊中顯示為“活動”。 |
| 2 |
啟動時載入。在宿主應用程式啟動時載入和串連附加元件。 |
| 8 |
按需載入。當宿主應用程式需要附加元件時,例如,當使用者單擊使用附加元件中的功能的按鈕時,將會載入和串連附加元件。 |
| 16 |
第一次運行時串連。當使用者在註冊附加元件後第一次運行宿主應用程式時,將會載入和串連附加元件。 |
使用 Visual Studio 2005 建立託管 COM 增益集
要使用 Microsoft Visual Studio 2005 建立託管 COM 增益集,請按如下方式建立一個 Visual Studio 共用附加元件項目:
- 單擊“開始”,指向“所有程式”,指向“Microsoft Visual Studio 2005”,然後單擊“Microsoft Visual Studio 2005”。
- 在“檔案”菜單上單擊“建立項目”。
- 在“建立項目”對話方塊的“項目類型”窗格中,單擊“其他項目類型”檔案夾,然後單擊“擴充性”。
- 在“模板”窗格中,單擊“共用的增益集”。
- 在“名稱”框中,為共用的增益集項目鍵入一個名稱。
- 在“位置”框中,鍵入檔案夾路徑,或單擊“瀏覽”並選擇檔案夾路徑,然後單擊“確定”。將出現“共用增益集嚮導”。
- 在“共用增益集嚮導”中單擊“下一步”。將出現“選擇程式設計語言”頁面。
- 單擊“使用 Visual Basic 建立增益集”,然後單擊“下一步”。將出現“選擇應用程式主機”頁面。
- 取消選中除“Microsoft InfoPath”外的每個應用程式旁邊的框,然後單擊“下一步”。將出現“輸入名稱和說明”頁面。
- 在“增益集的名稱”框中,鍵入 COM 增益集的名稱。
- 在“增益集的說明”框中,鍵入 COM 增益集的說明,然後單擊“下一步”。將出現“選擇增益集選項”頁面。
- 選中“我希望在載入宿主應用程式的同時載入我的增益集”和“我的增益集應可供安裝有增益集的電腦的所有使用者使用,而不僅僅是安裝該增益集的人員”框。
- 單擊“下一步”以查看“摘要”頁面,然後單擊“完成”。
在 Visual Studio 建立了項目後,您將在“方案總管”視窗中看到兩個項目。第一個項目是 COM 增益集的項目;第二個項目是用於部署 COM 增益集的安裝項目。“共用增益集嚮導”只會插入對 Microsoft Office 12.0 物件程式庫的引用,因此必須使用以下步驟插入對 InfoPath 物件程式庫的引用:
- 雙擊“我的項目”以顯示附加元件項目屬性。單擊“引用”選項卡以顯示自動添加到項目的引用。
- 單擊“添加”按鈕以顯示“添加引用”對話方塊。
- 在“.NET”選項卡上,雙擊“Microsoft.Office.Interop.InfoPath”,然後單擊“確定”。
| 注釋 |
| 要建立非託管 COM 增益集,請參閱 MSDN Library 中的建立 Microsoft Office 2000 COM 增益集。 |
查看註冊表設定
要查看將在安裝 COM 增益集時建立的註冊表設定,請按以下步驟進行操作:
- 在“方案總管”中按右鍵安裝項目的根節點,單擊“查看”,再單擊“編輯器”,然後單擊“註冊表”。
- 在左側邊窗格中,單擊加號以展開 HKEY_LOCAL_MACHINE、Software、Microsoft、InfoPath,然後展開 AddIns。
- 單擊與共用附加元件項目的 ProgID 相對應的名稱。
要更改任何這些屬性,請按右鍵屬性,單擊“屬性視窗”,然後在“屬性視窗”中更改“值”框。
編譯和分發共用的附加元件
要編譯託管 COM 增益集以便在開發共用附加元件項目的電腦上進行測試,請在“方案總管”中按右鍵共用附加元件項目的根節點,然後單擊“產生”。如果項目產生過程沒有錯誤,您可以啟動 InfoPath 編輯環境並開始使用託管 COM 增益集。如果有 InfoPath 的執行個體正在運行,請在產生項目之前將其關閉。還可能必須要開啟“COM 增益集”對話方塊以驗證 COM 增益集是否登入。要開啟“COM 增益集”對話方塊,請按以下步驟進行操作:
- 開啟 InfoPath 編輯環境。進行此操作最簡單的方式是開啟一個現有表單範本,這樣將會基於該表單範本建立一個新表單。
- 在“工具”菜單上,單擊“信任中心”。
- 單擊左邊的“附加元件”類別。
- 在靠近“信任中心”對話方塊底部的“管理”部分中,從列表中選擇“COM 增益集”,然後單擊“搜尋”按鈕。
- 在“COM 增益集”對話方塊中,您將看到最近產生的附加元件的名稱,並且旁邊應有一個複選框。如果旁邊沒有複選框,則 COM 增益集由於錯誤而載入失敗,該錯誤將列在對話方塊的“載入行為”部分中。
要編譯託管 COM 增益集以便在不是開發共用附加元件項目的電腦的另一台電腦上使用,您必須執行額外的步驟以保證代碼的安全。有關保護共用附加元件項目以便在其他電腦上使用的資訊,請參閱以下三篇文章:
| 注釋 |
| 如果尚未在目標電腦上安裝 .NET Framework 或安裝項目中的其他必需程式集,則 .msi 檔案可能未正常安裝。同時,您無法分發 .msi 檔案並隨後嘗試安裝 .msi 檔案。您還必須在與 Visual Studio 所產生原始 .msi 檔案相同的檔案夾中分發其他支援檔案。 |
在 COM 增益集中編碼
COM 增益集可捕獲 InfoPath 表單編輯環境中發生的應用程式事件。COM 增益集可以使用 ApplicationEvents 對象中的以下事件來響應使用者操作:
| 事件 |
說明 |
| NewXDocument |
在建立新表單時發生。 |
| Quit |
在使用者退出 InfoPath 時發生。 |
| WindowActivate |
在啟用任何文件視窗時發生。 |
| WindowDeactivate |
在任何文件視窗成為非使用中視窗時發生。 |
| WindowSize |
在對任何文件視窗進行大小調整或移動時發生。 |
| XDocumentBeforeClose |
在任何開啟的文檔即將關閉之前發生。 |
| XDocumentBeforePrint |
在即將列印任何開啟的文檔之前發生。 |
| XDocumentBeforeSave |
在即將儲存任何開啟的文檔之前發生。 |
| XDocumentChange |
在建立新表單,開啟現有表單或啟用其他表單時發生。 |
| XDocumentOpen |
在開啟文檔時發生。 |
要在 COM 增益集中捕獲這些事件,您必須在 Connect 類中聲明以下類層級變數:
Private InfoPathApplication As Microsoft.Office.Interop.InfoPath._Application3 Private WithEvents InfoPathApplicationEvents As Microsoft.Office.Interop.InfoPath.ApplicationEvents
|
在第一行中,_Application3 是 Application 對象的最新版本,並且必須顯式聲明,因為 Application 對象不包括 Events 屬性。第二行在 InfoPathApplicationEvents 變數的聲明中包括 WithEvents 關鍵字,並且 InfoPathApplicationEvents 對象(“訂閱者”)必須要有該行才能從 InfoPath 應用程式(“發行者”)處接收事件。
在 OnConnection 過程中,您將需要以下兩行:
InfoPathApplication = DirectCast(application, Microsoft.Office.Interop.InfoPath._Application3) InfoPathApplicationEvents = DirectCast(InfoPathApplication.Events, Microsoft.Office.Interop.InfoPath.ApplicationEvents)
|
第一行將附加元件收到的普通 application 對象轉換為 _Application3 對象。第二行將 _Application3 對象(由 InfoPathApplication 變數表示)的 Events 屬性轉換為 ApplicationEvents 對象。
要建立事件處理常式,請從 Visual Studio 視窗頂部的“類名”下拉框中選擇 InfoPathApplicationEvents,然後在 Visual Studio 視窗頂部的“方法名稱”下拉框中選擇要處理的事件。例如,如果需要控制在何時儲存表單,則處理 XDocumentBeforeSave 事件。從“方法名稱”下拉框中選擇 XDocumentBeforeSave 將會自動插入以下過程:
Private Sub InfoPathApplicationEvents_XDocumentBeforeSave(ByVal pDocument As Microsoft.Office.Interop.InfoPath._XDocument, ByRef pfCancel As Boolean) Handles InfoPathApplicationEvents.XDocumentBeforeSave End Sub
|
COM 增益集可以使用相同方法處理 ApplicationEvents 對象的任何事件。
用於開發 COM 增益集的其他資源
以下列表包括了用於瞭解有關 COM 增益集的詳細資料的連結,以及為 Office 應用程式建立 COM 增益集的分步樣本。
- 建立 Microsoft Office 2000 COM 增益集
- 用 Visual Studio .NET 建立 Office 託管 COM 增益集
- 使用 IDTExtensibility2 事件程序
- 操作方法:使用 Visual Basic .NET 產生 Office COM 增益集
- 操作方法:使用 Visual C# .NET 產生 Office COM 增益集
2006 Microsoft Corporation。著作權所有,並保留一切權利。