2013-02-05 43 views
1

我最近爲使用第三方應用程序同步其用戶的Outlook數據庫的客戶端編寫了一個Outlook插件(用於Outlook 2010)。這工作正常。但是,客戶想要做的一件事是利用標準的複製/粘貼功能在Outlook中複製記錄。問題是我爲任何已發送到第三方系統(它存儲第三方系統的內部ID)的Outlook記錄定義一個UserProperty。當客戶端執行復制/粘貼時,這個UserProperty也被複制(這是壞的,因爲它創建了具有相同第三方ID的多個記錄)。我想知道是否有某種方式通過代碼檢測到複製/粘貼正在發生,並在保存之前對記錄進行修改(刪除此UserProperty)。由於他們可能在任務,約會或聯繫人上執行此操作,因此我需要適用於所有人員的指導。在保存前修改Outlook中的複製/粘貼項目(C#)

每建議下面,我試圖利用BeforeItemPaste,如下所示:

private void ThisAddIn_Startup(object sender, System.EventArgs e) { 
    Globals.ThisAddIn.Application.ActiveExplorer().BeforeItemPaste += new Outlook.ExplorerEvents_10_BeforeItemPasteEventHandler(Item_BeforeItemPaste); 
} 

private void Item_BeforeItemPaste(ref System.Object ClipboardContent, 
    Microsoft.Office.Interop.Outlook.MAPIFolder Target, ref bool Cancel) { 
    System.Windows.Forms.MessageBox.Show("Trying to paste"); 
} 

出現該消息的第一次我做了複製/粘貼,然後永遠不再。我試圖利用Application.Explorers,理論上我可以訪問Outlook中的所有Explorers,但是這並不能讓我訪問我正在尋找的個人(Appointment,Task,Contact)(這裏只有一個元素'數組')當我調試它)。另外,我試圖通過調用MAPIFolder.GetExplorer來訪問這些特定的資源管理器項目,但是這總是返回null。

回答

1

嘗試使用Explorer.BeforeItemPaste事件。

+0

從上面發佈的代碼中,我的問題似乎源於我沒有在ThisAddIn_Startup之外聲明單獨的'null'Explorer變量的事實。一旦我這樣做了,然後在ThisAddIn_Startup中設置等於this.Application.ActiveExplorer(),我就可以每次觸發它。謝謝德米特里指出我正確的方向。 –

+0

另一個要提及的項目 - 事實證明,您實際上無法修改要粘貼的項目,因爲它尚不存在。唯一可以訪問的是對原始對象的引用。因此,如果您對其進行更改,則會修改原件。爲了解決這個問題,你基本上必須將系統短路。訪問選定的對象,複製它,將Cancel設置爲true,然後修改複製的對象並保存。從用戶的角度來看,複製/粘貼仍然會發生。 –

+0

小心ThisAddIn_Startup - 可能還沒有一個資源管理器(或者,例如,當你點擊一個mailto鏈接並且只有一個Inspector出現時)。您可能還想連接Inspectors.NewInspector事件。 –