Синхронизация новых событий календаря всегда имеет поле @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
Шаги для воссоздания:
- Создайте событие, используя клиент графа узлов, отправив сообщение в
/me/calendar/events
- Захватите дельту календарных событий, используя
/me/calendarview/delta
с соответствующим deltaLink и токеном доступа. - Я получаю 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 дельты событий.
А на практике проблема именно в этом. Ответ состоит из двух частей:
- Изменения событий вне окна всегда отображаются в дельта-потоке как @removed.
- Дельта-параметры событий фиксируются в «замыкании», что означает, что последующие запросы (с ) игнорируют параметр запроса.
Понимая оба вышеизложенных, кажется, что ответ таков:
- Создайте достаточно широкий начальный
startDateTime..endDateTime
окна в соответствии с потребностями вашего приложения - Запускать новые дельта-потоки событий (не предоставляя
$deltatoken
) с определенным интервалом вместо повторного использования одного и того же бесконечно