c# - CSOM 查询分页文件结果
问题描述
试图弄清楚如何通过传递“page”和“pageSize”来更新以下代码以获取分页结果:
using (ClientContext spClientContext = new AuthenticationManager().GetACSAppOnlyContext(siteUrl, _clientId, _clientSecret))
{
if (spClientContext != null)
{
CamlQuery camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View Scope="RecursiveAll">" +
"<Query>" +
"<Where>" +
"<Eq><FieldRef Name='FSObjType' /><Value Type='Integer'>0</Value></Eq>" +
"</Where>" +
"<OrderBy><FieldRef Name=\"FileLeafRef\" Ascending=\"FALSE\"/></OrderBy>" +
"</Query>" +
"<RowLimit>10</RowLimit>" +
"</View>";
List list = spClientContext.Web.Lists.GetByTitle("Documents");
ListItemCollection listItems = list.GetItems(camlQuery);
spClientContext.Load(listItems,
items => items.Include(
item => item.DisplayName,
item => item.FileSystemObjectType,
item => item.File,
item => item.File.Name,
item => item.File.Author,
item => item.File.ModifiedBy,
item => item.File.ListItemAllFields["Created"],
item => item.File.ListItemAllFields["Modified"],
item => item.File.ListItemAllFields["FileRef"],
item => item.File.Length));
spClientContext.ExecuteQuery();
if (listItems != null && listItems.Count > 0)
{
foreach (ListItem item in listItems)
{
if (item.FileSystemObjectType.Equals(FileSystemObjectType.File))
{
// Do Stuff
}
}
}
}
}
上面的代码将包含在“pageSize”将被传递给 CAML 查询“RowLimit”元素值的方法中。那是有效的。我对 SharePoint CSOM 开发人员还很陌生,所以现在想弄清楚如何设置页面或位置,以便我只能根据请求查询分页结果?谢谢您的帮助!
解决方案
该RowLimit
属性包含一个名为 的布尔属性Paged
,其中默认值为FALSE
。在RowLimit 元素 (List)中包含一些关于此的规范;但是,这是一个不平凡的实现,可能您需要使用do{...}while{...}
循环来辅助您的任务,最终代码将类似于下面的示例:
camlQuery.ViewXml = "<View Scope="RecursiveAll">" +
"<Query>" +
"<Where>" +
"<Eq><FieldRef Name='FSObjType' /><Value Type='Integer'>0</Value></Eq>" +
"</Where>" +
"<OrderBy><FieldRef Name=\"FileLeafRef\" Ascending=\"FALSE\"/></OrderBy>" +
"</Query>" +
"<RowLimit Paged='TRUE'>10</RowLimit>" +
"</View>";
List list = spClientContext.Web.Lists.GetByTitle("Documents");
List<ListItem> listItemColl = new List<ListItem>();
do
{
ListItemCollection listItems = list.GetItems(camlQuery);
spClientContext.Load(listItems,
items => items.Include(
item => item.DisplayName,
item => item.FileSystemObjectType,
item => item.File,
item => item.File.Name,
item => item.File.Author,
item => item.File.ModifiedBy,
item => item.File.ListItemAllFields["Created"],
item => item.File.ListItemAllFields["Modified"],
item => item.File.ListItemAllFields["FileRef"],
item => item.File.Length));
spClientContext.ExecuteQuery();
context.Load(listItems);
try
{
spClientContext.ExecuteQuery();
listItemColl.AddRange(listItems);
camlQuery.ListItemCollectionPosition = itemCollection.ListItemCollectionPosition;
}
catch (Exception ex)
{
throw new InvalidOperationException("Error on paging", ex);
}
}
while (camlQuery.ListItemCollectionPosition != null);
如果可能,请向我们提供有关您的测试的反馈。
推荐阅读
- c# - 循环内的多个按钮不会在 Windows 窗体 c# 应用程序中使用 .hide() 隐藏和显示
- xcode - 从 GitLAB 上的现有 .C 文件创建 Xcode 项目
- java - 无法识别的令牌“消息”:期待(JSON 字符串、数字、数组、对象或令牌“空”、“真”或“假”)
- docker - workdir 中没有这样的文件或目录
- python - 蟒龟。制作不同的场景,让我的形状,gif 方式更小
- javascript - 如何使用 $ajax 更新 chart.js 值
- android - 自定义信息窗口标记
- c - 有没有办法在 PAM conv 函数中传递 unicode 符号?
- python - 我想创建一个函数,它接受一个列表并返回相同的列表但没有重复的元素,这个程序有什么问题?
- python-3.x - Python 3.9.0 - 阻力工作异常的物理模拟