Синхронизация новых событий календаря всегда имеет поле @removed

Я синхронизирую события календаря, используя @microsoft/microsoft-graph-client пакет npm с базовым URL /me/calendarview/delta, Это работало хорошо, пока несколько дней назад. По какой-то причине, когда я создаю новое событие календаря в outlook.office.com и мое приложение синхронизируется, вновь созданное событие календаря имеет @removed: {reason: "deleted"} набор полей.

Однако, когда я смотрю то же самое событие календаря с помощью Microsoft Graph Explorer, это же событие НЕ имеет @removed набор полей. Есть ли какая-то причина, по которой вновь созданное событие календаря будет выглядеть так, как будто оно удаляется во время синхронизации? Я использую @ microsoft / microsoft-graph-client v1.3.0

Шаги для воссоздания:

  1. Создайте событие, используя клиент графа узлов, отправив сообщение в /me/calendar/events
  2. Захватите дельту календарных событий, используя /me/calendarview/delta с соответствующим deltaLink и токеном доступа.
  3. Я получаю 1 календарное событие, которое имеет 3 поля, @odata.type, id а также @removed, Поле id соответствует идентификатору созданного события на шаге 1.

Если вам нужна дополнительная информация, дайте мне знать. Это влияет на некоторых наших пользователей.

Обновление: я попытался обойти эту проблему, позвонив /me/events/<id> для каждого @removed запись календаря, которую я получаю при дельта-синхронизации, чтобы проверить, действительно ли событие было удалено. Однако, когда я вызываю этот API через microsoft-graph-client, он возвращает null. Если я сделаю тот же самый вызов GET через MSFT Graph Explorer, событие вернется.

1 ответ

Я оставил ответ на другой вопрос здесь: https://stackoverflow.com/a/65348721/6806302

Короче говоря, вчера я ушел из-за догадки, вдохновленной комментарием @mattlaabs к вопросу выше , что виноват диапазон startDateTime..endDateTime дельты событий.

А на практике проблема именно в этом. Ответ состоит из двух частей:

  1. Изменения событий вне окна всегда отображаются в дельта-потоке как @removed.
  2. Дельта-параметры событий фиксируются в «замыкании», что означает, что последующие запросы (с ) игнорируют параметр запроса.

Понимая оба вышеизложенных, кажется, что ответ таков:

  1. Создайте достаточно широкий начальный startDateTime..endDateTimeокна в соответствии с потребностями вашего приложения
  2. Запускать новые дельта-потоки событий (не предоставляя $deltatoken) с определенным интервалом вместо повторного использования одного и того же бесконечно
Другие вопросы по тегам