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 日的数据。除了这两天(更早的日期,如 2013 年 4 月 5 日或更晚的日期,如 2014 年 10 月 1 日)之外的任何查询(针对给定日期)都不会返回日期范围之间的事件。

更新:我更改了<Value Type=""DateTime""><Year /></Value>from <Now />,结果更好,它确实返回了一些历史数据,但不是上一年,也不是明年。

更新:我遵循了 Douglas 的建议,它错过了 DateRangesOverlap 部分,因此它只为经常性事件返回一个节点,而不是展开它们。所以我认为它行不通。

更新:我发现一篇文章解释了 DateRangesOverlap 的值类型。这里确认<Year />只返回今天的数据并且不适用于日历日期(我想要的开始日期)。根据那篇文章,<Month />更可靠。所以我不能进行日期范围搜索(至少不能在单个 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 回答