SyncFolderItems返回用户日历中未删除的已删除项
本文关键字:删除 返回 用户 日历 SyncFolderItems | 更新日期: 2023-09-27 17:53:07
我正在使用EWS管理的API实现我们自己的日历程序和Exchange日历之间的同步。一切似乎都很顺利,但当我编写一个小程序定期更新我们系统和Exchange中的约会,以测试同步服务时,我注意到我们数据库中的约会数量正在稳步减少。事实证明,当我使用SyncFolderItems获取更新时,Exchange有时会说,当约会没有被删除时,它会被删除。最后我把它从系统中删除了,但它还在用户的exchange日历中。我的第一个想法是,Exchange中的某些逻辑导致了约会被删除和重新创建,但如果是这种情况,我也应该收到创建约会的通知。我不是(除非我自己创建一个)。
我试着用谷歌搜索,但我找不到任何相关的。90%的结果是关于如何找到被删除的项目的问题。
这是我如何从Exchange获得更改:
do
{
ChangeCollection<ItemChange> icc = m_ECService.SyncFolderItems(
new FolderId(WellKnownFolderName.Calendar),
PropertySet.IdOnly,
m_IgnoredExchangeIDs,
512,
SyncFolderItemsScope.NormalItems,
m_syncStates[m_Employee.EmployeeID]);
m_syncStates[m_Employee.EmployeeID] = icc.SyncState;
foreach (ItemChange change in icc)
{
switch (change.ChangeType)
{
case ChangeType.Create:
AppointmentCreatedInExchange(change.ItemId.UniqueId);
break;
case ChangeType.Delete:
AppointmentDeletedInExchange(change.ItemId.UniqueId);
break;
case ChangeType.Update:
AppointmentUpdatedInExchange(change.ItemId.UniqueId);
break;
default:
break;
}
}
MoreChangesAvailable = icc.MoreChangesAvailable;
} while (MoreChangesAvailable);
m_IgnoredExchangeIDs是我在请求exchange更新之前从数据库发送到exchange的项目的id列表。函数更新数据库以匹配来自exchange的信息。
这是怎么回事?为什么一个约会没有被删除,而Exchange却说已删除?
如果有人在将来某个时候发现这一点,我可以说我的问题是exchange提供的惟一id区分大小写。我将这些id存储在数据库中,并进行了不区分大小写的查询。我发现我经常有两个唯一的id,它们只有一个字母的大小写不同。