Веб-службы Exchange, создание приложения на весь день в другом часовом поясе - PullRequest
0 голосов
/ 28 октября 2011

Обмен и часовые пояса будут моей смертью.

Мой сервер Exchange расположен в EST (UTC-5).Версия Exchange 2007 SP1.Пользователь находится в Париже, Франция (UTC + 2).Если я попытаюсь назначить встречу как мероприятие на весь день, оно всегда будет длиться 2 дня.Вот запрос:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <ns2:MailboxCulture xmlns:ns2="http://schemas.microsoft.com/exchange/services/2006/types"
            xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
            >en-US</ns2:MailboxCulture>
        <ns2:RequestServerVersion
            xmlns:ns2="http://schemas.microsoft.com/exchange/services/2006/types"
            xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
            Version="Exchange2007_SP1"/>
        <ns2:TimeZoneContext xmlns:ns2="http://schemas.microsoft.com/exchange/services/2006/types"
            xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
            <ns2:TimeZoneDefinition Id="Romance Standard Time"/>
        </ns2:TimeZoneContext>
    </soap:Header>
    <soap:Body>
        <CreateItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
            xmlns:ns2="http://schemas.microsoft.com/exchange/services/2006/types"
            SendMeetingInvitations="SendToAllAndSaveCopy">
            <SavedItemFolderId>
                <ns2:DistinguishedFolderId Id="calendar"/>
            </SavedItemFolderId>
            <Items>
                <ns2:CalendarItem>
                    <ns2:Subject>Test TZ</ns2:Subject>
                    <ns2:Body BodyType="Text"/>
                    <ns2:Start>2011-10-28T09:00:00Z</ns2:Start>
                    <ns2:End>2011-10-28T17:00:00Z</ns2:End>
                    <ns2:IsAllDayEvent>true</ns2:IsAllDayEvent>
                    <ns2:Location>Somewhere</ns2:Location>
                </ns2:CalendarItem>
            </Items>
        </CreateItem>
    </soap:Body>
</soap:Envelope>

ПРИМЕЧАНИЕ. У меня на компьютере установлен часовой пояс "(UTC + 01: 00) Брюссель, Копенгаген, Мадрид, Париж", хотя компьютер физически расположен вEST.

Это то, что Outlook отображает в течение 2 дней.What Outlook displays

Если я получаю вновь созданный элемент календаря из Exchange, он показывает следующую дату и время начала и окончания:

<t:Start>2011-10-28T00:00:00Z</t:Start>
<t:End>2011-10-29T00:00:00Z</t:End>
<t:IsAllDayEvent>true</t:IsAllDayEvent>

( Здесь можно найти полный ответ)

Я пробовал различные комбинации дат начала и окончания, но независимо от того, что я делаю, я всегда получаю это на протяжении 2 дней.Если я выполню ту же самую вещь (без заголовка контекста tz) в EST, она будет занимать только один день.

1 Ответ

2 голосов
/ 28 октября 2011

Хорошо, отвечаю на мой вопрос здесь. Похоже, ключом является установка часового пояса для встречи.

<ns2:MeetingTimeZone>
    <ns2:BaseOffset>-P0Y0M0DT2H0M0S</ns2:BaseOffset>
</ns2:MeetingTimeZone>

Так как это было UTC +2, а значения длительности должны быть положительными, поставьте «-» на «P». Так как TZ равен «UTC + 2», вы вычитаете 2, чтобы получить UTC (следовательно, затем отрицательное значение в смещении). Если это EST (UTC-5), то BaseOffset будет P0Y0M0DT5H0M0S.

Надеюсь, это кому-нибудь поможет.

Полный запрос выглядит так:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <ns2:MailboxCulture xmlns:ns2="http://schemas.microsoft.com/exchange/services/2006/types"
            xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
            >en-US</ns2:MailboxCulture>
        <ns2:RequestServerVersion
            xmlns:ns2="http://schemas.microsoft.com/exchange/services/2006/types"
            xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
            Version="Exchange2007_SP1"/>
        <ns2:TimeZoneContext xmlns:ns2="http://schemas.microsoft.com/exchange/services/2006/types"
            xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
            <ns2:TimeZoneDefinition Id="Romance Standard Time"/>
        </ns2:TimeZoneContext>
    </soap:Header>
    <soap:Body>
        <CreateItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
            xmlns:ns2="http://schemas.microsoft.com/exchange/services/2006/types"
            SendMeetingInvitations="SendToAllAndSaveCopy">
            <SavedItemFolderId>
                <ns2:DistinguishedFolderId Id="calendar"/>
            </SavedItemFolderId>
            <Items>
                <ns2:CalendarItem>
                    <ns2:Subject>Test TZ</ns2:Subject>
                    <ns2:Body BodyType="Text"/>
                    <ns2:Start>2011-10-27T22:00:00Z</ns2:Start>
                    <ns2:End>2011-10-28T22:00:00Z</ns2:End>
                    <ns2:IsAllDayEvent>true</ns2:IsAllDayEvent>
                    <ns2:Location>Somewhere</ns2:Location>
                    <ns2:MeetingTimeZone>
                        <ns2:BaseOffset>-P0Y0M0DT2H0M0S</ns2:BaseOffset>
                    </ns2:MeetingTimeZone>
                </ns2:CalendarItem>
            </Items>
        </CreateItem>
    </soap:Body>
</soap:Envelope>
...