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>

Original thread

问题出在我对整个事情的运作方式+时区的理解上 我不得不写一个分页查询,例如:

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 中传递。