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

时间:2016-03-15 08:59:56

标签: c# icloud outlook-2007 caldav

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

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

由于这个数字对于每个项目都不同,只需将GlobalAppointmentID存储在数据库中,让应用程序在添加/删除/修改约会时参考该数据就不会作为参考点。< / p>

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

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

1 个答案:

答案 0 :(得分:1)

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

  

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

有关与此相关的属性的详细信息,请参阅MS-OXOCAL

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

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

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