SharePoint 2010 REST API,将内容发布到包含" USERS"列

时间:2016-10-13 13:40:04

标签: javascript rest sharepoint sharepoint-2010

例如,我有一个列表调用"购物清单",它有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的正确格式。

1 个答案:

答案 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 + ")"
            }
        } 
    });
}