例如,我有一个列表调用"购物清单",它有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对象已经是stringify并且正确发送了帖子请求,因为我成功地将新项目添加到同一列表而没有填写客户列。
有人可以告诉我将内容发布到具有多个用户列的SharePoint 2010 REST API的正确格式。
答案 0 :(得分:2)
对于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 + ")"
}
}
});
}