特定の日付から 30 日以内に予定されているカレンダーのすべてのリスト アイテムを取得しようとしています。
ndQueryOptions.InnerXml = "<ExpandRecurrence>TRUE</ExpandRecurrence>";
ndQueryOptions.InnerXml += "<CalendarDate>" + calendarDate + "</CalendarDate>";
ndQueryOptions.InnerXml += "<ViewAttributes Scope=\"RecursiveAll\" />";
ndQuery.InnerXml = @"<Where><DateRangesOverlap><FieldRef Name=""EventDate"" /><FieldRef Name=""EndDate"" /><FieldRef Name=""RecurrenceID"" /><Value Type=""DateTime""><Now /></Value></DateRangesOverlap></Where><OrderBy><FieldRef Name=""EventDate"" /></OrderBy>";
次に、データをマッサージして、日付範囲内のデータを取得します。
指定された日付が特定の範囲内にある場合に機能するようです。たとえば、毎週水曜日と金曜日にイベントがあります。現在が 2013 年 6 月 5 日の場合、現在から 2013 年 9 月 13 日までのデータが返されます。これらの 2 日間 (2013 年 4 月 5 日などの前の日付または 2014 年 10 月 1 日などの後の日付) 以外の (指定された日付に対する) クエリは、日付範囲間のイベントを返しません。
更新:<Value Type=""DateTime""><Year /></Value>
をからに変更しました<Now />
。結果は、いくつかの履歴データを返す方が優れていますが、前年にも来年にも返されません。
更新: Douglas の提案に従いました。DateRangesOverlap 部分が欠落しているため、展開されたイベントではなく、再発イベントに対して 1 つのノードのみが返されます。だから、うまくいかないと思います。
更新: DateRangesOverlap の値の型を説明する記事を見つけました。ここで<Year />
は、今日からのデータのみを返し、カレンダーの日付 (希望の開始日) では機能しないことを確認します。その記事によると、<Month />
より信頼性があります。そのため、日付範囲の検索はできません (少なくとも 1 回の Web サービス呼び出しではできません)。代わりに使用<Month />
します。