会议响应后的约会 EntryID

Appointment EntryID after meeting response

我正在使用 VSTO (C#) 创建 Outlook 插件,但我遇到了如何控制约会的 EntryID 的问题。每个约会都有他唯一的 EntryID,没关系,我正在保存这个 ID,它可以帮助我将 Outlook 的日历与我系统中的日历同步。问题是当有人向会议发送更新并且我接受时 - Outlook 的项目已更新但 EntryID 不同。我读过,在此过程中,旧项目被删除,新项目是基于前一个项目创建的。 是否有任何事件可以帮助我赶上旧会议,获得他的 EntryID,然后赶上新会议,也获得他的 EntryID,这将允许我在我的系统中更新会议 EntryID?

你可以尝试使用Items.Item.Add/ItemRemove事件,但我认为它不可靠,尤其是ItemRemove事件不传递任何关于删除的信息项目。

您确实需要避免使用条目 ID 作为约会的标识符 - 使用 GlobalAppointmentId。它永远不会改变,即使在不同的邮箱中,相同的约会也会具有相同的 GlobalAppointmentId 值。请记住,Outlook 在处理会议更新时删除并重新创建约会 - 这将更改条目 ID,但保持 GlobalAppointmentId 不变。

不幸的是,唯一的问题是 OOM 不会让您在 Items.Find/[=19= 中搜索 GlobalAppointmentId(或任何其他 PT_BINARY 属性) ]/Restrict。唯一的解决方法是循环遍历日历文件夹中的所有项目(效率极低)或使用扩展 MAPI(仅限 C++ 或 Delphi)进行搜索,或者 Redemption (I am its author - any language, its version of RDOFolder.ItemsFind 允许搜索 GlobalAppointmentId)