Отображение идентификаторов календаря Office365 для идентификаторов календаря EWS для календаря
Использование Exchange push notifications Я создаю службу, которая синхронизирует данные календаря с пользователями Office365. Я использовал комбинацию Office365 Calendar REST API (для получения и управления календарями) и EWS API (чтобы подписаться на изменения календаря).
Я заметил, что совсем недавно MS представила API предварительного просмотра для своих конечных точек подписки. Однако этот API все еще находится в режиме предварительного просмотра, и я бы хотел избежать его использования в настоящее время.
Как только у меня все настроено, проблема в том, что я не могу выполнить корреляцию между ресурсом событий календаря (REST) и Ресурс EWS CalendarItem, который возвращается в push-уведомлении. ItemId
для CalendarItem и Id
для события REST отличаются.
При попытке обновить события, которые я сохранил из REST API, это оказывается проблематичным, поскольку я не могу найти хороший метод связывания двух.
Любая помощь очень ценится!
Edit
После некоторого дальнейшего копания я фактически обнаружил, что календари, которые возвращаются из REST API (GET /calendars
), выглядят как Message
в иерархии EWS. Поэтому вместо этой конечной точки, возвращающей фактические идентификаторы папок, она возвращает идентификаторы элементов, которые принадлежат к некоторой папке, называемой "Common Views".
Я не уверен, почему все так устроено, но разница в кодированных идентификаторах base64 кажется очень минимальной. Я просто все еще не могу найти хороший способ связать эти два.
Ответы
Ответ 1
Итак, оказывается, что мои идентификаторы не совпадают из-за подписки на уведомления EWS с помощью версии Exchange2007
. Exchange2007_SP1
и далее имеют совместимые EwsIds друг с другом, поэтому это включает Office365.
Замена символов -
символами /
и _
с помощью +
позволяет мне правильно выполнять вызовы в API API Office365.
Наконец, при вызове получать календари API фактически возвращает типы элементов Message
, которые живут в папке Common Views
. Поэтому, пытаясь использовать эти идентификаторы для подписки, API EWS будет жаловаться на то, что я отправил его ItemID, а не идентификатор папки.
К счастью, я обнаружил, что выполнение запроса к API REST через GET /calendars/ews_folder_id
действительно работает, как только вы правильно переводите идентификатор в безопасный тип URI (см. выше преобразование).