代码之家  ›  专栏  ›  技术社区  ›  namezero

EWS中复制操作和扩展属性的问题

  •  0
  • namezero  · 技术社区  · 6 年前

    我的任务是通过一项服务在两个邮箱中双向同步联系人文件夹。 请容忍我,因为这是我第一次在C#中使用EWS。

    为了唯一地识别项目并跟踪同步更改,我使用 SyncFolderHierarchy() SyncFolderItems() 对于每个子文件夹中的项目,同时跟踪同步状态。

    Item.SetExtendedProperty()

    这确实很有效,但我遇到了一个警告。

    在这种情况下,我现在在一个邮箱中有两个具有相同“唯一”ID的项目,并且该项目的匹配不明确。

    基本上:

    1. SyncFolderItems()
    2. 如果项目没有唯一ID,则使用唯一ID对其进行标记
    3. 用户复制并粘贴项目
    4. Create
    5. 已创建的项已具有唯一ID

    现在,有人可能会说,只需在创建事件中覆盖项目的唯一ID。

    当我将新项目从邮箱a同步到邮箱B时,我还会创建一个项目。 一旦 SyncFolderItems()

    我基本上看到两种选择:

    • 以某种方式防止此扩展属性可复制

    • 阻止EWS为我自己创建的项目发送创建。 我知道我可以忽略 SyncFolderItems() documentation

    有没有人对如何以不同的方式处理这一问题或实施这两种方案有任何建议??

    1 回复  |  直到 6 年前
        1
  •  1
  •   Dmitry Streblechenko    6 年前

    交换id应该是 你的 也是唯一的id。将您的id保留在项目本身上是不值得的-首先,这需要对该项目进行修改(即使是您导致了更改,也会生成更改事件),其次,正如您已经注意到的,您可能会得到相同项目的副本或三重副本。

    对于约会来说更糟糕的是,每次传入的约会更新都会导致Outlook重新创建约会,从而使用新id并清除自定义属性。