EWS SyncFolderItems - 删除客户端数据库上的约会

时间:2016-10-14 08:53:05

标签: c# exchangewebservices

我正在使用同步客户端来复制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时,我会收到createupdatedelete的一系列项目。

我的问题:

我无法加载已删除Appointment.Bind()的约会。 但是我需要加载约会来获取syncId

SyncFolderItems集合让我可以访问ItemId.UniqueKeyItemId.ChangeKey

因此,如果在用户日历中移动或删除约会,我就无法在我保存复制约会的客户端数据库中识别正确的记录。

所以任何人都有一些建议或任何其他方法?如果我忘了添加一些细节,请提供一些反馈,以便我可以添加。

1 个答案:

答案 0 :(得分:1)

您应该同时保存数据库中的cleanGlobalObjectId和ItemId。这样,您就可以解决项目的删除以及Exchange重新创建约会的事件(在某些情况下,这种事件不会一直发生)。

相关问题