c# - EWS 中的复制操作和扩展属性的问题
问题描述
我的任务是通过服务双向同步两个邮箱中的联系人文件夹。请多多包涵,因为这是我第一次在 C# 中使用 EWS。
为了唯一标识项目并跟踪同步更改,我使用SyncFolderHierarchy()
子文件夹和SyncFolderItems()
每个子文件夹中的项目,同时跟踪同步状态。
由于文件夹/项目 ID 依赖于邮箱、初始同步以及创建操作,我通过扩展属性标记同步项目Item.SetExtendedProperty()
这非常有效,但我遇到了一个警告。
当用户在 Outlook 中复制和粘贴文件夹或联系人时,它还会复制唯一 ID(扩展属性),使其不再唯一。在这种情况下,我现在在邮箱中有两个具有相同“唯一”ID 的项目,现在该项目有一个模棱两可的匹配项。
基本上:
SyncFolderItems()
被调用,并保存同步状态- 如果项目没有唯一 ID,则使用唯一 ID 进行标记
- 用户复制并粘贴项目
SyncFolderItems()
被调用(具有先前的同步状态),返回Create
用户复制项目的事件- 创建的项目已经有一个唯一的 ID
现在,有人可能会争辩说只是在创建事件中覆盖项目的唯一 ID。
但是,这会导致以下问题:
当我将邮箱 A 中的新项目同步到邮箱 B 时,我还创建了一个项目。现在调用SyncFolderItems()
邮箱 A 后,我还会为我自己的项目检索一个 Create 事件,在这种情况下,它已经合法地分配了一个不能被覆盖的唯一 ID。
我基本上看到两个选项:
以某种方式阻止此扩展属性可复制
阻止 EWS 为我自己创建的项目发送创建。 我知道我可以在
SyncFolderItems()
通话中忽略 ItemID,但我不确定我应该如何跨通话跟踪项目 ID,因为它们可能会根据文档发生变化
有没有人对如何以不同的方式处理这个问题或实施任何一个选项有任何建议?
解决方案
Exchange id 也应该是您的唯一 ID。将您的 id 保留在项目本身上确实不值得 - 首先,这需要修改该项目(即使是您导致更改也会生成更改事件),其次,因为您已经请注意,您最终可能会得到同一项目的重复或三次重复。
约会更糟糕 - 每个传入的约会更新都会导致 Outlook 重新创建约会,从而导致使用新的 id 并清除您的自定义属性。
推荐阅读
- javascript - 如何在单击另一个元素时关闭一个元素
- python - df中的单独列与python中电子邮件的购买的第一个和最后一个日期?
- entity-framework - 检索嵌套层次结构中的所有项目
- c++ - 进入下一个循环迭代,意外更改了值
- vue.js - 在 vue 中导入对象 js 并从捆绑中排除此文件
- android - 在发布模式下为 Android 构建时如何在 Qt Creator 中禁用调试服务器?
- javascript - 使用 Date.setDate() 按天递增时的奇怪行为
- swift - Swift – macOS `batteryLevel` 属性
- php - 如何在 debug.log 中而不是在 WordPress 页面上记录所有错误
- json - 如何发送typeof json而不是json字符串