来自Sharepoint日历的所有事件都使用webservice

时间:2013-06-05 16:04:47

标签: .net sharepoint caml

我正在尝试将日历中的所有列表项目安排在给定日期的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日或更晚的日期,如10/1/2014)之外的任何查询(对于给定日期)都不会在日期范围之间返回任何事件。

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

更新:我遵循道格拉斯的建议,它错过了DateRangesOverlap部分,所以它只返回一个节点用于重复事件而不是展开它们。所以我认为它不起作用。

更新:我发现了一篇解释DateRangesOverlap值类型的文章。 Here确认<Year />仅返回今天的数据,但不适用于日历日期(我希望它的开始日期)。根据那篇文章,<Month />更可靠。所以我不能进行日期范围搜索(至少不能在单个Web服务调用中)。我会改用<Month />

1 个答案:

答案 0 :(得分: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指定开始日期和结束日期的值。