正在为Outlook日历编写C#插件以将约会映射到另一个系统。使用EventHandlers(例如MAPIFolderEvents_12_BeforeItemMoveEventHandler
和ItemsEvents_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);
任何人都可以建议我如何获得有关此操作的通知吗?
非常感谢
答案 0 :(得分:0)
您是对的,当删除或修改重复活动的实例时,只会触发ItemChange
事件-删除仅记录在主约会的重复blob中(您可以看到其数据在OutlookSpy中-选择约会,单击IMessage按钮,选择名为PT_BINARY属性的AppointmentRecur),然后将发生的更改另存为主约会的附件。
但是ItemChange
很少在代码中触发的原因是垃圾回收器释放了触发事件(项目)的对象。您需要将calendarFolder.Items
存储在类级别的专用变量中(这样,只要您的类还活着,GC就不会碰它),并在该变量上设置事件处理程序