EWS SyncFolderItems — удаление встреч в клиентской базе данных

#c# #exchangewebservices

#c# #exchangewebservices

Вопрос:

Я работаю над клиентом синхронизации, который копирует назначение из и в EWS (Office 365).

В общем, я следую документации, предоставленной MS: https://msdn.microsoft.com/en-us//library/office/dn440952 (v=exchg.150).aspx

Моя проблема: эта статья https://msdn.microsoft.com/en-us//library/office/dn605828 (v= exchg.150).aspx#Arbeiten mit Bezeichnern показывает, что ItemId назначение может измениться и не является уникальным.

Итак, исследуя, я обнаружил, что люди загружаются cleanGlobalObjectId из назначения, которое уникально раз и навсегда.

 // unique id for sync that do not change like item id
var cleanGlobalObjectId = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Meeting, 0x23, MapiPropertyType.Binary);
var psPropSet = new PropertySet(BasePropertySet.FirstClassProperties) { cleanGlobalObjectId };
 

Поэтому я использую

 var appointment = Appointment.Bind(service, item, psPropSet);
object calIdVal;
appointment.TryGetProperty(cleanGlobalObjectId, out calIdVal);
var syncId = Convert.ToBase64String((byte[])calIdVal);
 

syncId до сих пор я тестировал уникальный и работает для ВСТАВКИ и ОБНОВЛЕНИЯ встреч в мою базу данных.

Когда я теперь использую SyncFolderItems из EWS, я получаю коллекцию элементов для create , update , delete .

Моя проблема:

Я не могу загружать встречи с Appointment.Bind() удаленными. Но мне нужно загрузить назначение, чтобы получить мое syncId .

SyncFolderItems Коллекция позволяет мне получить доступ ItemId.UniqueKey и ItemId.ChangeKey .

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

Итак, у кого-нибудь есть какие-то рекомендации или какие-либо другие подходы? Если я забыл добавить некоторые детали, пожалуйста, также предоставьте отзыв, чтобы я мог добавить это.

Ответ №1:

Вы должны сохранить оба, cleanGlobalObjectId, а также ItemId в вашей базе данных. Таким образом, вы можете справиться с удалением элемента, а также с событием, когда Exchange воссоздает ваше назначение (что происходит не всегда, только при определенных обстоятельствах).

Комментарии:

1. Спасибо Хеннинг, я просто собирался сохранить оба и в случае удаления использовать ItemId для удаления назначения. Каждая синхронизация также обновляет идентификатор элемента, поэтому я могу быть уверен, что мой идентификатор элемента обновлен в случае удаления.