SharePoint 2010 REST 大型列表计数

SharePoint 2010 REST Large List Counts

在这里为您快速提问。因此,我正在尝试对有多少列表项进行 REST 计算,但列表一次仅 returns 最多 1,000 个条目。我想我有一个解决方法,但我将如何添加两个结果?

        $.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$inlinecount=allpages", function (data) {
        $("#ALLCount1").text(data.d.results.length);
    })

    $.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$inlinecount=allpages&$skiptoken=1016", function (data) {
        $("#ALLCount2").text(data.d.results.length);
    })

要获得总和,您可以尝试这样的操作:

var sum = 0;

$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$inlinecount=allpages", function (data) {
    sum = data.d.results.length;
    $("#ALLCount1").text(sum);
    $.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$inlinecount=allpages&$skiptoken=1016", function (data) {
        sum += data.d.results.length;
        $("#ALLCount2").text(sum);
    })  
})

虽然这有一些问题:

  1. 首先,你为什么要跳到 1016?你不想要1001吗?
  2. 你这里只有两个电话。您打算如何检索记录 2001?

您可能想要做的是分页。也就是说,一直发送请求,直到没有记录返回。

项目总数

如果您要查找列表本身中的项目总数(而不是筛选视图中的项目数),您可以直接访问列表的 $count 属性。

"/_vti_bin/ListData.svc/MPIC/$count"

这将 return 项目计数。

分页(如果需要)

要使用 REST 模拟分页,您可以执行以下操作:

  1. 使用$skip=n参数根据$orderby参数跳过前n个条目
  2. 根据$orderby$skip参数,使用$top=n参数return顶部n条目。

处理异步回调

代码中最大的问题是您有两个异步函数回调,用于获取结果项的总和。由于这些函数调用不在同一范围内执行,因此您无法同时访问它们的值。

解决方法是使用函数链接将您的逻辑向前移动到回调函数中。

使用 $skip 和 $top 的示例

这是一个使用 $skip$top 参数以及您提供的代码的示例,使用递归回调函数在更新 ALLCount1 的文本之前获取结果总数元素.

$.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$orderby=Id&$top=1000&$inlinecount=allpages", function (data) {
    var count = data.d.results.length;
    updateTotal(count);
});

function updateTotal(total){
    $.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$orderby=Id&$skip="+total+"&$top=1000&$inlinecount=allpages", function (data) {
        var count = data.d.results.length;
        if(count > 0){
            updateTotal(total+count);
        }
        else{
            $("#ALLCount1").text(total);
        }
    });
}

使用 $skiptoken 和 $top 的示例

如果您不得不使用 $skiptoken 而不是 $skip(例如在查询包含 5000 多个项目的列表时),您当然仍然可以使用它,但是您将拥有还有更多工作要做。

$skip 只想要跳过的项目数,$skiptoken 想要跳过最后一个项目的 ID。

代码与上面大部分相同,但您需要深入研究数据结果并提取最后一项的 ID 值。我将把它留作 reader.

的练习
updateTotal(0,0);
function updateTotal(skip,total){
    $.getJSON("/_vti_bin/ListData.svc/MPIC?$select=Id&$orderby=Id&$skiptoken="+skip+"&$top=1000&$inlinecount=allpages", function (data) {
        var count = data.d.results.length;
        if(count > 0){
            var lastItemId;
            // TODO: get last item id from results here
            updateTotal(lastItemId,total+count);
        }
        else{
            $("#ALLCount1").text(total);
        }
    });
}