首页 > 解决方案 > C# OutlookCalendar 插件 - 如何检测重复系列中的会议删除

问题描述

我正在为 Outlook 日历编写一个 C# 插件,以将约会映射到另一个系统。使用 EventHandlers(例如MAPIFolderEvents_12_BeforeItemMoveEventHandlerItemsEvents_ItemChangeEventHandler)我可以检测项目的移动和删除,前提是它们是单个项目或完整的重复系列。

问题是我似乎无法检测到系列中的会议被删除。(我认为这是因为它是对主约会的更改而不是删除)。EventHandler 会寻找将项目移动到 DeletedItems 文件夹的情况,但在这种情况下不会发生这种情况。我在文件夹上有一个 ItemChange EventHandler 但这似乎很少触发。

calendarFolder = (Outlook.Folder)Application.Session.GetDefaultFolder(OlDefaultFolders.olFolderCalendar);

calendarFolder.Items.ItemChange += new ItemsEvents_ItemChangeEventHandler(calendarFolder_ItemsChange);

calendarFolder.BeforeItemMove += new Microsoft.Office.Interop.Outlook.MAPIFolderEvents_12_BeforeItemMoveEventHandler(calendarFolder_BeforeItemMove);

谁能建议我如何获得有关此操作的通知?

非常感谢

标签: c#outlookvsto

解决方案


您是对的,只有ItemChange在删除或修改重复活动的实例时才会触发事件 - 删除仅记录在主约会的重复 blob 中(您可以在OutlookSpy中查看其数据- 选择约会,单击IMessage 按钮,选择 AppointmentRecur 命名为 PT_BINARY 属性)并将发生更改保存为主约会上的附件。

但是ItemChange在您的代码中很少触发的原因是垃圾收集器释放了触发事件(项目)的对象。您需要calendarFolder.Items在类级别存储一个专用变量(这样,只要您的类还活着,GC就不会触及它)并在该变量上设置一个事件处理程序


推荐阅读