#javascript #rest #sharepoint #sharepoint-2010
#javascript #rest #sharepoint #sharepoint-2010
Вопрос:
Например, у меня есть вызов списка «список покупок», в нем 2 столбца. 1-й тип столбца — люди или группы (допускается несколько человек), имя столбца — «Клиенты». 2-й тип столбца — string.
Я могу использовать 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 и запрос post правильно отправлен, поскольку я успешно добавил новые элементы в тот же список без заполнения столбца Customers.
Может кто-нибудь, пожалуйста, посоветуйте мне, какой правильный формат для публикации содержимого в SharePoint 2010 REST API с несколькими пользовательскими столбцами.
Ответ №1:
В случае интерфейса SharePoint 2010 REST правильная полезная нагрузка для многозначного пользовательского поля должна выглядеть следующим образом:
'<MultiUserFieldName>': [
{
__metadata: {
"uri": "<WebUrl>/_vti_bin/listdata.svc/UserInformationList(<UserId>)"
}
}
]
где
MultiUserFieldName
— имя поля пользователяWebUrl
— абсолютный веб-URLUserId
— идентификатор пользователя
Пример 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 ")"
}
}
});
}
Комментарии:
1. Отлично работает, большое спасибо за это. На самом деле я целый день искал этот ответ в Google.