#api #events #microsoft-graph-api #microsoft-graph-calendar
Вопрос:
Я работаю над синхронизацией календаря между моим приложением и личными календарями пользователей. Идея заключается в том, что каждый раз, когда создается или обновляется событие, это событие отправляется в личный календарь пользователей (они могут выбрать синхронизацию с календарем Google и/или календарем учетных записей Microsoft).
У меня есть этот полный поток, работающий с календарем Google, и теперь я работаю с Microsoft OAuth и API Graph, чтобы заставить его работать либо для календарей MS.
В настоящее время для MS у меня реализован и работает следующий сценарий:
- Пользователь разрешает приложению доступ к своему календарю через страницу согласия
- Сервер обменивает код авторизации на токен доступа
- Я могу вставить событие в календарь пользователя, используя его маркер доступа в качестве заголовка авторизации через API Microsoft Graph (POST https://graph.microsoft.com/v1.0/me/events)
Теперь я пытаюсь понять, как я могу управлять обновлениями событий (например, при изменении даты начала, как я буду отправлять это обновление для учетной записи MS каждого пользователя), зная следующие ограничения API событий Microsoft:
- Свойство «ICalUid» генерируется самим MS API и возвращается в ответе конечной точки вставки. Я не могу вставить событие с моим собственным идентификатором ICalUid. Это возможно с помощью календаря Google и очень полезно, потому что, если я отправляю событие с существующим идентификатором ICalUid в конечную точку импорта, Google обновляет это существующее событие с помощью отправленных данных, а если идентификатор ICalUid не существует, Google создает событие (оно выполняет действие, подобное обновлению).
- Для каждого события, вставленного в календарь разных пользователей, создается новый «ICalUid», даже если я отправляю один и тот же объект события для вставки. Поэтому я получаю много ICalUid для одного и того же события, это усложняет отслеживание этого события в календарях пользователей, отличающихся от календаря Google, как я упоминал ранее.
Так вот с какой проблемой я сталкиваюсь прямо сейчас. Есть какие-нибудь идеи о том, как я могу этого достичь?
Заранее спасибо!
Комментарии:
1. Пробовали добавлять пользовательские данные в событие с помощью пользовательских расширений? Таким образом, вы можете отслеживать событие, поскольку пользовательские данные могут быть изменены только вами. См.раздел Создание расширений о том, как это сделать.
2. @Danstan спасибо за ваше предложение! На самом деле это выглядит полезным для моего случая, я смог создать с помощью пользовательской информации. Но сейчас я пытаюсь понять, как фильтровать эти конкретные пользовательские данные. Я ищу примеры Microsoft Graph для расширений фильтрации, но некоторые из них довольно запутанны. Вы знаете, как фильтровать эти пользовательские данные?
3. @Danstan Я использую $expand для извлечения данных расширения (как в этом примере ). Но я не выясняю, как фильтровать по значению a в расширении.
4. Я рад помочь. Что касается фильтра, попробуйте
https://graph.microsoft.com/v1.0/me/events?$filter=extensions/any(f:f/id eq 'Microsoft.OutlookServices.OpenTypeExtension.Com.Something.OwnerId')
указать, гдеid
в любом операторе может быть любое поддерживаемое подполе расширения5. Если это решит ваше дело, дайте мне знать, чтобы я мог составить более четкий ответ.