Отображение идентификаторов календаря 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 (см. выше преобразование).