2011-10-19 13 views
3

Exchange 2010 Webサービス(EWS)を使用した終日イベントの予定の作成に問題が発生しました。終日の予定オブジェクトを作成するために、既存の要件によるとExchange 2010 Webサービス - 終日予定の作成

は、指定した開始時刻と終了時刻(すなわち、2011年10月20日午前12:00:00)、また、タイムゾーンを持っている必要があります。

しかし、私のアプリケーションは、WebDAVセットの開始とするのではなく、EWSを使用するように変換し、Exchangeサーバーに送信されたGMT(グリニッジ)時間に変換終了時刻は。

このような手法はWebDAVで完全に機能しました。 しかし、EWSでは私は奇妙な結果を得ました:3(3)日に及ぶ予定であり、すべての日のイベントの任命ではありません!!!

私のメールボックスのタイムゾーンが太平洋標準時(OWAインターフェイスを使用)に設定し、Exchangeサーバーの日付と時刻も太平洋標準時間に設定してください。

予定開始時刻と終了時刻をするように設定されている「2011-10-20T07:00:00.000Z」それぞれと「00.000Z 2011-10-21T07:00」。 現地時間では、これらの時間はそれぞれ(夏時間を考慮して)「10/20/2011 12:00:00 AM」と「10/21/2011 12:00:00 AM」です。

予定オブジェクトのIsAllDayEventプロパティがFalseに設定されている場合 - 予定が正しく作成されていない - すべての日ではなく、10/20/2011 12AMで終了し、10/21/2011 12AMで終了し、1日のみを占める - 10月/ 20/Outlookカレンダーの2011

アポイントメントオブジェクトのisAllDayEventプロパティがTrueに設定されている場合(残りはすべて同じです) - アポイントメントは2011年10月19日午後9時00分に開始され、2011年10月21日午後9時00分に終了し、終日ではありません。

それは私が何か間違ったことをやっているということかもしれませんが、私のために提起以下、上記の質問に基づく:

  • EWSは、終日イベントのグリニッジ時間をサポートしていますか?
    はいの場合 - 私の間違いは何ですか?

私はどんな提案を感謝しています。 よろしくお願いいたします。 アンドリュー

答えて

0

私はDAVからEWSへの変換を自分で行っています。 Exchange Webサービスは、開始と終了の特性のための新しいCalendarItemを作成するための要求を受信した場合、私は(例2007年、私は、Exchange 2010および2013に適用されると仮定)Best Practices for Using Exchange Web Services for Calendaring Tasksの向かいに走った

関心があるかもしれない何かUTC以外のオフセット文字列で識別される場合、サーバーはCalendarItemを格納する前にStartおよびEndプロパティをCoordinated Universal Time(UTC)に変換する必要があります。

MeetingTimeZoneプロパティを使用して明示的なタイムゾーン定義が要求に含まれている場合、サーバーは、標準および夏時間のルールに関して正しい時間オフセットを適用しますゾーン。

明示的なタイムゾーンが定義されていない場合、Exchange 2007を実行しているコンピュータ(特に、要求を処理しているクライアントアクセスサーバー)の現在のタイムゾーンが使用されます。

注: Exchange 2007 SP1では、すべての指定されていないタイムゾーンは、クライアントアクセスサーバーのタイムゾーンではなく、UTCに設定されています。少し試す

、私はタイムゾーンを指定しない場合は、EWSが実際にUTCとの時間を適用することがわかりました。 IsAllDayEventがtrueの場合、開始時刻と終了時刻は日付コンポーネント以外で無視されます。だから、終日のイベントは、私のカレンダーの午前12時から午後12時まで、または午後5時から午後5時までに変わります(私も-7 UTCです)。ベストプラクティスの記事では、MeetingTimeZone要素の使用を推奨していますが、代わりにStartTimeZoneとEndTimeZoneを使用しています。実際に動作しているようです> < StartTimeZone ID =「太平洋標準時」を追加します。

は限り、あなたの3日間の問題が行くように私は、同様の結果を再現することができました。ここに私が容疑者が起きている。あなたは開始時刻を交換伝える場合で午前7時と終了時間は午前8時、フラグがすべての日で、それは自動的にYYY-MM-ddT00に開始時刻と終了時刻を設定します:00:00とYYY-MM-DD + 1をT00:00:00。 2011-11-05T07に00:00:00:私は2011-11-04T07の予約を送るのであれば、タイムゾーン要素O/W 00、それは私が2日間にまたがるしようとしていると考えています。開始時刻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やwebappで見ると、PSTに11月3日午後5時から11月6日午後5時に表示され、3日間(実際はわずか48時間)に見えます。ピートの答えに加えて

0

:Exchangeが保存され、どのような見通しがあなたに伝えているものとの間に差があること
注意。 「純粋な」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出力)としてこれを格納します。Outlookはまた、UTC用に設定されている場合

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

これはとして示し1月8日の全日イベント(予想通り)。

私はUTC + 1(アムステルダム時間)にOutlookを設定する場合は、イベントが2日間にまたがる表示(と彼は空白であることチェックボックスに注意してください)されています 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> 
3

は午後4時までの私のすべての日のイベントは、前日午後4時から作成されていた同様の問題に終日イベントの指定した日付を蘭(私は現在でよ太平洋標準時は-8であるので、元のUTCバグであるようです変更サーバー側)。

Appointment.saveを呼び出すとき、例えば、任意の第二のパラメータ、SendInvitationsMode.SendToNoneを使用:あなたはXMLを希望する場合

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

封筒/ボディ/ 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

あなたが指定したMeetingTimeZone(ES2007)または(ES2010 +用)StartTimeZoneにする必要があります。私は同じ問題を抱えていて、それが私を助けました。

関連する問題