EWS 中复制操作和扩展属性的问题
Woes with copy operation and extended properties in EWS
我的任务是通过服务双向同步两个邮箱中的联系人文件夹。
请耐心等待,因为这是我第一次在 C# 中使用 EWS。
为了唯一标识项目并跟踪同步更改,我对子文件夹使用 SyncFolderHierarchy()
,对每个子文件夹中的项目使用 SyncFolderItems()
,同时跟踪同步状态。
由于 folder/item ID 取决于邮箱、初始同步以及创建操作,我通过 Item.SetExtendedProperty()
[使用扩展 属性 标记同步项目
这确实很好用,但我 运行 需要注意。
当用户在 Outlook 中复制和粘贴文件夹或联系人时,它还会复制唯一 ID(扩展 属性),使其不再那么唯一。
在那种情况下,我现在在一个邮箱中有两个具有相同 "unique" ID 的项目,并且现在对项目有一个不明确的匹配。
基本上:
SyncFolderItems()
被调用,同步状态被保存
- 如果项目没有唯一 ID,则用唯一 ID 标记
- 用户复制并粘贴项目
SyncFolderItems()
被调用(与之前的同步状态),returns 用户复制项目的 Create
事件
- 创建的项目已具有唯一 ID
现在,有人可能会争辩说只覆盖创建事件中项目的唯一 ID。
但是,这会导致以下问题:
当我将新项目从邮箱 A 同步到邮箱 B 时,我也创建了一个项目。
现在调用邮箱 A 上的 SyncFolderItems()
后,我还会为我自己的项目检索一个创建事件,在这种情况下,它合法地已经分配了一个不能被覆盖的唯一 ID。
我基本上看到两个选项:
以某种方式阻止此扩展 属性 被复制
防止 EWS 发送我自己创建的项目的创建。
我知道我可以在 SyncFolderItems()
调用中忽略 ItemID,但我不确定我应该如何跨调用跟踪项目 ID,因为它们可能会根据 documentation
有人对如何以不同方式处理此问题或实施任一选项有任何建议吗?
Exchange ID 也应该是您的 唯一 ID。将您的 id 保留在项目本身上真的不值得 - 首先,这需要对该项目进行修改(即使是您引起了更改,这也会产生一个更改事件),其次,因为您已经请注意,您最终可能会得到相同项目的重复项或一式三份。
约会更糟 - 每个传入的约会更新都会导致 Outlook 重新创建约会,导致使用新 ID 并清除您的自定义 属性。
我的任务是通过服务双向同步两个邮箱中的联系人文件夹。 请耐心等待,因为这是我第一次在 C# 中使用 EWS。
为了唯一标识项目并跟踪同步更改,我对子文件夹使用 SyncFolderHierarchy()
,对每个子文件夹中的项目使用 SyncFolderItems()
,同时跟踪同步状态。
由于 folder/item ID 取决于邮箱、初始同步以及创建操作,我通过 Item.SetExtendedProperty()
[使用扩展 属性 标记同步项目
这确实很好用,但我 运行 需要注意。
当用户在 Outlook 中复制和粘贴文件夹或联系人时,它还会复制唯一 ID(扩展 属性),使其不再那么唯一。 在那种情况下,我现在在一个邮箱中有两个具有相同 "unique" ID 的项目,并且现在对项目有一个不明确的匹配。
基本上:
SyncFolderItems()
被调用,同步状态被保存- 如果项目没有唯一 ID,则用唯一 ID 标记
- 用户复制并粘贴项目
SyncFolderItems()
被调用(与之前的同步状态),returns 用户复制项目的Create
事件- 创建的项目已具有唯一 ID
现在,有人可能会争辩说只覆盖创建事件中项目的唯一 ID。
但是,这会导致以下问题:
当我将新项目从邮箱 A 同步到邮箱 B 时,我也创建了一个项目。
现在调用邮箱 A 上的 SyncFolderItems()
后,我还会为我自己的项目检索一个创建事件,在这种情况下,它合法地已经分配了一个不能被覆盖的唯一 ID。
我基本上看到两个选项:
以某种方式阻止此扩展 属性 被复制
防止 EWS 发送我自己创建的项目的创建。 我知道我可以在
SyncFolderItems()
调用中忽略 ItemID,但我不确定我应该如何跨调用跟踪项目 ID,因为它们可能会根据 documentation
有人对如何以不同方式处理此问题或实施任一选项有任何建议吗?
Exchange ID 也应该是您的 唯一 ID。将您的 id 保留在项目本身上真的不值得 - 首先,这需要对该项目进行修改(即使是您引起了更改,这也会产生一个更改事件),其次,因为您已经请注意,您最终可能会得到相同项目的重复项或一式三份。
约会更糟 - 每个传入的约会更新都会导致 Outlook 重新创建约会,导致使用新 ID 并清除您的自定义 属性。