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);
})
})
虽然这有一些问题:
- 首先,你为什么要跳到 1016?你不想要1001吗?
- 你这里只有两个电话。您打算如何检索记录 2001?
您可能想要做的是分页。也就是说,一直发送请求,直到没有记录返回。
项目总数
如果您要查找列表本身中的项目总数(而不是筛选视图中的项目数),您可以直接访问列表的 $count
属性。
"/_vti_bin/ListData.svc/MPIC/$count"
这将 return 项目计数。
分页(如果需要)
要使用 REST 模拟分页,您可以执行以下操作:
- 使用
$skip=n
参数根据$orderby
参数跳过前n
个条目
- 根据
$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);
}
});
}
在这里为您快速提问。因此,我正在尝试对有多少列表项进行 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);
})
})
虽然这有一些问题:
- 首先,你为什么要跳到 1016?你不想要1001吗?
- 你这里只有两个电话。您打算如何检索记录 2001?
您可能想要做的是分页。也就是说,一直发送请求,直到没有记录返回。
项目总数
如果您要查找列表本身中的项目总数(而不是筛选视图中的项目数),您可以直接访问列表的 $count
属性。
"/_vti_bin/ListData.svc/MPIC/$count"
这将 return 项目计数。
分页(如果需要)
要使用 REST 模拟分页,您可以执行以下操作:
- 使用
$skip=n
参数根据$orderby
参数跳过前n
个条目 - 根据
$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);
}
});
}