如果返回多个结果,CSOM 返回"The attempted operation is prohibited because it exceeds the list view threshold."



我有一些代码可以扫描包含InfoPath表单列表的文档库。它使用CSOM和caml查询来获得需要使用的特定表单。我已经让这个代码运行了很多年,没有任何问题。今天,我开始收到错误";尝试的操作被禁止,因为它超过了列表视图阈值">

这是SharePoint Online,我知道列表视图阈值为5000。我们的清单上确实有5000多件商品,而且已经有一段时间了我试图检索的结果应该是带回大约10个表单;远低于5000件的门槛我查询的两个字段都有索引

ListItemCollection spList = clientContext.Web.Lists
?.GetByTitle(libName)
?.GetItems(new CamlQuery
{
ViewXml = "<View><Query><Where><And><Eq><FieldRef Name="Field1"/><Value Type="Text">No</Value></Eq><Eq><FieldRef Name="Field2"/><Value Type="Text">No</Value></Eq></And></Where></Query></View>"
});
clientContext.Load(spList);
clientContext.Load(spList, items => items.Include(
item => item.ContentType,
item => item.DisplayName,
item => item.ContentType.Fields,
item => item.Folder,
item => item.Folder.Files,
item => item.File.ListItemAllFields,
item => item.FileSystemObjectType,
item => item.File,
item => item.File.Author,
item => item.File.ServerRelativeUrl
));
clientContext.SendRequest();

在测试该问题时,我发现我可以通过ID 检索项目

"<View><Query><Where><Eq><FieldRef Name='ID' /><Value Type='Number'>16134</Value></Eq></Where></Query></View>"

然而,当尝试使用Or并包含两个ID时,我再次出现错误。

"<View><Query><Where><Or>" + 
"<Eq><FieldRef Name='ID' /><Value Type='Number'>6001</Value></Eq>" + 
"<Eq><FieldRef Name='ID' /><Value Type='Number'>6002</Value></Eq>" + 
"</Or></Where></Query></View>"

现在看来,门槛似乎是一个门槛。我不确定这是由于我查询数据的方式,还是由于某种原因,所有结果都被返回,或者是否存在内部错误。

我的第一个想法是,有些事情是站在微软一边的,但我在健康中心或其他任何地方都没有看到。

是否有任何已知的原因可能导致这种情况,以及如何纠正问题的建议?可能是MS最近的变化或折旧?

尝试在视图的where子句中引用的任何列上创建索引,在您的情况下"字段1"字段2";。您可以在prem或列表设置中在线执行此操作->quot;索引列";。否则,sharepoint会尝试读取整个列表,试图评估where子句,结果会超过5000项的阈值。

相关内容

  • 没有找到相关文章

最新更新