Горе с операцией копирования и расширенными свойствами в EWS - PullRequest
0 голосов
/ 23 ноября 2018

Мне поручена двунаправленная синхронизация папок контактов в двух почтовых ящиках со службой.Пожалуйста, потерпите меня, поскольку я впервые использую EWS в C #.

Чтобы уникально идентифицировать элементы и отслеживать изменения для синхронизации, я использую SyncFolderHierarchy() для подпапок и SyncFolderItems() дляэлементов в каждой подпапке при отслеживании состояния синхронизации.

Поскольку идентификаторы папок / элементов не зависят от почтового ящика, при начальной синхронизации, а также при операциях создания, я помечаю синхронизированные элементы расширенным свойством через Item.SetExtendedProperty()

Это работает очень хорошо, но я столкнулся с оговоркой.

Когда пользователь копирует и вставляет папку или контакт в Outlook, он также копирует уникальный идентификатор (расширенное свойство)делая его не таким уж уникальным.В этом случае у меня теперь есть два элемента в почтовом ящике с тем же «уникальным» идентификатором, и теперь я имею неоднозначное соответствие для элемента.

В основном:

  1. SyncFolderItems()и состояние синхронизации сохранено
  2. Элемент помечен с уникальным идентификатором, если у него нет одного
  3. Пользователь копирует и вставляет элемент
  4. SyncFolderItems() (с предыдущим состоянием синхронизации), возвращает событие Create для скопированного пользователем элемента
  5. Созданный элемент уже имеет уникальный идентификатор

Теперь можно утверждать, что просто перезаписать уникальныйИдентификатор элемента в событии создания.

Однако это приводит к следующей проблеме:

Когда я синхронизирую новый элемент из почтового ящика A в почтовый ящик B, ятакже создайте предмет.После того, как SyncFolderItems() в почтовом ящике A теперь вызывается, я также извлекаю событие Create для моего собственного элемента, которому в этом случае на законных основаниях уже назначен уникальный идентификатор, который не должен быть перезаписан.:

  • Каким-то образом предотвратить копирование этого расширенного свойства

  • Запретить EWS отправку создания для элемента, который я создал сам. Я знаю, что могу игнорировать ItemIDs в вызове SyncFolderItems(), но я не уверен, как мне следует отслеживать идентификаторы элементов в вызовах, поскольку они могут изменяться в соответствии с документацией

Кто-нибудь есть какие-либо предложения о том, как подходить к этому по-другому или реализовать любой вариант ??

1 Ответ

0 голосов
/ 24 ноября 2018

Идентификатор Exchange должен действительно быть вашим уникальным идентификатором.На самом деле не стоит хранить свой идентификатор на самом элементе - во-первых, для этого требуется модификация этого элемента (и это сгенерирует событие изменения, даже если вы вызвали это изменение), а во-вторых, как вы уже сделализаметили, что вы можете получить дубликаты или дубликаты одного и того же элемента.

Это даже хуже для встреч - каждое входящее обновление встречи заставляет Outlook заново создавать встречу, вызывая использование нового идентификатора и уничтожая его.Ваше пользовательское свойство.

...