首页 > 解决方案 > 带有 CAML 查询的 SharePoint REST API 超过 5000 个项目

问题描述

我需要使用 SharePoint REST API 筛选包含 5000 多个项目的列表

要筛选的列之一是托管元数据列,它阻止我使用 SharePoint REST API GET Urls

我必须在正文中使用带有 CAML 查询的 REST API POST 请求来实现这一点。

我的代码如下所示

var viewXml =
{
    ViewXml: "<View>" +
    "<Query>" +
    "<Where><Eq>" +
    "<FieldRef Name='RegionTestHidden'/>" +
    "<Value Type='TaxonomyFieldType'>" + "North" + "</Value>" +
    "</Eq></Where>" +

    "</Query>" +
    "</View>"
}

function CamlQueryRESTCall(listName, viewXml)
{

    var call = jQuery.ajax(
        {
            url: _spPageContextInfo.webAbsoluteUrl+ "/_api/Web/Lists/getByTitle('"+listName+"')/GetItems(query=@v1)?" +
            "@v1=" + JSON.stringify(viewXml),
            type: "POST",

            dataType: "json",
            headers:
            {
                Accept: "application/json;odata=verbose",
                "X-RequestDigest": jQuery("#__REQUESTDIGEST").val()
            }
        }
        );

    return call;

}

我遇到的问题是,如果我根据South结果包含超过 5000 个项目的区域进行过滤,我会收到HTTP Error 500 Internal Server Error错误消息List item threshold exceeded

通过 GET 请求,我可以使用$topdata.d.__next加载 5000 多个项目。但是如何在 POST 请求中做类似的逻辑呢?

我尝试包含<RowLimit>1000</RowLimit>在 CAML 查询中,但仍然出现同样的错误

查询中使用的列被索引了。

标签: sharepoint-onlinecamlsharepoint-jsomsharepoint-rest-api

解决方案


这是由于 SharePoint 具有的列表视图阈值。看这里

这是一个门槛,您可以根据自己的需要进行更改。这是在 Central Admin 中完成的,如下所示:

  • 转到您的 SharePoint 场的中央管理
  • 转到“应用程序管理”部分下的“管理 Web 应用程序”
  • 选择迁移站点的“Web 应用程序”
  • 单击“常规设置”下拉菜单并选择“资源限制”
  • 将“列表视图阈值”更改为 12000 或类似的值。

推荐阅读