#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 для удаления назначения. Каждая синхронизация также обновляет идентификатор элемента, поэтому я могу быть уверен, что мой идентификатор элемента обновлен в случае удаления.