4

アポイントメントを交換に挿入しているときに、「EndDateがStartDateより前です」という問題が発生しました。誰かがこれを解決するのを手伝ってもらえますか?

Appointment appt=new Appointment();
appt.Start=DateTime.Now();
appt.End=DateTime.Now().Addhours(1);
appt.Subject="Test";
appt.Save(WellKnownFolderName.Calendar);

最後の行で問題が発生しましたが、正しい開始日と終了日を指定しています。この問題が発生した理由を教えてください。

注:開始日と終了日に異なる日付を指定すると、受け入れられます。開始日と終了日は同じで、時間のみが異なる必要があります。このシナリオでは、この問題が発生したのは私だけです。これを解決するのを手伝ってください

4

2 に答える 2

1

今日、非常によく似た問題に遭遇しましたが、イベントを更新するときに. 私の解決策は質問に関連していると思います。

中央ヨーロッパのタイムゾーンで作成されたイベントを更新していました。私のコードは、次の順序でプロパティを設定していました。

appt.Start = DateTime.UtcNow;
appt.End = DateTime.UtcNow.AddMinutes(30);
appt.StartTimeZone = TimeZoneInfo.FindSystemTimeZoneById("UTC");
appt.EndTimeZone = TimeZoneInfo.FindSystemTimeZoneById("UTC");

マネージド API を使用していると、プロパティの割り当ての順序が実際の操作に影響を与えないという印象を受けましたが、この場合はそうではないことがわかりました。

Managed API は次の XML を生成しました。

<soap:Body>
        <m:UpdateItem ConflictResolution="AlwaysOverwrite" SendMeetingInvitationsOrCancellations="SendToNone">
            <m:SavedItemFolderId>
                <t:FolderId Id="AQMkADJkAAA==" />
            </m:SavedItemFolderId>
            <m:ItemChanges>
                <t:ItemChange>
                    <t:ItemId Id="AAMkADJkZWZiODMxLWNRE" />
                    <t:Updates>
                        <t:SetItemField>
                            <t:FieldURI FieldURI="calendar:EndTimeZone" />
                            <t:CalendarItem>
                                <t:EndTimeZone Name="UTC" Id="UTC">
                                    ...
                                </t:EndTimeZone>
                            </t:CalendarItem>
                        </t:SetItemField>
                        <t:SetItemField>
                            <t:FieldURI FieldURI="calendar:Start" />
                            <t:CalendarItem>
                                <t:Start>2015-10-19T15:30:00.000Z</t:Start>
                            </t:CalendarItem>
                        </t:SetItemField>
                        <t:SetItemField>
                            <t:FieldURI FieldURI="calendar:End" />
                            <t:CalendarItem>
                                <t:End>2015-10-19T16:00:00.000Z</t:End>
                            </t:CalendarItem>
                        </t:SetItemField>
                        ...
                        <t:SetItemField>
                            <t:FieldURI FieldURI="calendar:StartTimeZone" />
                            <t:CalendarItem>
                                <t:StartTimeZone Name="UTC" Id="UTC">
                                    ...
                                </t:StartTimeZone>
                            </t:CalendarItem>
                        </t:SetItemField>
                    </t:Updates>
                </t:ItemChange>
            </m:ItemChanges>
        </m:UpdateItem>
    </soap:Body>

プロパティの割り当ての順序を切り替えてタイムゾーンを設定すると、最初に問題が解決しました。

また、イベントの元のタイムゾーンが設定されているタイムゾーンと同じ場合も問題は発生しません。タイムゾーンを切り替えるときだけ。

これは本当の解決策ではないことに注意してください。マネージド API のクローンを作成し、ライブラリの問題を修正することをお勧めします。

于 2015-10-20T06:26:29.103 に答える
0

多分問題はタイムゾーンです。現在、Exchange 2010 Exchange Web サービスでのタイム ゾーンのDateTimeKind.Local操作で推奨されていないタイム ゾーンを使用する場合。として何かを試してみませんか? 私は Exchange2007 を使用しており、コードは機能しますが、2010 年にタイムゾーンの処理が変更されました。appt.Start = new DateTime(2010, 2, 12, 10, 0, 0, DateTimeKind.Unspecified);

于 2012-04-26T14:25:33.643 に答える