Sharepoint Web Service GetListItems不返回所有行

时间:2009-08-21 22:27:46

标签: c# web-services sharepoint sharepoint-2007 moss

我正在使用GetListItems Web服务,它只返回大约50%的结果存储。可以返回多少数据是否有限制?无论如何围绕这个吗?

7 个答案:

答案 0 :(得分:5)

该方法仅检索列表的默认视图中的行数。要解决此问题,您只需在默认视图中增加行数,或者更好的是,使用CAML查询。这是一篇关于如何将CAML与Web服务一起使用的文章: http://dotnet.org.za/zlatan/archive/2007/08/01/collaborative-application-markup-language-caml-and-webservices-in-sharepoint-2007.aspx

答案 1 :(得分:4)

根据我的经验,你必须选择: 1.将调用getlistitems方法时使用的视图更改为返回所有行的正确视图 2.检查并查看是否在getlistitems方法中放置了一个rowlimit。如果要返回当前视图中的所有内容,可以使用“0”,请参阅下面的示例:     XmlNode doc = doclist.GetListItems(“我的列表”,“我的视图”,查询,viewFields,“0”,queryOptions,null);

您也可以尝试转到SharePoint网站,转到要提取的列表,然后选择设置并修改默认视图/创建自己的视图并展开“总计”组。在Totals组下,查找列表的唯一标识符(例如ID),然后在旁边的下拉列表中选择COUNT,然后保存您的视图。重新加载列表后,将比较此视图中现在显示的总数与查询返回的项目数。如果它们仍然不一样,请告诉我。 :)

答案 2 :(得分:2)

请参阅this文章,您返回的行数取决于您使用的视图,更改视图中的行限制。

答案 3 :(得分:1)

答案 4 :(得分:1)

GetListItems()根据您正在使用的视图的行限制作为方法调用中的第二个参数来限制结果。如果需要返回所有行:

  1. 使用您最喜欢的(或最不喜欢的)Web浏览器
  2. 转到SharePoint网站
  3. 导航到您的列表
  4. 选择与您正在使用的GUID相对应的视图作为GetListItems()方法调用的第二个参数(请参阅下面的示例)
  5. 选择(从“查看”下拉菜单中)“修改此视图”
  6. 一直滚动到底部并展开“项目限制”
  7. 设置一个较大的数字(我使用9000)作为“要显示的项目数”,然后选择“限制返回到指定数量的项目总数。”
  8. 单击“确定”。

    Service.GetListItems(ListGuid, ViewGuid ,查询,viewFields, RowLimit ,queryOptions,null);

  9. 如果 RowLimit 方法参数小于您在SharePoint中设置的视图行限制,则结果将限制为参数值。

答案 5 :(得分:1)

仅供参考从谷歌到这里的其他人。

我需要从遗留系统中提取数据,并碰巧遇到同样的问题。不同之处在于我无法控制sharepoint列表,因此无法更改默认视图。

var items = listSvc.GetListItems(listname, null, null, null, null, null);

var pager = items.ChildNodes[1].Attributes["ListItemCollectionPositionNext"] != null ? items.ChildNodes[1].Attributes["ListItemCollectionPositionNext"].Value : string.Empty;
var pagerXml = new XmlDocument();
pagerXml.InnerXml = "<QueryOptions><Paging ListItemCollectionPositionNext=\"\" /></QueryOptions>";
var pagerNode = pagerXml.GetElementsByTagName("QueryOptions")[0];

while (!string.IsNullOrEmpty(pager))
{
    pagerNode.ChildNodes[0].Attributes[0].Value = pager;
    var temp = listSvc.GetListItems(listname, null, null, null, null, pagerNode);
    foreach (XmlNode c in temp.ChildNodes[1].ChildNodes)
    {
        var c2 = items.OwnerDocument.ImportNode(c, true);
        items.ChildNodes[1].AppendChild(c2);
    }

    pager = temp.ChildNodes[1].Attributes["ListItemCollectionPositionNext"] != null ? temp.ChildNodes[1].Attributes["ListItemCollectionPositionNext"].Value : string.Empty;
}

这是一次性使用代码,所以我留给读者整理一下:D

但要点是,如果你不能在一次通话中得到它,只需使用视图页面大小作为批量大小批量获取它。 GetListItems()的最后一个参数接受XmlNode参数,您可以传递类似的内容:

<QueryOptions><Paging ListItemCollectionPositionNext="{paging-option}" /></QueryOptions>

其中{paging-option}rs:data

的属性(同名)的值

答案 6 :(得分:1)

将rowLimit设置为0

var rowLimit = "0";
var result = client.GetListItems("ListName", null, query, viewFields, rowLimit, queryOptions, null);

小心超时。如果您的SharePoint列表中有很多项目,那么您可能会遇到http超时。可以在IIS网站的IIS和web.config中更改超时