Как установить часовой пояс для встречи в Outlook.Когда, если создано с помощью EWS API

#c# #outlook #calendar #exchangewebservices

#c# #outlook #Календарь #exchangewebservices

Вопрос:

Мы используем API веб-служб Exchange для создания Назначения. Во время создания мы устанавливаем часовой пояс на местный часовой пояс. Когда получатели просматривают приглашение, это подходящее время в его местном часовом поясе, единственное, что Exchange добавляет «Когда» и «Где» в начале текста назначения, вот так:

Назначение

Часовой пояс для When всегда находится в часовом поясе UTC, независимо от того, какой часовой пояс у конечного пользователя. Это вызывает некоторую путаницу у конечных пользователей наших клиентов. Из документа EWS API для назначения.При свойстве существует только метод Get, а не метод Set. В одном тесте мы попытались установить предпочтительный язык на de-de culture, поскольку документ предлагается, и «Когда» по-прежнему отображается во времени UTC. Настройка Предпочтительной культуры

Почему-то я не смог найти никакой соответствующей информации по этому поводу в Интернете. Может ли кто-нибудь пролить свет на то, как сделать так, чтобы «Когда» отображалось в определенном часовом поясе?

Ответ №1:

То, на что вы смотрите, называется текстом нижнего уровня в теле сообщения, проблема обычно возникает во время обновления назначения, которое вы, похоже, выполняете в качестве последней строки опубликованного вами изображения. Проблема в том, что часовой пояс не отправляется как часть запроса на обновление, сервер установит текст нижнего уровня в utc. Одним из способов решения этой проблемы является то, что вы можете добавить заголовок TimeZoneContext вручную, используя

Событие OnSerializeCustomSoapHeaders, например

         service.OnSerializeCustomSoapHeaders  = service_OnSerializeCustomSoapHeaders;
        appointment.Update(ConflictResolutionMode.AlwaysOverwrite, SendInvitationsOrCancellationsMode.SendToAllAndSaveCopy);
        service.OnSerializeCustomSoapHeaders -= service_OnSerializeCustomSoapHeaders;

    static void service_OnSerializeCustomSoapHeaders(XmlWriter writer)
    {
        writer.WriteRaw(Environment.NewLine   "    <t:TimeZoneContext><t:TimeZoneDefinition Id=""   TimeZone.CurrentTimeZone.StandardName   ""/></t:TimeZoneContext>"   Environment.NewLine);
    }