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

C# EWS SyncFolderItems-删除客户端数据库上的约会,c#,exchangewebservices,C#,Exchangewebservices,我正在使用一个同步客户端,该客户端将约会从EWS(Office 365)复制到EWS 一般而言,我遵循MS提供的文件: 我的问题是: 本文显示约会的ItemId可能会更改,并且不是唯一的 所以我调查发现,人们从约会中加载的cleanGlobalObjectId一劳永逸 // unique id for sync that do not change like item id var cleanGlobalObjectId = new ExtendedPropertyDefinition(Def

我正在使用一个同步客户端,该客户端将约会从EWS(Office 365)复制到EWS

一般而言,我遵循MS提供的文件:

我的问题是: 本文显示约会的
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
到目前为止,我测试过它是唯一的,可以在数据库中插入和更新约会

当我现在从EWS使用
SyncFolderItems
时,我得到了
创建
更新
删除
的项目集合

我的问题:

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

SyncFolderItems
集合允许我访问
ItemId.UniqueKey
ItemId.ChangeKey

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


有人有什么建议或其他方法吗?如果我忘记添加一些详细信息,请同时提供一些反馈,以便我可以添加此信息。

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

谢谢Henning,我正打算用这种方式保存这两个项目,如果是删除,请使用ItemId删除约会。每次同步都会更新ItemId,这样我就可以确保我的ItemId在删除案例中是最新的。