Warm tip: This article is reproduced from serverfault.com, please click

c#-在线Sharepoint

(c# - Sharepoint online)

发布于 2020-12-17 11:01:54

我正在尝试从特定视图获取项目列表。下面是代码

Microsoft.SharePoint.Client.List _lists = context.Web.Lists.GetByTitle("Invoice Register");  
context.Load(_lists);
context.ExecuteQuery();
int listCount = _lists.ItemCount; // i get 49000+ count here
                
View _listsView = _lists.Views.GetByTitle("IT Testing");
context.Load(_listsView);
context.ExecuteQuery();
                

CamlQuery _query = new CamlQuery();
_query.ViewXml = _listsView.ViewQuery;


Microsoft.SharePoint.Client.ListItemCollection items = _lists.GetItems(_query);           
context.Load(items);            
context.ExecuteQuery();
int _viewCount = items.Count; // I get nothing here.
           

我收到的错误是 “尝试执行的操作被禁止,因为它超出了管理员强制执行的列表视图阈值”

我已经创建了索引 在此处输入图片说明

我将“ IT测试”的限制设置为5000,如下所示。 在此处输入图片说明

如果有人可以指导,那将是有帮助的。我已经浏览了所有可能的链接。

问候

Questioner
Ather Siddiqui
Viewed
0
674k 2020-12-27 16:02:44

@Ather Siddiqui,

没有直接方法可以在视图下获取项目,因为该视图仅具有查询架构,没有任何项目。caml查询可能会获得与视图下相同的项目,但是它将触发列表视图阈值。

@ user2250152提供了一个很好的方法,可以通过分页获取超过5000个项目。如果要使用视图查询,可以按以下方式更改查询:

List tList = context.Web.Lists.GetByTitle("My test list");
            CamlQuery camlQuery = new CamlQuery
            {
                ViewXml = @"<View><Query><Where><Gt><FieldRef Name='ID' /><Value Type='Counter'>20</Value></Gt></Where></Query><OrderBy><FieldRef Name ='FileLeafRef' /></OrderBy><RowLimit>4990</RowLimit></View>"  // your view query
            };

            var itemColl = new List<ListItem>();
         
            do
            {
                ListItemCollection listItemCollection = tList.GetItems(camlQuery);
                context.Load(listItemCollection);
                context.ExecuteQuery();    
                
                //
                itemColl.AddRange(listItemCollection);
                camlQuery.ListItemCollectionPosition = listItemCollection.ListItemCollectionPosition;               

            } while (itemColl.Count < 999); //view row limit   

            Console.WriteLine(itemColl);