SharePoint CAML + REST + 分页问题
SharePoint CAML + REST + Paging issue
我想我发现了另一个 SP 错误...但也许我做错了什么。
我有这个 POST 请求:
https://dmsdev/coll/f7c592adcb4c4e5996c2de00d444a94c/_api/Web/Lists/GetByTitle('1')/GetItems?$expand=ContentType&$select=Id,SonarDocId,ContentTypeId,EncodedAbsURL,Modified,ContentType/Name
有正文:
{"query":{"ViewXml":"<View><Query><OrderBy><FieldRef Name='Modified'/></OrderBy></Query><RowLimit>50</RowLimit></View>","ListItemCollectionPosition":{"PagingInfo":"Paged=TRUE&p_Modified=2017-08-10T07:25:28"}}}
如您所见,我使用 ORDER BY Modified 列执行 CAML 查询,我想从具有某个修改日期的项目之后的项目开始获取项目,但看起来这不起作用...我的意思是类似的请求在其他 SP 环境上工作,而在另一个 env 上它不工作......它在通过修改订购后从第一个开始接受所有项目......我不知道出了什么问题:/
您可以查看我的示例测试脚本。
<script type="text/javascript">
function restCallwithCaml(listName, caml,PID) {
/// get the site url
var siteUrl = _spPageContextInfo.siteAbsoluteUrl;
/// set request data
var data = {
"query": {
"__metadata":
{ "type": "SP.CamlQuery" },
"ViewXml": caml,
"ListItemCollectionPosition": {
"PagingInfo": "Paged=TRUE&p_ID=" + PID
}
}
};
/// make an ajax call
return $.ajax({
url: siteUrl + "/_api/web/lists/GetByTitle('" + listName + "')/GetItems",
method: "POST",
data: JSON.stringify(data),
headers: {
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
'content-type': 'application/json;odata=verbose',
'accept': 'application/json;odata=verbose'
}
});
}
function GetItemsPaging() {
var pageLimit = 2;
var pageNumber = 0;
var caml = "<View><Query><Where><Geq><FieldRef Name='ID'/><Value Type='Number'>1</Value></Geq></Where></Query><RowLimit>" + pageLimit + "</RowLimit></View>";
var listName = "ChildB";
restCallwithCaml(listName, caml, pageNumber).done(function (data) {
if (data.d.results.length == pageLimit) {
pageNumber++;
//add to array or display
var PID=data.d.results[data.d.results.length - 1].Id;
alert(PID);
restCallwithCaml(listName, caml, PID).done(function (data) {
//add to array or display
alert(data.d.results[data.d.results.length - 1].Id);
})
}
});
}
</script>
问题出在我对整个事情的运作方式+时区的理解上
我不得不写一个分页查询,例如:
Paged=TRUE&p_ID=10&p_Modified=2018-12-14T18:52:00
所以我不得不从上一页的最后一项添加 p_Modified 参数...此外,此数据必须采用 UTC,因此例如我可以使用返回的时间执行 get 查询CAML
https://server/site/_api/web/RegionalSettings/TimeZone/localTimeToUTC(@date)?@date='2018-12-14T11:52:00'
并且此调用返回的日期应在 p_Modified 中传递。
我想我发现了另一个 SP 错误...但也许我做错了什么。 我有这个 POST 请求:
https://dmsdev/coll/f7c592adcb4c4e5996c2de00d444a94c/_api/Web/Lists/GetByTitle('1')/GetItems?$expand=ContentType&$select=Id,SonarDocId,ContentTypeId,EncodedAbsURL,Modified,ContentType/Name
有正文:
{"query":{"ViewXml":"<View><Query><OrderBy><FieldRef Name='Modified'/></OrderBy></Query><RowLimit>50</RowLimit></View>","ListItemCollectionPosition":{"PagingInfo":"Paged=TRUE&p_Modified=2017-08-10T07:25:28"}}}
如您所见,我使用 ORDER BY Modified 列执行 CAML 查询,我想从具有某个修改日期的项目之后的项目开始获取项目,但看起来这不起作用...我的意思是类似的请求在其他 SP 环境上工作,而在另一个 env 上它不工作......它在通过修改订购后从第一个开始接受所有项目......我不知道出了什么问题:/
您可以查看我的示例测试脚本。
<script type="text/javascript">
function restCallwithCaml(listName, caml,PID) {
/// get the site url
var siteUrl = _spPageContextInfo.siteAbsoluteUrl;
/// set request data
var data = {
"query": {
"__metadata":
{ "type": "SP.CamlQuery" },
"ViewXml": caml,
"ListItemCollectionPosition": {
"PagingInfo": "Paged=TRUE&p_ID=" + PID
}
}
};
/// make an ajax call
return $.ajax({
url: siteUrl + "/_api/web/lists/GetByTitle('" + listName + "')/GetItems",
method: "POST",
data: JSON.stringify(data),
headers: {
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
'content-type': 'application/json;odata=verbose',
'accept': 'application/json;odata=verbose'
}
});
}
function GetItemsPaging() {
var pageLimit = 2;
var pageNumber = 0;
var caml = "<View><Query><Where><Geq><FieldRef Name='ID'/><Value Type='Number'>1</Value></Geq></Where></Query><RowLimit>" + pageLimit + "</RowLimit></View>";
var listName = "ChildB";
restCallwithCaml(listName, caml, pageNumber).done(function (data) {
if (data.d.results.length == pageLimit) {
pageNumber++;
//add to array or display
var PID=data.d.results[data.d.results.length - 1].Id;
alert(PID);
restCallwithCaml(listName, caml, PID).done(function (data) {
//add to array or display
alert(data.d.results[data.d.results.length - 1].Id);
})
}
});
}
</script>
问题出在我对整个事情的运作方式+时区的理解上 我不得不写一个分页查询,例如:
Paged=TRUE&p_ID=10&p_Modified=2018-12-14T18:52:00
所以我不得不从上一页的最后一项添加 p_Modified 参数...此外,此数据必须采用 UTC,因此例如我可以使用返回的时间执行 get 查询CAML
https://server/site/_api/web/RegionalSettings/TimeZone/localTimeToUTC(@date)?@date='2018-12-14T11:52:00'
并且此调用返回的日期应在 p_Modified 中传递。