簡體   English   中英

SharePoint列表未考慮RowLimit CAML標記-JavaScript

[英]SharePoint List not considering RowLimit CAML Tag - JavaScript

我在JavaScript中有一個查詢列表的方法。 用戶可以使用某些過濾器。 當我獲取列表的所有項目時(打開表單時),列表將被正確檢索。 但是,當我使用某些添加了“或”子句的過濾器時,出現以下錯誤消息:

“請求失敗。嘗試的操作被禁止,因為它超過了管理員強制執行的列表視圖閾值”

該查詢似乎沒有考慮我的行數限制。 在執行導入數據的過程之前(在測試過程中使用了一些數據),此查詢運行良好。

這是我為執行該操作而生成的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>

有人可以幫我找到解決這個問題的方法嗎(我試圖為這些列創建索引,但是不起作用)。

您不能使用<Contains>繞過列表視圖閾值

<Contains>操作無法從列索引中受益,因此不能幫助您避免通過列表視圖閾值(默認為5000個項目)進行限制。

為了解釋為什么索引編制對“包含”操作沒有幫助,請考慮建立索引,例如按書名按字母順序排列在書架上。 (這等效於對“標題”字段應用索引。)

您可以很快找到具有特定標題的書,因為您可以跳到知道該書應放在的位置。 實際上,您只需要知道標題的開頭即可快速找到它。

但是,如果您只知道所要查找的書名的一部分,該怎么辦? 除非您知道標題以該文本開頭,否則查找該書的唯一方法是每次查看一本書。

就像按字母順序排列書籍無法幫助您找到包含某些單詞的書籍一樣,CAML中的<Contains>元素無法利用列索引。 可以利用列索引的比較操作包括相等性測試( <Eq><Neq> ),不<Neq>比較( <Gt><Lt><Geq><Leq> )和<StartsWith>

替代方法:過濾確切名稱

如果您已將索引應用於SuppCatNameSuppName列,則CAML查詢中所有可能有效值的精確( <Eq> )篩選器應能夠繞過列表視圖閾值,假設結果本身(應用這些篩選器之后)不會超過列表視圖閾值5000項。

如果出於業務原因這兩列需要開放式,請考慮將確定子字符串值存儲在另一個索引字段中,以便更好地對其進行過濾。

不幸的是,這不能是一個計算字段,因為它們不能被索引。 但是,如果您不想強迫用戶手動輸入新數據,則可以使用工作流根據SuppCatNameSuppName列中的值來設置索引字段的值。

建議:添加一個<OrderBy>元素

<RowLimit>元素的好處是它使您可以獲取分頁結果。 相當於說“給我前x項目”。

但是,為了使之有意義,您應該告訴SharePoint對結果進行排序。 否則,“前x項目”是任意的(默認情況下可能按自動ID字段排序)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM