保存前在Outlook中修改复制/粘贴项目(C#)

本文关键字:项目 复制 Outlook 修改 保存 | 更新日期: 2023-09-27 17:57:38

我最近为一个客户端编写了一个Outlook插件(用于Outlook 2010),该插件可以将用户的Outlook数据库与第三方应用程序同步。这很好用。但是,客户端想要做的一件事是利用标准的复制/粘贴功能来复制Outlook中的记录。问题是,我为已发送到第三方系统的任何Outlook记录定义了UserProperty(它存储来自第三方的内部ID)。当客户端执行复制/粘贴时,此UserProperty也会被复制(这很糟糕,因为它创建了多个具有相同第三方ID的记录)。我想知道是否有某种方法可以通过代码检测到正在发生复制/粘贴,并在保存之前对记录进行修改(删除此UserProperty)。由于他们可能会在"任务"、"约会"或"联系人"中执行此操作,我需要全面适用的指导。

根据以下建议,我尝试利用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中的所有资源管理器,但它不能让我访问我正在查找的单个资源管理器(约会、任务、联系人)(当我调试它时,"数组"中只有一个元素)。此外,我试图通过调用MAPIFolder.GetExplorer来访问那些特定的Explorer项,但总是返回null。

保存前在Outlook中修改复制/粘贴项目(C#)

尝试使用Explorer.BeforeItemPaste事件。