SharePoint列表未考虑行限制CAML标记-JavaScript

SharePoint列表未考虑行限制CAML标记-JavaScript,javascript,sharepoint,office365,Javascript,Sharepoint,Office365,我在JavaScript中有一个查询列表的方法。用户可以使用一些过滤器。 当我获取列表的所有项目时(当表单打开时),列表被正确地检索到。 但是,当我使用一些过滤器(其中添加了一些“or”子句)时,我会收到以下错误消息: “请求失败。尝试的操作被禁止,因为它超过了管理员强制执行的列表视图阈值” 似乎查询没有考虑我的行限制。在执行导入数据的过程之前(在使用少量数据进行测试期间),此查询工作正常 这是我为执行该操作而生成的XML: <View> <Query>

我在JavaScript中有一个查询列表的方法。用户可以使用一些过滤器。 当我获取列表的所有项目时(当表单打开时),列表被正确地检索到。 但是,当我使用一些过滤器(其中添加了一些“or”子句)时,我会收到以下错误消息:

“请求失败。尝试的操作被禁止,因为它超过了管理员强制执行的列表视图阈值”

似乎查询没有考虑我的行限制。在执行导入数据的过程之前(在使用少量数据进行测试期间),此查询工作正常

这是我为执行该操作而生成的XML:

<View>
   <Query>
      <Where>
         <And>
            <Eq>
               <FieldRef Name="AppvdSuppName" />
               <Value Type="Text">Non Approved Prime Supplier</Value>
            </Eq>
            <Or>
               <Contains>
                  <FieldRef Name="SuppCatName" />
                  <Value Type="Text">unit 7</Value>
               </Contains>
               <Contains>
                  <FieldRef Name="SuppName" />
                  <Value Type="Text">unit 7</Value>
               </Contains>
            </Or>
         </And>
      </Where>
   </Query>
   <RowLimit>30</RowLimit>
</View>

未经批准的主要供应商
第七单元
第七单元
30
有人能帮我找到这个问题的解决方案吗(我试图为这些列创建索引,但不起作用)。

您不能使用
来规避列表视图阈值
操作不能从列索引中获益,因此也不能帮助您绕过列表视图阈值(默认为5000项)设置的限制

为了解释为什么索引对“包含”操作没有帮助,可以考虑索引,比如按书名按字母顺序排列书架上的书籍。(这相当于对标题字段应用索引。)

你可以很快找到一本有特定书名的书,因为你可以跳到你知道书应该在哪里的地方。事实上,你只需要知道标题的开头就可以快速找到它

但是如果你只知道你要找的书的一部分书名会怎么样呢?除非你知道书名是从这段文字开始的,否则找到这本书的唯一方法就是看每一本书,一次看一本

正如按字母顺序排列书籍无助于查找包含特定单词的书籍一样,CAML中的
元素无法利用列索引。可以利用列索引的比较操作包括相等性测试(
),不相等性比较(
),和

备选方案:过滤精确名称 如果已将索引应用于
SuppCatName
SuppCatName
列,则CAML查询中所有可能有效值的精确(
)过滤器应能够绕过列表视图阈值,前提是结果本身(应用这些过滤器后)不会超过5000个项目的列表视图阈值

如果这两个列由于业务原因需要开放,请考虑将确定子字符串值存储在可以更好地过滤的不同索引字段中。

不幸的是,这不能是计算字段,因为这些字段不能被索引。但是,如果不想强制用户手动输入新的数据,可以使用工作流根据
SuppCatName
SuppCatName
列中的值设置索引字段的值

建议:添加
元素
元素的好处是它可以让您获得分页结果。这相当于说“给我第一个
x
项目。”


但是,为了使其有意义,您应该告诉SharePoint对结果进行排序。否则,“第一个
x
项”是任意的(默认情况下可能按自动ID字段排序)。

是“似乎…”的实际错误消息吗?抱歉,我忘了添加消息(现在已添加)。第二个选项工作正常,性能良好。我所做的是创建一个索引列,由于数据只是为了查看,我用我想要使用过滤器的列的值填充了这些创建的列。然后,当我使用我的过滤器时,我只在这个新字段中使用一个contains,结果被正确检索。我已经用一个已定义的字符分隔了这些值,当我需要某个特定的值时,我只需搜索这个特定字符之间的值。好吧,对我来说这是一个解决办法,然而,这是我的工作方式。谢谢你的回答。