#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);
}