c# - C# OutlookCalendar 插件 - 如何检测重复系列中的会议删除
问题描述
我正在为 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);
谁能建议我如何获得有关此操作的通知?
非常感谢
解决方案
您是对的,只有ItemChange
在删除或修改重复活动的实例时才会触发事件 - 删除仅记录在主约会的重复 blob 中(您可以在OutlookSpy中查看其数据- 选择约会,单击IMessage 按钮,选择 AppointmentRecur 命名为 PT_BINARY 属性)并将发生更改保存为主约会上的附件。
但是ItemChange
在您的代码中很少触发的原因是垃圾收集器释放了触发事件(项目)的对象。您需要calendarFolder.Items
在类级别存储一个专用变量(这样,只要您的类还活着,GC就不会触及它)并在该变量上设置一个事件处理程序
推荐阅读
- bootstrap-modal - Mapbox 在 Modal Bootstrap 中不显示
- node.js - 使用带有 SIM 和蜂窝互联网的 Raspberry Pi 时 NodeJS 套接字挂断
- python - 为熊猫系列添加时间戳
- javascript - 从自定义反应组件获取正文内容
- node.js - 如何使用 HTTPS 在节点服务器中部署 Sveltekit 应用程序?
- javascript - 如何检查当前使用的是哪个环境
- android - 在 Virtual Box 的模拟器中启动此 avd 时出错
- mysql - 如何将所有记录更改存储在历史记录中,以便在 MySQL 中轻松跟踪
- python - Tensorflow 2 错误:[预测必须 >= 0] [条件 x >= y 没有按元素保持:] 在使用具有类权重的多层神经网络时
- python - 如何使用 Python 将不同的时间格式转换为“%Y-%m-%d”?