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 + ")"
}
}
});
}
例如我有一个列表调用 "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
- 绝对网络 urlUserId
- 用户 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 + ")"
}
}
});
}