【问题标题】:EWS SyncFolderItems - Delete appointments on client-databaseEWS SyncFolderItems - 删除客户端数据库上的约会
【发布时间】: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.UniqueKeyItemId.ChangeKey

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

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

【问题讨论】:

    标签: c# exchangewebservices


    【解决方案1】:

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

    【讨论】:

    • 谢谢 Henning,我只是想用这种方式保存两者,并在删除的情况下使用 ItemId 删除约会。每个 Sync 也会更新 ItemId,因此我可以确保我的 Itemid 在删除案例中是最新的。
    猜你喜欢
    • 1970-01-01
    • 2011-09-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    • 1970-01-01
    相关资源
    最近更新 更多