例如,我有一个名为"shopping list"的列表,它有2列。第一列类型为"人或组(允许多人)",列名为"客户"。第二列类型为字符串。
我可以使用ajax将信息发布到正常的SharePoint列表,但不是这个购物列表。我知道如何为单用户列格式化数据,但不为多用户列,单用户列是这样的:列名为Customer,数据格式应为:
item.CustomerID=1;
我尝试了很多方法来格式化数据,但它仍然是相同的。服务器返回500,没有任何有用的信息。下面的格式示例:
item.Customers = [1,2,3] //1,2,3 is the user id in SharePoint.
item.CustomersID=[1,2,3] //1,2,3 is the user id in SharePoint.
item.Customers=[{UserId:1},{UserId:2},{UserId:3}]
我可以确认javascript对象已被字符串化,并且post请求已正确发送,因为我成功地将新项目添加到同一列表中,而无需填写Customers列。
有人能告诉我什么是正确的格式发布内容到SharePoint 2010 REST API与多个用户列。
在SharePoint 2010 REST接口的情况下,多值用户字段的正确有效载荷应该如下所示:
'<MultiUserFieldName>': [
{
__metadata: {
"uri": "<WebUrl>/_vti_bin/listdata.svc/UserInformationList(<UserId>)"
}
}
]
,
-
MultiUserFieldName
-用户字段名 -
WebUrl
-绝对网址 -
UserId
-用户Id
JavaScript例
var webUrl = "http://contoso.intranet.com";
var listName = "ShoppingCart";
var properties = {
'Title': 'Item #123',
'Customers': createPayloadForMultiUserField(webUrl,[1,2,3])
};
createListItem(webUrl,listName,properties)
.done(function(data){
console.log('Item ' + data.d.Title + ' has been created');
})
.fail(function(error){
console.log(JSON.stringify(error));
});
,
function createListItem(webUrl,listName, itemProperties) {
return $.ajax({
url: webUrl + "/_vti_bin/listdata.svc/" + listName,
type: "POST",
processData: false,
contentType: "application/json;odata=verbose",
data: JSON.stringify(itemProperties),
headers: {
"Accept": "application/json;odata=verbose"
}
});
}
function createPayloadForMultiUserField(webUrl,userIds)
{
return userIds.map(function(id){
return {
__metadata: {
"uri": webUrl + "/_vti_bin/listdata.svc/UserInformationList(" + id + ")"
}
}
});
}