遇到轻微的烦恼。我正在开发的应用程序有一个内置的日历系统,用于向Outlook中的icloud日历提供约会,以便与手机同步,分布在多个icloud日历上(每个人一个)
我的问题在于在主应用程序上进行更改时更新这些约会。我已经知道我可以使用AppointmentItem.GlobalAppointmentID
来获取创建它的计算机上日历中条目的ID,但是我会相信这只对该系统是唯一的(即,同步日历的另一台计算机上的另一个用户将拥有一组不同的全局ID号)
由于这个数字对于每个项目都不同,只需将GlobalAppointmentID
存储在数据库中,让应用程序在添加/删除/修改约会时参考该数据就不会作为参考点。< / p>
在一个理想的世界里,我正在使用交换服务器来处理所有这些,或者使用c#直接修改icloud中的约会(尽管我付出了最大的努力,但我找不到一个简单的方法来实现它)
我在这里遗漏了什么,或者在同步之后是否无法识别唯一的日历约会条目?
答案 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协议。