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



例如,我有一个名为"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 + ")"
            }
        } 
    });
}

相关内容

最新更新