我最近为一个将用户的 Outlook 数据库与第三方应用程序同步的客户端编写了一个 Outlook 插件(用于 Outlook 2010)。这工作正常。但是,客户想要做的一件事是利用标准的复制/粘贴功能在 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 中的所有资源管理器,但这并没有让我访问我正在寻找的单个资源管理器(约会、任务、联系人)(其中只有一个元素) 'array' 当我调试它时)。此外,我尝试通过调用 MAPIFolder.GetExplorer 来访问那些特定的资源管理器项目,但这总是返回 null。