Веб-службы Exchange 2010 - создание события на весь день - PullRequest
3 голосов
/ 20 октября 2011

У меня возникли проблемы с созданием встречи на целый день с использованием веб-служб Exchange 2010 (EWS).

В соответствии с существующими требованиями для создания объекта встречи на весь день необходимо указать время начала и окончания(то есть 20.10.2011, 12:00:00), а также часовой пояс.

Но мое приложение, преобразованное для использования EWS вместо WebDAV, устанавливает время начала и окончания, преобразованное в время по Гринвичу (GMT), которое затем отправленона сервер Exchange.

Такая техника отлично работала с WebDAV.Но с EWS я получаю странный результат: встреча продолжается на 3 (три) дня, а встреча НЕ на весь день !!!

Часовой пояс моего почтового ящика установлен на стандартное тихоокеанское время (с использованием интерфейса OWA) и сервер ExchangeДля даты и времени также установлено тихоокеанское стандартное время.

Время начала и окончания встречи установлено на «2011-10-20T07: 00: 00.000Z» и «2011-10-21T07: 00: 00.000Z» соответственно,По местному времени это время «20.10.2011 12:00:00» и «21.10.2011 12:00:00 AM» соответственно (с учетом перехода на летнее время).

ЕслиДля свойства IsAllDayEvent объекта встречи установлено значение False - встреча создана правильно - не как Весь день, начинается в 20.10.2011 12:00 и заканчивается 21.10.2011 12:00, и занимает только один день - 20 октября 2011 г. в календаре Outlook.

Но если для свойства isAllDayEvent объекта встречи установлено значение True (все остальное остается прежним) - встреча начинается 19 октября 2011 г. 21:00, заканчивается 21 октября 2011 г. 9:00:00 вечера, и это НЕ весь день.

Возможно, я что-то не так делаю, но на основании описанного выше вопроса, поднятого для меня:

  • поддерживает ли EWS время по Гринвичудля событий на весь день?
    Если да - какие могут быть мои ошибки?

Я ценю любое предложение.С уважением Андрей

Ответы [ 4 ]

3 голосов
/ 01 января 2014

Натолкнулся на аналогичную проблему, когда мое событие на весь день создавалось с 4 вечера предыдущего дня до 16:00 указанной даты события на весь день (в настоящее время у меня тихоокеанское стандартное время -8, поэтому, похоже, ошибка UTCсторона сервера обмена).

При вызове Appointment.save используйте необязательный второй параметр SendInvitationsMode.SendToNone, например:

a.save(new FolderId(WellKnownFolderName.Calendar), 
    SendInvitationsMode.SendToNone);

Если вы предпочитаете XML, смотрите Envelope / Body / CreateItem /@SendMeetingInvitations:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
    xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
    <soap:Header>
        <t:RequestServerVersion Version="Exchange2007"></t:RequestServerVersion>
    </soap:Header>
    <soap:Body>
        <m:CreateItem SendMeetingInvitations="SendToNone">
            <m:SavedItemFolderId>
                <t:DistinguishedFolderId Id="calendar"></t:DistinguishedFolderId>
            </m:SavedItemFolderId>
            <m:Items>
                <t:CalendarItem>
                    <t:Subject>From Java EWS</t:Subject>
                    <t:Body BodyType="HTML">the body</t:Body>
                    <t:Start>2014-01-03T00:00:00Z</t:Start>
                    <t:End>2014-01-04T00:00:00Z</t:End>
                    <t:IsAllDayEvent>true</t:IsAllDayEvent>
                </t:CalendarItem>
            </m:Items>
        </m:CreateItem>
    </soap:Body>
</soap:Envelope>
0 голосов
/ 28 марта 2014

Вам необходимо указать MeetingTimeZone (для ES2007) или StartTimeZone (для ES2010 +). У меня была такая же проблема, и она мне помогла.

0 голосов
/ 14 января 2013

В дополнение к ответу Пита:Обратите внимание, что существует разница между тем, что хранится в Exchange, и тем, что говорит вам Outlook.Я записываю «чистые» вызовы SOAP XML в календарь Exchange 2010 Server и просматриваю результаты через Outlook 2003. Вызовы создания явно указывают время UTC и не имеют никакой другой информации о часовом поясе.Сервер имеет настройки UTC.Если я сейчас создаю событие на весь день, например:

  <mes:CreateItem SendMeetingInvitations="SendToNone">
  <mes:Items>
     <typ:CalendarItem>
       <typ:Subject>Alldayevent</typ:Subject>
       <typ:Start>2013-01-08T01:00:00.000Z</typ:Start>
       <typ:End>2013-01-08T02:00:00.000Z</typ:End>
       <typ:IsAllDayEvent>true</typ:IsAllDayEvent>

... Exchange правильно сохраняет это как (вывод GetItem):

<t:Start>2013-01-08T00:00:00Z</t:Start>
<t:End>2013-01-09T00:00:00Z</t:End>
<t:IsAllDayEvent>true</t:IsAllDayEvent>

Если Outlook также настроен для UTC, это показываеткак событие на весь день для 8. января (как и ожидалось).

Однако, если я установил Outlook в UTC + 1 (время Амстердама), событие будет отображаться в течение двух дней (и обратите внимание, что флажок не указан): Not exacty an all-day event

Проверка «Весь день» в , что приводит к ситуации (вывод GetItem):

 <t:Start>2013-01-07T23:00:00Z</t:Start>
 <t:End>2013-01-09T23:00:00Z</t:End>
 <t:IsAllDayEvent>true</t:IsAllDayEvent>
0 голосов
/ 05 ноября 2011

Я делаю преобразование DAV в EWS самостоятельно. Что-то, что может быть интересно, я столкнулся с Советы по использованию веб-служб Exchange для задач календаря (Ex 2007, но я полагаю, относится к Exchange 2010 и 2013)

Когда веб-службы Exchange получают запрос на создание нового CalendarItem, для которого свойства start и End идентифицируются строками без смещения UTC, сервер должен преобразовать свойства Start и End в универсальное координированное время (UTC) до того, как CalendarItem может быть сохранен. Ниже приведены правила конвертации в UTC:

Если запрос содержит явное определение часового пояса через свойство MeetingTimeZone , сервер применит правильное смещение по отношению к правилам Standard и Daylight, как определено для часового пояса.

Если явный часовой пояс не определен, будет использоваться текущий часовой пояс компьютера, на котором выполняется Exchange 2007 (в частности, сервер клиентского доступа, обрабатывающий запрос).

Примечание: В Exchange 2007 с пакетом обновления 1 (SP1) все неопределенные часовые пояса устанавливаются в формате UTC вместо часового пояса сервера клиентского доступа.

Немного поэкспериментировав, я обнаружил, что если вы не укажете часовой пояс, EWS действительно будет применять время как UTC. Если IsAllDayEvent имеет значение true, время начала и окончания игнорируются, кроме их компонента даты. Таким образом, событие в течение всего дня в моем календаре превращается в 12:00 - 12:00 UTC или в 17:00 - 5:00 вечера (у меня тоже -7 UTC). В статье Best Practices рекомендуется использовать элемент MeetingTimeZone, но я получил сообщение об ошибке, что он устарел, вместо этого используйте StartTimeZone и EndTimeZone. Действительно, добавление , похоже, работает.

Что касается вашего 3-дневного выпуска, я смог воспроизвести схожие результаты. Вот что я подозреваю происходит. Если вы скажете Exchange, что время начала - 7:00, а время окончания - 8:00, и отметите его весь день, он автоматически установит время начала и окончания yyy-mm-ddT00: 00: 00 и yyy-mm- dd + 1 T00: 00: 00. Поэтому, если я отправляю встречу на 2011-11-04T07: 00: 00 в 2011-11-05T07: 00: 00 без элемента часового пояса, он думает, что я пытаюсь охватить два дня. Время начала 2011-11-04T07: 00: 00 становится 2011-11-04T00: 00: 00 до 2011-11-05T00: 00: 00. Время окончания 2011-11-05T07: 00: 00 становится 2011-11-05T00: 00: 00 до 2011-11-06T00: 00: 00. Это отображается в календаре как UTC. При просмотре в Outlook или в веб-приложении он отображается в PST как 3 ноября 17:00 - 6 ноября 17:00 и выглядит как охватывающий 3 дня (но на самом деле только 48 часов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...