Идентификатор календаря изменен случайным образом

В чем причина того, что календарь меняет свой идентификатор при использовании графика Microsoft ???

Это произошло сегодня с одним из наших клиентов, который использовал свой основной Календарь более 2 лет, и внезапно сегодня идентификатор изменился, и мы не можем добавить какое-либо событие, так как у нас есть «старый» идентификатор.

Вызываемая конечная точка:

/me/calendars/AAMkAGFmMzAxNmRkLTg4YTEtNDNhZS1iYjExLWE1OThlYThlNTRmOQBGAAAAAACxNL6zUoo_Qr9AY8vFoIfmBwBstbpyrelbSJu1keAu6bMkAAAAAAEGAABstbpyrelbSJu1keAu6bMkAAAAAFB8AAA=/events

Возвращена ошибка:

{
  "error": {
    "code": "ErrorItemNotFound",
    "message": "The specified object was not found in the store."
  }
}

Заголовки:

{
  "Cache-Control": [
    "private"
  ],
  "Content-Type": [
    "application/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8"
  ],
  "request-id": [
    "63353567-4ebd-4b25-903b-d66717797882"
  ],
  "client-request-id": [
    "63353567-4ebd-4b25-903b-d66717797882"
  ],
  "x-ms-ags-diagnostic": [
    "{\"ServerInfo\":{\"DataCenter\":\"North Europe\",\"Slice\":\"SliceC\",\"Ring\":\"4\",\"ScaleUnit\":\"001\",\"RoleInstance\":\"AGSFE_IN_6\"}}"
  ],
  "Strict-Transport-Security": [
    "max-age=31536000"
  ],
  "Date": [
    "Thu, 04 Feb 2021 10:40:39 GMT"
  ],
  "Content-Length": [
    "99"
  ]
}

Новый идентификатор календаря: AAMkAGFmMzAxNmRkLTg4YTEtNDNhZS1iYjExLWE1OThlYThlNTRmOQBGAAAAAACxNL6zUoo_Qr9AY8vFoIfmBwBstbpyrelbSJu1keAu6bMkAAAAAAEGAABstbpyrelbSJu1keAu6bMkAAF8qLRIAAA=

Изменить: (Произошло для другого клиента) Это случилось сегодня снова с другим клиентом (другой идентификатор клиента), вот подробности:

Идентификатор старого календаря:

AAMkAGI2Y2NkYzVmLTc3ZjUtNDQyNi1iNjIzLTljNjkyMDk5YjEyYwBGAAAAAADQqVqZh-ZpQJl-EcoJBivzBwCE3CCn1SYkSLnEBiNMaH3ZAAAAAAEGAACE3CCn1SYkSLnEBiNMaH3ZAAAAAB08AAA=
{
   "Cache-Control":[
      "private"
   ],
   "Content-Type":[
      "application\/json; odata.metadata=minimal; odata.streaming=true; IEEE754Compatible=false; charset=utf-8"
   ],
   "request-id":[
      "2f9ddb93-3594-4d86-97f9-d7dbe960a2bb"
   ],
   "client-request-id":[
      "2f9ddb93-3594-4d86-97f9-d7dbe960a2bb"
   ],
   "x-ms-ags-diagnostic":[
      "{\"ServerInfo\":{\"DataCenter\":\"North Europe\",\"Slice\":\"SliceC\",\"Ring\":\"4\",\"ScaleUnit\":\"001\",\"RoleInstance\":\"AGSFE_IN_71\"}}"
   ],
   "Strict-Transport-Security":[
      "max-age=31536000"
   ],
   "Date":[
      "Mon, 08 Feb 2021 11:08:53 GMT"
   ],
   "Content-Length":[
      "99"
   ]
}

Новый идентификатор календаря:

AAMkAGI2Y2NkYzVmLTc3ZjUtNDQyNi1iNjIzLTljNjkyMDk5YjEyYwBGAAAAAADQqVqZh-ZpQJl-EcoJBivzBwCE3CCn1SYkSLnEBiNMaH3ZAAAAAAEGAACE3CCn1SYkSLnEBiNMaH3ZAAGPkTa6AAA=

person Herz3h    schedule 04.02.2021    source источник
comment
stackoverflow.com/a/58399493/2250152   -  person user2250152    schedule 04.02.2021
comment
Интересная ветка / информация ... вы можете обратиться в службу поддержки Microsoft и узнать, что они думают по этому поводу.   -  person Dev    schedule 04.02.2021
comment
Не знаю, почему это происходит, но в качестве альтернативы вы можете использовать конечную точку /me/calendars и получить необходимый идентификатор календаря, а затем попытаться создать события с помощью /me/calendars/claendarid/events.   -  person Shiva Keshav Varma    schedule 05.02.2021
comment
@ShivaKeshavVarma К сожалению, использование нового идентификатора календаря - не лучшее решение. Поскольку мы теряем информацию о каждом приложении, которую мы храним (скажем, событие, хранящееся в нашем приложении, связано с другими таблицами. Если я просто добавлю новый календарь, я думаю, что iCalUID для каждого события также будет другим, и поэтому мы теряем все отношения, которые это событие имеет в нашем приложении, мы получаем простые события, как в Outlook)   -  person Herz3h    schedule 05.02.2021
comment
@Dev они советуют размещать в stackoverflow для поддержки: /   -  person Herz3h    schedule 05.02.2021
comment
Ааа ладно. В таком сценарии я предлагаю решение, чтобы попробовать: когда вы создаете новые события, создаете свое настраиваемое свойство MAPI, отметьте его в этих элементах, оно будет существовать, и вы можете использовать их независимо от других способов. Или вы можете использовать комбинацию из нескольких существующих стандартных свойств MAPI.   -  person Dev    schedule 05.02.2021
comment
@Dev Я ценю предложение помочь, к сожалению, моя проблема связана с событиями, которые существовали в старом идентификаторе календаря. Эти события потеряют всю информацию о приложении в нашем приложении, поскольку этот календарь больше не существует. Я просто надеюсь на исправление ошибки от Microsoft, чтобы вернуть сюда идентификатор календаря.   -  person Herz3h    schedule 05.02.2021
comment
Интересно .. Просто добавляю сюда свои взгляды. Насколько я понимаю, если почтовый ящик не воссоздан, идентификаторы не изменятся. Я вижу то же самое, что Дэвид Стерлинг повторяет в вышеупомянутой теме; Я думаю, что Джереми повторяет то же самое. Есть ли у вас какая-либо известная история для данного почтового ящика? или переместить элементы из одного почтового ящика в другой?   -  person Dev    schedule 05.02.2021
comment
@Dev У меня нет истории для данного почтового ящика, эта ошибка произошла для другого клиента (см. Мой другой ответ). Я закончил тем, что импортировал новый календарь в приложение, к счастью, события из предыдущего календаря имеют тот же IcalUId, что и новый календарь. На данный момент этого хватит, надеюсь, придет инженер Microsoft и передаст детали ответственной команде.   -  person Herz3h    schedule 09.02.2021
comment
Не зная историю данного почтового ящика, сложно комментировать - проблема может возникнуть из-за истории почтового ящика / миграций / индексации или воссоздания почтового ящика и т. Д. Здесь Graph API - это просто мессенджеры, которые возвращают вам обратно. Если в источнике есть проблема, он поделится только данными. Поскольку я обновлял ранее, вы можете попробовать этот подход или использовать iCalUID, чтобы увидеть, подходит ли он вашему сценарию. Но да, это может относиться только к новым предметам, для старых предметов вам может потребоваться проштамповать их и использовать их тоже.   -  person Dev    schedule 11.02.2021


Ответы (2)


Вот кусочек головоломки ... Они выглядят в кодировке Base64. Если вы декодируете в Base 64 старый и новый идентификаторы, вы обнаружите, что в него встроены одни и те же идентификаторы GUID.

(Используйте https://www.base64decode.org/)

Old decoded: $af3016dd-88a1-43ae-bb11-a598ea8e54f9F4R?B@cŠlr[H.$lr[H.$P|
New decoded: $af3016dd-88a1-43ae-bb11-a598ea8e54f9F4R?B@cŠlr[H.$lr[H.$|H
(guid: af3016dd-88a1-43ae-bb11-a598ea8e54f9)
- 
2nd example provided 
Old decoded: $b6ccdc5f-77f5-4426-b623-9c692099b12cFЩZi@~    + &$H#Lh} &$H#Lh}<
New decoded: $b6ccdc5f-77f5-4426-b623-9c692099b12cFЩZi@~    + &$H#Lh} &$H#Lh}6
(guid: b6ccdc5f-77f5-4426-b623-9c692099b12c)

Если невозможно использовать встроенный GUID с помощью запроса в запросе графа, то, возможно, вызвать https://graph.microsoft.com/v1.0/me/calendars, декодировать все календари, найти идентификатор с соответствующим встроенным GUID и использовать его? Это добавило бы дополнительный вызов, но вы могли бы сделать это при обработке исключений, поскольку состояние не требуется. Это может помочь с вашим существующим приложением.

Я не могу гарантировать, что это сработает, так как у меня нет данных, с помощью которых можно было бы проверить эту теорию ... но у вас есть :)

Чтобы избежать этой проблемы с изменениями идентификаторов в будущем, постарайтесь сохранить неизменяемые идентификаторы везде, где возможно. Вы не можете хранить их для контейнеров (календарей, почтовых ящиков и т. Д.), Но, возможно, продвигаясь вперед, вы можете сохранить их для событий, которые создает ваше приложение, так что вы можете работать в обратном направлении оттуда.

Типы контейнеров (mailFolder, calendar и т. Д.) Не поддерживают неизменяемый идентификатор, но их обычные идентификаторы уже были постоянными.

Эта строка из их документации примечательна, так как ваш опыт не соответствует тому, что говорится в их документации. Это дает вам возможность жаловаться в MS или обращаться в IBM со своими клиентами (IBM: я виню Microsoft).

Кроме того, я бы спросил ИТ в обеих организациях, изменили ли они что-нибудь, связанное с AAD Sync или Exchange? У меня есть дикая теория, связанная с этим. Недавно было разослано электронное письмо с просьбой обновить синхронизацию AAD, и этот шаблон кажется знакомым для какой-то смены поставщика аутентификации.

person alirobe    schedule 15.02.2021
comment
Не знал, что идентификатор календаря содержит GUID в кодировке Based64. Означает ли это также, что идентификаторы календаря уникальны для всего клиента Microsoft, а не только для конкретного пользователя / почтового ящика? Я сталкиваюсь с аналогичным требованием, когда мне действительно нужно идентифицировать уникальные календари Microsoft в моем многопользовательском, мультитенантном приложении. Я не уверен, достаточно ли использования идентификатора. - person thankyoussd; 15.02.2021
comment
Ну, я не знаю. Microsoft делает чертовски странные вещи с GUID. Обязательно попробуйте найти в документации основу для того, что вы делаете. - person alirobe; 15.02.2021

Проблема не в том, что изменился идентификатор календаря. Похоже, вам просто нужно с этим разобраться, и у вас есть хороший способ найти новый идентификатор, как указано в приведенном выше комментарии.

Проблема в том, что вы используете в своем приложении идентификатор, созданный Microsoft, и теперь они не совпадают. Вполне возможно добавить дополнительные данные к событию (или пользователю / группе). Дополнительную информацию см. На этой странице. Таким образом, вы можете просто добавить свой внешний идентификатор к событию во время создания, и тогда вы всегда сможете найти событие.

person Stephan    schedule 10.02.2021
comment
Ну да, это всегда можно сделать в большинстве существующих API, но дело в том, что публичный идентификатор календаря должен выполнять эту роль уникальности и неизменности. Конечно, всегда есть обходные пути, но это требует дополнительной работы над тем, чего вообще не должно было случиться. Я имею в виду, почему API возвращают идентификаторы, если они меняются случайным образом ... - person Herz3h; 11.02.2021
comment
Если они оставались неизменными в течение нескольких лет, мне они казались довольно статичными. Если у вас есть веб-приложение, которое использует int в качестве ключа для элементов. И тогда вы решаете, что это должен быть гид. Для миграции вам нужно изменить все существующие идентификаторы, но вы все равно можете назвать идентификатор уникальным и неизменным. - person Stephan; 11.02.2021