3

現在、Exchange WebサービスマネージAPIを使用して、製品とExchange間の同期サービスの作成に取り組んでいます。具体的には、ユーザーのカレンダーで特定の予定を(タイムスケジュールで)前後に同期させたいと考えています。同期の一部として、必ずしもすべての予定を同期する必要はありませんが、必要な予定のみを返すようにいくつかの複雑なSearchFilterを構築しました。問題は、SearchFiltersを使用するには、ExchangeService.FindItemsメソッドを使用する必要があることですが、このメソッドは、繰り返し発生するイベントのマスター繰り返しのみを返します。もう1つのオプションは、ExchangeService.FindAppointmentを使用することです。これにより、繰り返し拡張が実行されますが、開始日と終了日を使用して結果の予定を制限することしかできないという新しい問題があります。ExchangeService.FindAppointmentがどのように実装されているかを見て、

複雑なSearchFilterを使用して、Exchangeから拡張された予定のリストを取得するにはどうすればよいですか?

4

2 に答える 2

5

これはMSDNで見つかりました:http: //msdn.microsoft.com/en-us/library/hh148195 (v = exchg.140).aspx

カレンダーの予定を検索する際の考慮事項

カレンダーの予定は、検索の特殊なケースです。定期的な予定など、一部のカレンダーの予定には、例外や削除されたオカレンスが含まれる場合があります。カレンダーフォルダを検索するときにExchangeサーバーが定期的な予定を確実に拡張するには、カレンダーページングを使用する必要があります。ただし、カレンダーページングを使用する場合、他の検索制限を使用することはできません。これは、たとえば、特定の主催者の今月のすべてのカレンダーの予定を表示する場合、主催者に基づく検索フィルターを作成できないことを意味します。代わりに、CalendarViewクラスを使用して、その月のすべての予定を照会し、オーガナイザーに基づいてクライアント側で予定をフィルター処理できます。次の例は、カレンダービューを使用してカレンダー内の予定を検索する方法を示しています。

于 2012-06-14T16:15:01.840 に答える
0

FindAppointments / CalendarViewを使用したguxiyouのソリューションが実用的でないことがわかった場合は、以下の私のソリューションをご覧ください。CalendarViewは、すべてを取得してクライアント側をフィルタリングするのではなく、「最終変更」フィルターを使用することが望ましい自動同期の状況では特に便利ではありません。これはあまりパフォーマンスが高くありません。

フィルタをサポートする通常のFindItemsの方法を使用し、予定を繰り返しながらAppointmentTypeをチェックしました。これにより、RecurrenceMasterタイプの場合、リンクされたオカレンスが検出され、同期されるリストに追加されます。

これらの予定の発生を後で取得する方法の下。終了日がない繰り返しパターンは、ループが無限になるため無視されます。同期ウィンドウを制限しない限り、これらの繰り返しは、とにかく同期するために別の方法で処理する必要があります。

    private IEnumerable<Appointment> GetRecurrentAppointments(Appointment masterAppointment)
    {
        Recurrence recurrence = masterAppointment.Recurrence;

        if (recurrence == null || !recurrence.HasEnd)
            yield break;

        for (int i = 1; i <= recurrence.NumberOfOccurrences; i++)
        {
            Appointment occurrence = Appointment.BindToOccurrence(ExchangeServiceProxy, masterAppointment.Id, i);

            yield return occurrence;
        }
    }
于 2016-06-02T12:04:23.160 に答える