通过同步帐户使用不同计算机时 outlook 中的唯一约会标识符

Unique appointment identifier in outlook when using different computers through sync'd account

运行陷入轻微的烦恼。我正在开发的应用程序有一个内置的日历系统,可以将约会提供给 outlook 中的 icloud 日历,以便与手机同步,这些日历分布在多个 icloud 日历(每个人一个)

我的问题在于在对主应用程序进行更改时更新这些约会。我已经知道我可以使用 AppointmentItem.GlobalAppointmentID 来获取创建它的计算机上放置在日历中的条目的 ID,但是我相信这只是该系统唯一的(即另一个用户在同步日历的另一台计算机上会有一组不同的全局 ID 号)

由于这个数字对于每个项目都是不同的,所以只需将 GlobalAppointmentID 存储在数据库中并让应用程序参考它,当 adding/deleting/modifying 约会不能作为参考点时。

在理想情况下,我会使用交换服务器来处理所有这些,或者直接使用 c# 修改 icloud 中的约会(尽管我尽了最大的努力,但我还是找不到一个简单的方法来实现这个)

我是不是遗漏了什么,或者在同步后无法识别唯一的日历约会条目?

你的做法是正确的。 GlobalAppointmentID 是获取 Outlook 日历项的全局标识符的正确方法:

The Global Object ID is the same across all copies of the item.

可在MS-OXOCAL.

中找到相关属性的详细信息

在 iCloud 控制面板的情况下,GlobalAppointmentID 将派生自 UID iCalendar property. It should also have the raw iCalendar UID available in a separate MAPI property (you can discover such using a tool like OutlookSpy - 如果您想进行任何认真的 MAPI 开发,您应该购买该工具,真的)。 =19=]

请注意,您应该只对跨文件夹的操作使用 GlobalAppointmentID。本地标识属性就是EntryID,相当于关系数据库中的主键

P.S.: This question 有一些关于构建 CalDAV 客户端的信息。取决于你到底想做什么,它可能并不难 - 它只是一个带有基于文本的有效负载的 HTTP 协议 (iCalendar)。