我正在尝试使用Rest Apis检索两个更改令牌之间的特定列表的项目列表。我正在使用chrome rest api client。
我的休息端点如下所示 - >
Method: POST
Headers:
Authorization: bearer <Access token value>
Accept: application/json; odata=verbose
Content-Type: application/json; odata=verbose
Body:
metadata type:'SP.ChangeQuery',
Add: 'true',
Update: 'true',
Item: 'true',
ChangeTokenStart:'start token string value'
我收到以下错误:
value: "An unexpected 'PrimitiveValue' node was found when reading from the JSON reader. A 'StartObject' node was expected."
问题:
1)我们是否需要在enter code here
与ChangeTokenStart和ChangeTokenEnd方法结合使用其他方法而不是getChanges?
2)实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
在哪里可以获得要发送的{ChangeTime}和{ChangeNumber}的值?我收到通知(从订阅到SP列表),发生了以下更改:
"value":[
{
"subscriptionId":"956f4000-93ba-4e36-baf5-310d7e99b11d",
"clientState":"TwoWayFunctionApp",
"expirationDateTime":"2017-06-01T16:17:57.000Z",
"resource":"fce41000-8cc9-46b9-a534-e9a3dce84739",
"tenantId":"fabef000-b0bb-4156-b901-410a36ad78b0",
"siteUrl":"/sites/Development",
"webId":"302c4000-e688-408a-94b7-476f17e6fbd5"
}
]}
(假设订阅ID是要发送的{Guid})
如果您将ChangeTokenStart和ChangeTokenEnd保留为null,您会得到哪些更改?例如所有变化都发生了变化?!
答案 1 :(得分:0)
这就是你应该如何制作帖子数据
{'query':{'__ metaadata':{'type':'SP.ChangeQuery'},'Web':true,'Update':true,'Add':true,'ChangeTokenStart':{'__ metadata ':{'type':'SP.ChangeToken'},'StringValue':'blabla'}}}
如果你查看 ChangeQuery的属性,你会发现“ChangeTokenStart”和“ChangeTokenEnd”,这两个都是复杂的对象,所以这就是你发送查询的方式。
希望这有帮助。
答案 2 :(得分:0)
SharePoint REST端点期望以下列格式提供Change Token
值:
"ChangeTokenProperty": { "StringValue" : "Version;Scope;Guid;ChangeTime;ChangeNumber" }
假设以下函数用于从更改日志中获取更改:
function getChanges(webUrl,queryOptions,success,failure)
{
var changeQueryPayload = {
'query':{
'__metadata': { 'type': 'SP.ChangeQuery' },
}
};
for(var key in queryOptions) {
changeQueryPayload['query'][key] = queryOptions[key];
}
$.ajax({
type: "POST",
headers: {
"accept": "application/json;odata=verbose",
"content-type": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
},
data: JSON.stringify(changeQueryPayload),
url: webUrl + '/_api/web/getchanges',
success: success,
failure: failure
});
}
然后,以下示例演示了如何指定ChangeToken值:
var queryOptions = {"Update":true,"Web": true, "ChangeTokenStart": { "StringValue" : "1;2;6dfea1bb-6a93-4d49-a8cd-7e797716a8e5;635427410784300000;23922265" }};
getChanges(_spPageContextInfo.webAbsoluteUrl,queryOptions,
function(result){
var changes = result.d.results;
//print info
console.log('Found ' + changes.length + ' items');
},
function(error){
console.log(JSON.stringify(error));
});
根据this post更改令牌的格式如下:
{Version};{Scope};{Guid};{ChangeTime};{ChangeNumber}