【问题标题】:SharePoint 2010 REST API, Post Content to a list that contains "USERS" ColumnSharePoint 2010 REST API,将内容发布到包含“用户”列的列表
【发布时间】:2016-10-13 13:40:03
【问题描述】:

例如,我有一个名为“购物清单”的列表,它有 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 对象已被字符串化并且发布请求已正确发送,因为我成功地将新项目添加到同一列表中而无需填写客户列。

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

【问题讨论】:

    标签: javascript rest sharepoint sharepoint-2010


    【解决方案1】:

    对于 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 + ")"
                }
            } 
        });
    }
    

    【讨论】:

    • 效果很好,非常感谢。实际上,我已经为这个答案搜索了一整天。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2015-12-20
    相关资源
    最近更新 更多