Просто для ссылки на других людей, которые попадают сюда из Google.
Мне нужно извлечь данные из устаревшей системы, и у меня точно такая же проблема. Разница в том, что у меня нет контроля над списком 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