Мне поручена двунаправленная синхронизация папок контактов в двух почтовых ящиках со службой.Пожалуйста, потерпите меня, поскольку я впервые использую EWS в C #.
Чтобы уникально идентифицировать элементы и отслеживать изменения для синхронизации, я использую SyncFolderHierarchy()
для подпапок и SyncFolderItems()
дляэлементов в каждой подпапке при отслеживании состояния синхронизации.
Поскольку идентификаторы папок / элементов не зависят от почтового ящика, при начальной синхронизации, а также при операциях создания, я помечаю синхронизированные элементы расширенным свойством через Item.SetExtendedProperty()
Это работает очень хорошо, но я столкнулся с оговоркой.
Когда пользователь копирует и вставляет папку или контакт в Outlook, он также копирует уникальный идентификатор (расширенное свойство)делая его не таким уж уникальным.В этом случае у меня теперь есть два элемента в почтовом ящике с тем же «уникальным» идентификатором, и теперь я имею неоднозначное соответствие для элемента.
В основном:
SyncFolderItems()
и состояние синхронизации сохранено - Элемент помечен с уникальным идентификатором, если у него нет одного
- Пользователь копирует и вставляет элемент
SyncFolderItems()
(с предыдущим состоянием синхронизации), возвращает событие Create
для скопированного пользователем элемента - Созданный элемент уже имеет уникальный идентификатор
Теперь можно утверждать, что просто перезаписать уникальныйИдентификатор элемента в событии создания.
Однако это приводит к следующей проблеме:
Когда я синхронизирую новый элемент из почтового ящика A в почтовый ящик B, ятакже создайте предмет.После того, как SyncFolderItems()
в почтовом ящике A теперь вызывается, я также извлекаю событие Create для моего собственного элемента, которому в этом случае на законных основаниях уже назначен уникальный идентификатор, который не должен быть перезаписан.:
Каким-то образом предотвратить копирование этого расширенного свойства
Запретить EWS отправку создания для элемента, который я создал сам. Я знаю, что могу игнорировать ItemIDs в вызове SyncFolderItems()
, но я не уверен, как мне следует отслеживать идентификаторы элементов в вызовах, поскольку они могут изменяться в соответствии с документацией
Кто-нибудь есть какие-либо предложения о том, как подходить к этому по-другому или реализовать любой вариант ??