Odata Office 365 Sharepoint API$skip/$skiptoken功能
浏览Sharepoint API的文档(位于此处:),我试图找出如何选择文档块。我希望$skip可以工作,因为这意味着大多数OData功能都应该存在,但这不起作用。我也无法确定$skiptoken是否是有效的查询参数。它列在靠近底部的文档中(没有进一步的解释),但到目前为止,我无法从中得出正确的结果 如果有人知道$skip或$skiptoken或其他可用于获取分块响应的方法,那么解决此问题的帮助将非常有用Odata Office 365 Sharepoint API$skip/$skiptoken功能,odata,office365,Odata,Office365,浏览Sharepoint API的文档(位于此处:),我试图找出如何选择文档块。我希望$skip可以工作,因为这意味着大多数OData功能都应该存在,但这不起作用。我也无法确定$skiptoken是否是有效的查询参数。它列在靠近底部的文档中(没有进一步的解释),但到目前为止,我无法从中得出正确的结果 如果有人知道$skip或$skiptoken或其他可用于获取分块响应的方法,那么解决此问题的帮助将非常有用 编辑:为了澄清,像API_URL/文件?$orderby=URL和$top=5这样的东西可
编辑:为了澄清,像API_URL/文件?$orderby=URL和$top=5这样的东西可以工作,但像API_URL/文件?$orderby=URL和$skip=50这样的东西不行。但是,我刚刚在响应中发现了一个“next”URL,它似乎提供了服务器端分页支持。我将尝试从这里了解$skiptoken的用法。OData V4协议已指定(引用)以下内容: OData服务在构建下一个链接时可以使用保留的系统查询选项$skiptoken。它的内容是不透明的,特定于服务的,并且只能遵循URL查询部分的规则。 OData客户端在构造请求时不得使用系统查询选项$skiptoken 因此,将$skiptoken发布为查询选项的O365 SharePoint API的实现违反了协议,客户端应使用该查询选项排除查询集合中的前几个项。对于这种情况,客户端应该使用$skip。但从您附加的O365规范来看,$skip似乎没有实现
如果查询O365服务的实体集,并且响应负载包含下一个链接(响应JSON对象中的
@odata.nextLink
注释),则表示该服务具有实体集的服务器端分页。通常,下一个链接是包含$skiptoken查询选项的URL,如http://host/service/entityset?$skiptoken=n
客户端可用于获取下一页。当前,$skip
查询选项在SharePoint 2013/Online REST界面中不受支持。但您可以利用SharePoint2010REST界面,使用$skip
查询选项检索分页结果,例如:
https://contoso.sharepoint.com/_vti_bin/ListData.svc/Pages?$skip=2&$top=2
如何在SharePoint 2013/在线REST界面中使用$skiptoken
查询选项
格式:$skiptoken=Paged=TRUE&p\u ID=&$top=
示例
该示例演示如何从页面
库检索有限数量的项目(ID等于或大于2
的2个项目):
function getPagedItems(webUrl,listTitle,startItemId,itemsCount)
{
var endpointUrl = webUrl + "/_api/web/lists/getbytitle('" + listTitle + "')/items?$skiptoken=" + encodeURIComponent('Paged=TRUE&p_SortBehavior=0&p_ID=' + (startItemId-1) + '&$top=' + itemsCount);
return executeRequest(endpointUrl,'GET');
}
getPagedItems('https://contoso.sharepoint.com/','Pages',2,2)
.done(function(data){
if(data.d.results.length == 0){
console.log('Items not found');
return;
}
for(var i = 0; i < data.d.results.length; i++){
var item = data.d.results[i];
console.log(item.Title);
}
});
谢谢不幸的是,除了$skip之外,似乎还没有$search和$filter的实现。目前,该服务只支持使用$skiptoken和nextlink进行前向分页。众所周知,$skip功能在服务中还不可用。开发团队意识到了这一点。@MichaelMainer Microsoft,这一功能从未延续到2013年。实现分页的推荐方法是什么?使用_vti_bin/ListData.svc?事实证明,$filter是实现的,这与我前面所说的不同,但它所使用的许多函数都不是,并且只能在某些列上使用。然而,我不得不做这么多深入的文档挖掘和实验来弄清楚这一点,而不是用一个单一的、清晰的文档来展示这一点,这太糟糕了available@JohnPalmer,我现在才了解O365的SharePoint API。我不确定2013年的API。
function executeRequest(url,method,headers,payload)
{
if (typeof headers == 'undefined'){
headers = {};
}
headers["Accept"] = "application/json;odata=verbose";
if(method == "POST") {
headers["X-RequestDigest"] = $("#__REQUESTDIGEST").val();
}
var ajaxOptions =
{
url: url,
type: method,
contentType: "application/json;odata=verbose",
headers: headers
};
if(method == "POST") {
ajaxOptions.data = JSON.stringify(payload);
}
return $.ajax(ajaxOptions);
}