微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CSOM 查询分页文件结果

如何解决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 element (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);

如果可能,请向我们提供有关您的测试的反馈。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。