我有一个基本的sharepoint列表,其中包含people字段,现在我正在尝试使用rest api添加新的列表项并尝试将person字段设置为我的别名,但它不起作用并且让我低于错误。看起来我的用户数据传递方式存在问题,但我无法在线找到任何帮助。
你们可以帮助正确的方式来打电话,非常感谢任何帮助。
我的代码----------
function runAjax(){ var d = JSON.stringify({"__metadata":{"type":"SP.Data.RepositoryItem"},"Owners":"-1;#v-mynme@microsoft.com"});
jQuery.ajax({
url: "https://microsoft.sharepoint.com/sites/mysite/docstore/_api/web/lists/GetByTitle('Repository')/items(1580) ",
type: "POST",
headers: {
"accept": "application/json;odata=verbose",
"content-type": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"X-HTTP-Method": "MERGE",
"If-Match": "*"
},
data:d,
success: function (_a) {
console.log(JSON.stringify(_a));
},
error: function (_e) {
console.error(JSON.stringify(_e));
}
});}runAjax();
error I am getting is
更新失败{“readyState”:4,“responseText”:“{\”error \“:{\”code \“:\” - 1,Microsoft.SharePoint.Client.InvalidClientQueryException \“,\”message \ “:{\”lang \“:\”en-US \“,\”value \“:\”尝试读取导航属性的值时,找到了具有非空值的'PrimitiveValue'节点;但是,期望'StartArray'节点,'StartObject'节点或具有空值的'PrimitiveValue'节点。\“}}}”,“status”:400,“statusText”:“错误请求”}
答案 0 :(得分:10)
假设使用以下函数使用SharePoint REST创建列表项:
function createListItem(webUrl,listName,itemProperties)
{
return $.ajax({
url: webUrl + "/_api/web/lists/getbytitle('" + listName + "')/items",
type: "POST",
processData: false,
contentType: "application/json;odata=verbose",
data: JSON.stringify(itemProperties),
headers: {
"Accept": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
}
});
}
用户字段值的格式:
'<user field name>' : <user id>
'<user field name>' : { 'results': [<array of user ids>] }
多个用户字段值
该示例演示了如何创建任务项并指定多个 - 值AssignedTo
字段:
//Create a Task item
var taskProperties = {
'__metadata' : { 'type': 'SP.Data.TasksListItem' },
'Title': 'Order approval',
'AssignedToId' : { 'results': [10] }
};
createListItem(_spPageContextInfo.webAbsoluteUrl,'Tasks',taskProperties)
.done(function(data)
{
console.log('Task has been created successfully');
})
.fail(
function(error){
console.log(JSON.stringify(error));
});
单用户字段值
该示例演示了如何创建任务项并指定单个 - 值AssignedTo
字段:
//Create a Task item
var taskProperties = {
'__metadata' : { 'type': 'SP.Data.TasksListItem' },
'Title': 'Order approval',
'AssignedToId' : 10
};
createListItem(_spPageContextInfo.webAbsoluteUrl,'Tasks',taskProperties)
.done(function(data)
{
console.log('Task has been created successfully');
})
.fail(
function(error){
console.log(JSON.stringify(error));
});
答案 1 :(得分:2)
您收到的错误消息可能令人困惑。在这种情况下,虽然人员/组字段被命名(SharePoint列表字段的显示或内部名称)“所有者”,但在使用REST API更新此字段时,它可能是其他内容。
{"__metadata":{"type":"SP.Data.RepositoryItem"},"Owners":"-1;#vmynme@microsoft.com"}
要找出确切的字段定义,请使用GET方法尝试以下URL并调查返回的XML值。
https://microsoft.sharepoint.com/sites/mysite/docstore/_api/web/lists/GetByTitle('Repository')/items(1580)
XML可能类似于以下内容
<m:properties>
...
<d:DateModified m:type="Edm.DateTime">2014-01-07T00:00:00Z</d:DateModified><d:OwnersById m:null="true" />
...
</m:properties>
您很可能会注意到“Owners”字段的名称是其他名称,例如“OwnersId”。您需要重新构建ajax帖子数据以使用确切的字段名称,并指定用户的 Id 属性,而不是用户的 LoginName 属性作为发布值。
答案 2 :(得分:1)
正确的方法应如下所示:(我相信它会在某个时候拯救某人)
var requestApprover = {
'__metadata' : { 'type': 'Collection(Edm.Int32)' },
'results': [10,20,30]
};
请记住字段名称的末尾应包含ID,并且类型应该是您要更新的字段类型,其中对人员或组(多个)而言是Collection(Edm.Int32)。
答案 3 :(得分:0)
您是否尝试过使用用户名的声明编码?这是我更新此类字段的方式。 例: 的 “i:0#.W | CONTOSO \克里斯”
答案 4 :(得分:0)
您需要使用此用户字段的语法执行POST调用:
如果字段具有名称&#34;所有者&#34;,则需要在REST调用正文中发送"OwnersId": 1
(将ID添加到列名称并传递UserID的值)。
如果您需要检查用户列的确切名称,请在浏览器中启动F12开发工具,启动网络捕获,然后在浏览器中输入您的URL。
"https://microsoft.sharepoint.com/sites/mysite/docstore/_api/web/lists/GetByTitle('Repository')/items(1580) "
在响应正文中,您将看到所有列的确切名称(在REST中使用)