#microsoft-graph-api #outlook-calendar
#microsoft-graph-api #outlook-календарь
Вопрос:
Когда я делаю СООБЩЕНИЕ me/calendars/[calendar-id]/events
со следующей полезной нагрузкой. Он успешно создает событие, и я получаю идентификатор нового события:
{
"start": {
"timeZone": "America/Chicago",
"dateTime": "2022-12-23T15:00:00"
},
"end": {
"timeZone": "America/Chicago",
"dateTime": "2022-12-23T18:00:00"
},
"subject": "Please don't delete me!",
"body": {
"contentType": "text",
"content": "I'm just an event in the future, I wonder if I'll send a '@removed' notice?"
}
"isCancelled": false,
"type": "singleInstance"
}
Но вскоре после этого мой webhook получает эту информацию для этого события, указывая, что оно было только что удалено:
{
"@odata.type": "#microsoft.graph.event"
"id": [that-event-id]
"@removed": {
"reason": "deleted"
}
}
Когда я захожу и просматриваю свой календарь Outlook, событие все еще присутствует, и если я его получаю, оно isCancelled
равно false.
Это происходит только для событий, созданных более года назад или два года в будущем.
Комментарии:
1. Просто посмотрите, включена ли (1) для этих элементов какая-либо политика хранения? (2) Существует ли у вас какое-либо решение для резервного копирования / архивирования?
2. Как вы говорите, это происходит только с событиями, созданными более года назад или два года назад… дайте мне знать, что вы найдете.
3. @Dev Я не знаю ни о какой политике хранения: каков наилучший способ выяснить это? И я не уверен, что задает ваш второй вопрос. У нас все еще есть данные о наших событиях на нашей стороне, но они записаны как архивированные, потому что нам дают
@removed
уведомление.4. возможно, вам потребуется проконсультироваться с администратором exchange / office 365, чтобы узнать, применяли ли они какие-либо политики хранения.
5. Кроме того, вам нужно помнить следующее: (1) В общем случае удаленные экземпляры представлены их идентификатором и объектом @removed . (2) В вашем сценарии вы замечаете «Удалено», это указывает на то, что элемент удален и не может быть восстановлен. Вот почему я спросил, включена ли какая-либо политика хранения или существует решение для резервного копирования / архивирования (3) Также обратите внимание, что удаленный объект может быть возвращен в исходном ответе на дельта-запрос и в отслеживаемых ответах (deltaLink). Клиенты, использующие запросы дельта-запросов, должны быть спроектированы так, чтобы обрабатывать эти объекты в ответах.
Ответ №1:
Я думаю, что вчера я наконец смог отследить эту проблему, поскольку мы сами страдали от этой же проблемы около месяца.
Мы используем events delta API вместо webhook API, но, по-видимому, одна и та же ошибка затрагивает оба… Кому-то в Microsoft действительно нужно это исправить, это безумие.
Ответ
Изменения событий за пределами startDateTime..endDateTime
окна, изначально заданного в запросе дельты событий, всегда отображаются как @removed
дельта.
Подробнее
API-интерфейс events delta захватывает начальное startDateTime..endDateTime
окно, которое затем используется для всех последующих вызовов с помощью a $deltatoken
. Это также неожиданно ударит вас, если ваш дельта-запрос использует $select
etc. поскольку изменения в нем не будут применяться, пока вы не создадите новую дельту (не передавая начальную $deltatoken
)
Именно эта деталь привела нас к созданию бомбы замедленного действия для самих себя. У нас было начальное окно, которое было несколько широким, но внезапно начали поступать распространенные сообщения об отмененных событиях, которые определенно не были удалены из календарей.
Это ошибка
Пожалуйста, кто-нибудь из Microsoft признает, что это реальная проблема. Изменения, внесенные за пределами дискретно указанного временного окна, не должны влиять на него, это затрудняет создание интеграций, которым мы доверяем.
Комментарии:
1. К сожалению, они, похоже, не совсем признают это в этом обсуждении. github.com/microsoftgraph/microsoft-graph-docs/issues/6599
Ответ №2:
Это происходит только с событиями, созданными более года назад или два года в будущем.
Я предполагаю, что это связано с политиками хранения, определенными вашей организацией.
https://docs.microsoft.com/en-us/microsoft-365/compliance/create-retention-policies
С помощью политик хранения вы можете определить, как долго должны храниться определенные элементы перед их автоматическим удалением.
Ответ №3:
Это также может произойти, если вы в конечном итоге используете неправильный $deltatoken .