Как установить часовой пояс для Outlook Appointment. При создании через EWS API - PullRequest
0 голосов
/ 22 апреля 2019

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

Appointment

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

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

1 Ответ

1 голос
/ 24 апреля 2019

То, на что вы смотрите, называется текстом нижнего уровня в теле сообщения. Эта проблема обычно возникает во время обновления встречи, которую вы, похоже, делаете в качестве последней строки изображения, которое вы опубликовали. Проблема заключается в том, что часовой пояс не отправляется как часть запроса на обновление, сервер установит для текста нижнего уровня значение 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);
    }
...