1

特定の日付から 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 />します。

4

1 に答える 1

0

次のクエリ文字列を試すことができます。

<Where><And><Leq><FieldRef Name='EventDate' /><Value Type='DateTime'>...</Value></Leq><Geq><FieldRef Name='EndDate' /><Value Type='DateTime'>...</Value></Geq></And></Where>

このような形式で開始日と終了日の値を指定します2013-06-01T00:00:00

于 2013-06-06T07:10:51.197 に答える