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



我正在使用一个同步客户端,它可以在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.UniqueKeyItemId.ChangeKey

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

所以有人有什么建议或其他方法吗?如果我忘记添加一些细节,请也提供一些反馈,以便我可以添加这个

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

最新更新