C#OutlookCalendar插件-如何在重复系列中检测会议的删除

时间:2019-05-22 22:08:24

标签: c# outlook vsto

正在为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);

任何人都可以建议我如何获得有关此操作的通知吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

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

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