【发布时间】:2016-10-21 04:26:46
【问题描述】:
我正在开发一个同步客户端,用于在 EWS (Office 365) 之间复制约会。
总的来说,我遵循 MS 提供的文档: https://msdn.microsoft.com/en-us//library/office/dn440952(v=exchg.150).aspx
我的问题:
这篇文章https://msdn.microsoft.com/en-us//library/office/dn605828(v=exchg.150).aspx#Arbeiten%20mit%20Bezeichnern 表明约会的ItemId 可能会改变并且不是唯一的。
通过调查,我发现人们从约会中加载cleanGlobalObjectId,这是一劳永逸的。
// unique id for sync that do not change like item id
var cleanGlobalObjectId = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Meeting, 0x23, MapiPropertyType.Binary);
var psPropSet = new PropertySet(BasePropertySet.FirstClassProperties) { cleanGlobalObjectId };
所以我用
var appointment = Appointment.Bind(service, item, psPropSet);
object calIdVal;
appointment.TryGetProperty(cleanGlobalObjectId, out calIdVal);
var syncId = Convert.ToBase64String((byte[])calIdVal);
syncId 是迄今为止我测试的唯一并且适用于我的数据库中的 INSERT 和 UPDATE 约会。
当我现在使用来自 EWS 的 SyncFolderItems 时,我会得到 create,update,delete 的项目集合。
我的问题:
我无法加载已删除的Appointment.Bind() 约会。
但我需要加载约会才能获得我的syncId。
SyncFolderItems 集合让我可以访问ItemId.UniqueKey 和ItemId.ChangeKey。
因此,如果在用户日历中移动或删除约会,我将无法在我保存复制约会的客户数据库中识别正确的记录。
所以有人有一些建议或任何其他方法吗?如果我忘记添加一些细节,也请提供一些反馈,以便我添加。
【问题讨论】: