Обновление даты окончания рекурсивного собрания через Graph API не работает - PullRequest
0 голосов
/ 22 января 2019

В настоящее время я использую Office Graph API для обработки собраний пользователей Calenders.Я подписался на получение уведомлений, если событие создается, обновляется и удаляется с помощью запроса "/ subscription"!Мои пользователи используют часовой пояс Лиссабона (летом = UTC + 1, зимой = UTC)

Когда пользователь создает приложение Office 365 на стороне моего приложения, если событиеРекурсивное собрание без конечной даты. Я обновляю (через Graph API) собрание, чтобы оно имело конечную дату.[Примечание. Одно из правил моего приложения заключается в том, что ни одно собрание не может длиться более 365 дней.]

Проблема: серия сокращается до даты окончания, которую я обновил через API, но время осталось неправильнымчасовой пояс.Я уже пытался запросить API без часового пояса, и я уже запросил обновление с часовым поясом UTC и часовым поясом UTC +1, и у меня всегда одна и та же проблема.Что касается офиса, то после моего обновления время встречи на один час меньше.

Следующее изображение является примером серии, которая не имеет конечного диапазона:

enter image description here

Я получаю некоторые дочерние встречи перед обновлением, и это правильно.В Португалии день смены времени - 2019-03-30, поэтому день 30 начинается в 10:00 UTC, а день 31 09:00 UTC:

enter image description here

ЗдесьЯ отправляю запрос в офис 365, чтобы обновить окончание повторения (дату окончания):

enter image description here

После отправки запроса на обновление я получаю тех же детей и2019-03-30 и день 2019-03-31 начинаются с 10:00.После этого обновления в клиентском календаре собрания имеют неправильный начальный и конечный часы:

enter image description here

Я уже пытался ввести поле Graph API recurrenctTImeZone: UTCПо Гринвичу стандартное время и просто ничего не ставят и у меня всегда одинаковый возврат.Я не могу решить эту проблему.

У вас есть идеи, что может быть не так?

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Я не воспроизводлю это поведение с пользователем в часовом поясе стандартного Тихоокеанского региона ИЛИ часовом поясе стандартного времени GMT.Для ясности, я делаю все тесты с Почтальоном, и я не использовал заголовок Prefer: outlook.timezone, на который указал Джереми.

Я создал ежедневную встречу без конца для пользователя в 2PM Pacific, которая22:00 UTCТакже обратите внимание, что летнее время начинается в этом часовом поясе 10 марта. Как вы можете видеть ниже, время на экземплярах как до, так и после обновления правильное.

Я также повторил ту же последовательность событий для пользователяв стандартном часовом поясе GMT ​​(настроен так же в Outlook в Интернете):

OOW config

Я получил точно такие же результаты для этого пользователя.

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

Получить событие после создания в Outlook в Интернете

GET /me/events/{id}&$select=originalStartTimeZone,originalEndTimeZone,start,end,recurrence
{
  "id": "AAMkAGE1NWM...",
  "originalStartTimeZone": "Pacific Standard Time",
  "originalEndTimeZone": "Pacific Standard Time",
  "start": {
    "dateTime": "2019-01-24T22:00:00.0000000",
    "timeZone": "UTC"
  },
  "end": {
    "dateTime": "2019-01-24T22:30:00.0000000",
    "timeZone": "UTC"
  },
  "recurrence": {
    "pattern": {
      "type": "daily",
      "interval": 1,
      "month": 0,
      "dayOfMonth": 0,
      "firstDayOfWeek": "sunday",
      "index": "first"
    },
    "range": {
      "type": "noEnd",
      "startDate": "2019-01-24",
      "endDate": "0001-01-01",
      "recurrenceTimeZone": "Pacific Standard Time",
      "numberOfOccurrences": 0
    }
  }
}

Получить экземпляры перед изменением

Обратите внимание на изменение времени начала / окончания.

GET /me/events/{id}/instances?startDateTime=2019-03-09T00:00:00&endDateTime=2019-03-11T00:00:00&
$select=originalStartTimeZone,originalEndTimeZone,start,end
{
  "value": [
    {
      "id": "AAMkAGE1NWM...",
      "originalStartTimeZone": "Pacific Standard Time",
      "originalEndTimeZone": "Pacific Standard Time",
      "start": {
        "dateTime": "2019-03-09T22:00:00.0000000",
        "timeZone": "UTC"
      },
      "end": {
        "dateTime": "2019-03-09T22:30:00.0000000",
        "timeZone": "UTC"
      }
    },
    {
      "@odata.etag": "W/\"bReRxUIs3kGIyXXcVJg69AAANf7nZQ==\"",
      "id": "AAMkAGE1NWM...",
      "originalStartTimeZone": "Pacific Standard Time",
      "originalEndTimeZone": "Pacific Standard Time",
      "start": {
        "dateTime": "2019-03-10T21:00:00.0000000",
        "timeZone": "UTC"
      },
      "end": {
        "dateTime": "2019-03-10T21:30:00.0000000",
        "timeZone": "UTC"
      }
    }
  ]
}

Обновление повторения события для добавления даты окончания

Обратите внимание, что я оставил recurrenceTimeZone в качестве того же значения, что и оригинал.

PATCH /me/events/{id}

{
  "recurrence": {
    "pattern": {
      "type": "daily",
      "interval": 1,
      "month": 0,
      "dayOfMonth": 0,
      "firstDayOfWeek": "sunday",
      "index": "first"
    },
    "range": {
      "type": "endDate",
      "startDate": "2019-01-24",
      "endDate": "2020-01-23",
      "recurrenceTimeZone": "Pacific Standard Time",
      "numberOfOccurrences": 0
    }
  }
}

Получение экземпляров после модификации

Обратите внимание, что время начала / окончаниявсе еще смещены правильно.

GET /me/events/{id}/instances?startDateTime=2019-03-09T00:00:00&endDateTime=2019-03-11T00:00:00&
$select=originalStartTimeZone,originalEndTimeZone,start,end
{
  "value": [
    {
      "id": "AAMkAGE1NWM...",
      "originalStartTimeZone": "Pacific Standard Time",
      "originalEndTimeZone": "Pacific Standard Time",
      "start": {
        "dateTime": "2019-03-09T22:00:00.0000000",
        "timeZone": "UTC"
      },
      "end": {
        "dateTime": "2019-03-09T22:30:00.0000000",
        "timeZone": "UTC"
      }
    },
    {
      "@odata.etag": "W/\"bReRxUIs3kGIyXXcVJg69AAANf7nZQ==\"",
      "id": "AAMkAGE1NWM...",
      "originalStartTimeZone": "Pacific Standard Time",
      "originalEndTimeZone": "Pacific Standard Time",
      "start": {
        "dateTime": "2019-03-10T21:00:00.0000000",
        "timeZone": "UTC"
      },
      "end": {
        "dateTime": "2019-03-10T21:30:00.0000000",
        "timeZone": "UTC"
      }
    }
  ]
}
0 голосов
/ 05 февраля 2019

После нескольких попыток разрешения я смог поговорить с командой разработчиков Office 365 и был удивлен отрицательной обратной связью.

Они указали, что в данной конкретной ситуации в Microsoft API Graph существует неизвестная ошибка, и что они не гарантируют ее устранение!

Их предложение заключается в том, что мы используем API календаря Outlook Rest API только для этой ситуации. В заключение, из-за этой неизвестной ошибки, уже допущенной Microsoft, мне нужно будет реализовать 2 разных API на моей платформе: Microsoft Graph API, который в настоящее время рекомендован Microsoft, и Outlook Calendar Rest API из-за этой ошибки.

Outlook Calendar API Остальное решение:

  1. Создать повторное событие без конечной даты

enter image description here

  1. Получить представление календаря

enter image description here

  1. Получить повторение события

enter image description here

  1. Обновление события

enter image description here

  1. Получить представление календаря после обновления

enter image description here

0 голосов
/ 23 января 2019

Вы можете фактически использовать это в заголовке запросов

Prefer: outlook.timezone="Central Standard Time"

Таким образом, он знает, в каком часовом поясе вы хотите работать со своими вычислениями.Дополнительная документация по этому вопросу доступна здесь https://docs.microsoft.com/en-us/graph/api/user-list-events?view=graph-rest-1.0#support-various-time-zones

...