SharePoint 2010 REST API、Post 内容到包含 "USERS" 列的列表

SharePoint 2010 REST API, Post Content to a list that contains "USERS" Column

例如我有一个列表调用 "shopping list",它有 2 列。 第一个列类型是人或组(允许多人),列名称是 "Customers"。 第二列类型是字符串。

我可以使用 ajax 到 post 信息到普通的 SharePoint 列表,但不能到这个购物列表。 我知道如何为单个用户列设置数据格式,但不为多个用户列设置格式,单个用户列类似于: 列名为Customer,数据格式应为:

item.CustomerID=1;

我尝试了很多方法来格式化数据,但还是一样。服务器 return 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 请求已正确发送,因为我成功地将新项目添加到同一列表而无需填写客户列。

谁能告诉我 post 内容到具有多个用户列的 SharePoint 2010 REST API 的正确格式是什么。

对于 SharePoint 2010 REST 接口,多值用户字段的正确负载应如下所示:

'<MultiUserFieldName>': [
    { 
        __metadata: { 
            "uri": "<WebUrl>/_vti_bin/listdata.svc/UserInformationList(<UserId>)"
        }
    }
]

哪里

  • MultiUserFieldName - 用户字段名称
  • WebUrl - 绝对网络 url
  • 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 + ")"
            }
        } 
    });
}