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

Posted

技术标签:

【中文标题】通过同步帐户使用不同计算机时 Outlook 中的唯一约会标识符【英文标题】:Unique appointment identifier in outlook when using different computers through sync'd account 【发布时间】:2016-03-15 08:59:56 【问题描述】:

遇到了些许烦恼。我正在开发的应用程序有一个内置的日历系统,该系统将约会提供给 Outlook 中的 icloud 日历,以便与手机同步,分布在多个 icloud 日历上(每个人一个)

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

由于每个项目的此数字不同,因此仅将 GlobalAppointmentID 存储在数据库中并让应用程序在添加/删除/修改约会时引用它不能作为参考点。

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

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

【问题讨论】:

请完善您的问题。您是否使用 Windows 的 iCloud 控制面板将项目与 Outlook 同步?您的其他应用程序如何访问这些项目,EventKit?此外,如果 Exchange 是您的“理想世界”,您为什么不使用它,而使用 iCloud? iCloud/CalDAV 事件都有一个唯一的 UID,即 UID。 Exchange/Outlook 也是如此 - 顾名思义,您可以通过 GlobalAppointmentID 获得。为什么你认为它对系统来说是独一无二的,它明确表示“全局”:-) 使用 EntryID 属性访问快速本地 ID。 EntryID 对于单个日历是唯一的,因此您可以有 2 个具有相同 EntryID 但在不同日历中的约会。基于This MSDN post 给我的印象是,Outlook 在您访问该属性时提供的全局 ID 仍然是本地化的,但在日历之间移动约会时不会改变。使用面板进行同步,但如前所述,我正在努力寻找一种简单的方法将 CalDAV 实现到我的 C# 程序中 链接的帖子明确指出:“全局对象 ID 在项目的所有副本中都是相同的”。对于将 CalDAV UID 映射到 GlobalObjectID 的 iCP 尤其如此(原始 CalDAV UID 也应该可以通过 MAPI 属性获得,请检查 OutlookSpy)。顺便说一句:EntryID 通常在移动过程中也不会更改,只有在您离开特定 Outlook 数据文件(或制作副本,在这种情况下将创建一个新文件)时。 所以我一直在寻找的唯一标识符 - 与 icloud 使用并且我非常想访问的标识符相同 - 一直就在我面前吗?我不知道 icloud 会将所述 ID 号映射到属性。 并不完全相同(GID是二进制结构,UID只是一个字符串),但是iCP中的Outlook GlobalObjectID是从CalDAV UID派生的。如前所述,您还应该能够使用自定义 Apple 属性访问原始 UID。当然,其实施可能会改变。顺便说一句:我认为如果 Outlook 本身导入 iCalendar 会议请求等也是如此。不再记住所有细节。 【参考方案1】:

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

全局对象 ID 在项目的所有副本中都是相同的。

相关属性的详细信息可以在MS-OXOCAL找到。

对于 iCloud 控制面板,GlobalAppointmentID 将派生自 UID iCalendar 属性。它还应该在单独的 MAPI 属性中提供原始 iCalendar UID(您可以使用 OutlookSpy 之类的工具来发现此类工具 - 如果您想进行任何认真的 MAPI 开发,您应该购买该工具,真的)。

请注意,您应该仅将GlobalAppointmentID 用于跨文件夹的操作。本地标识属性为EntryID,类似于关系数据库中的主键。

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

【讨论】:

太棒了。需要在我结束时对其进行正确测试,但这完美地回答了我的问题。谢谢

以上是关于通过同步帐户使用不同计算机时 Outlook 中的唯一约会标识符的主要内容,如果未能解决你的问题,请参考以下文章

通过Outlook上的适当帐户发送VBA生成的个性化电子邮件

如何使用不同的帐户将存储容器添加到 Azure?

Outlook - 查找邮件发送到的帐户的电子邮件

该帐户无权在其他用户的 Outlook 日历上保存约会时模拟请求的用户

使用 java SDK 在不同区域的 Blob 存储帐户之间同步数据

如何解决Outlook配置用户邮箱 “该名称不能与地址列表中的名称匹配”错误