Web services 是否通过Web服务从Sharepoint日历展开定期事件?

Web services 是否通过Web服务从Sharepoint日历展开定期事件?,web-services,sharepoint,Web Services,Sharepoint,是否可以使用通过Lists.aspx公开的Web服务从Sharepoint的日历中获取事件列表(定期事件已展开) 如果您使用的是C#或VB,这显然是可能的,如使用以下代码段所述: SPQuery query = new SPQuery(); query.ExpandRecurrence = true; query.Query = "<Where><DateRangesOverlap><FieldRef Name=\"EventDate\" /><Fiel

是否可以使用通过Lists.aspx公开的Web服务从Sharepoint的日历中获取事件列表(定期事件已展开)

如果您使用的是C#或VB,这显然是可能的,如使用以下代码段所述:

SPQuery query = new SPQuery();
query.ExpandRecurrence = true;
query.Query = "<Where><DateRangesOverlap><FieldRef Name=\"EventDate\" /><FieldRef Name=\"EndDate\" /><FieldRef Name=\"RecurrenceID\" /><Value Type=\"DateTime\"><Month /></Value></DateRangesOverlap></Where>";
SPQuery query=new SPQuery();
query.ExpandRecurrence=true;
query.query=“”;
我正尝试通过cURL使用纯XML执行同样的查询:

<GetListItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<listName>{my guid goes here}</listName>
<query>
    <Query xmlns="">
    <Where>
    <DateRangesOverlap>
      <FieldRef Name="EventDate" />
      <FieldRef Name="EndDate" />
      <FieldRef Name="RecurrenceID" />
      <Value Type="DateTime"><Month/></Value>
   </DateRangesOverlap>
    </Where>
    </Query>
</query>
<queryOptions>
    <QueryOptions>
    <ExpandRecurrence>TRUE</ExpandRecurrence>
    </QueryOptions>
</queryOptions>

{我的guid在这里}
真的

这种方法可以工作-它可以获取所有列表项,但是循环项不会展开。关键似乎是ExpandRecurrence属性。令人惊讶的是,除了几篇博客文章之外,谷歌似乎没有太多的话要说。在浏览网页时,我读到一些评论,指出ExpandRecurrence属性不起作用,但其他人说它工作正常,我读到的任何东西都没有给我留下明确的印象


有没有人在不使用C#或VB的情况下尝试过这一点并使其正常工作——仅仅是纯XML

我追踪这个问题的方法是使用TcpTrace()之类的东西来查看正在发送的XML数据包。然后就是要确保手工制作的XML数据包看起来是一样的。我希望当您看到XML数据包时,差异应该是显而易见的。然后你可以用答案更新这个问题。

不可能。您需要通过使用SP对象模型,例如SPQuery对象。但这意味着您必须直接在sharepoint服务器上运行该代码,而不是从客户端调用


请看我的这个帖子

最终使其正常工作并返回SharePoint日历上的所有重复事件。以下是Web服务查询的XML:

<GetListItems xmlns='http://schemas.microsoft.com/sharepoint/soap/'>
<listName>{your GUID goes here}</listName>
<query>
 <Query>
  <Where>
   <DateRangesOverlap>
    <FieldRef Name=\"EventDate\" />
    <FieldRef Name=\"EndDate\" />
    <FieldRef Name=\"RecurrenceID\" />
    <Value Type='DateTime'><Year/></Value>
   </DateRangesOverlap>
  </Where>
 </Query>
</query>
<queryOptions>
 <QueryOptions>
  <ExpandRecurrence>TRUE</ExpandRecurrence>
 </QueryOptions>
</queryOptions>
</GetListItems>

{您的GUID位于此处}
真的

关键不仅是将ExpandRecurrence选项设置为true,还必须将该值包含在DateRangeOverlap to Year中。

我想我也遇到过类似的问题,它只是返回列表中的项目,而不是实际扩展定期项目(即,每周一发生的标记为a的项目仅显示为一条记录,而不是多条记录)

显然,版本12.0.0.6421(2007 SP1)即使您通过web服务API告诉它,也不会扩展项目。当我们应用最新的累积更新(2011年8月)时,它按照我们的预期工作(即,它将在每个星期一返回多个预定条目)

这是我在应用CUs后使用的代码:

    Query for ndQuery:
--------------------
<Where>
<DateRangesOverlap>
<FieldRef Name=""EventDate"" /><FieldRef Name=""EndDate"" /><FieldRef Name=""RecurrenceID"" />
<Value Type=""DateTime""><Month/></Value>
</DateRangesOverlap>
</Where>>
<OrderBy><FieldRef Name='ID' /></OrderBy>

query options for ndQueryOptions:
-----------------------------------------------
<IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns>
<DateInUtc>TRUE</DateInUtc>
<ViewAttributes Scope=\"Recursive\" />
<RecurrencePatternXMLVersion>v3</RecurrencePatternXMLVersion>
<ExpandRecurrence>True</ExpandRecurrence>
<CalendarDate>2011-10-16T00:00:00Z</CalendarDate>
<RecurrenceOrderBy>TRUE</RecurrenceOrderBy>
<ViewAttributes Scope=\"RecursiveAll\"/>

Web service call:
------------------------
XmlNode results = wsList.GetListItems("Events", String.Empty, ndQuery, ndViewFields, String.Empty, ndQueryOptions, "F43559AF-C643-4FF3-AAA3-77471A2D1979");
ndQuery的查询: -------------------- > ndQueryOptions的查询选项: ----------------------------------------------- 错误的 真的 v3 真的 2011-10-16T00:00:00Z 真的 Web服务调用: ------------------------ XmlNode results=wsList.GetListItems(“事件”,String.Empty,ndQuery,ndViewFields,String.Empty,ndQueryOptions,“F43559AF-C643-4FF3-AAA3-77471A2D1979”);
是,您可以拆分sharepoint日历中的定期事件,并可以在特定时间段内从列表中下载

我已经创建了一个相同的自定义dll


没有。我从来没有想到。似乎ExpandRecurrence必须在服务器端完成。根据您的情况,您可以创建一个Web服务包装器,模仿正常的日历Web服务,但显式地处理ExpandRecurrence标志。这是我目前为止唯一的猜测。-1这篇文章的答案是错误的是不正确的。下面的答案是正确的。我知道这是一篇旧文章,但为了防止其他人偶然发现它,请使用下面的解决方案。这在客户端是绝对可能的。使用列表web服务,如下面其他答案中所述。对于任何人来说,一个关键点是:确保添加到视图字段,否则就不行了