我正在使用GetListItems Web服务,它只返回大约50%的结果存储。可以返回多少数据是否有限制?无论如何围绕这个吗?
答案 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()根据您正在使用的视图的行限制作为方法调用中的第二个参数来限制结果。如果需要返回所有行:
单击“确定”。
Service.GetListItems(ListGuid, ViewGuid ,查询,viewFields, RowLimit ,queryOptions,null);
如果 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中更改超时