Невозможно создать listitem через остальные API в sharepoint2013 с правами на вклад
У меня есть проблема с нашим Travel Tool, основанным на SharePoint 2013.
Этот инструмент состоит из разных типов контента - все в их конкретных списках (запросы на поездки, поездки на поезде, рейсы и т. Д.). Есть две основные группы, которые используют этот инструмент: сотрудники (вклад) и администраторский персонал (полный контроль). На homepage.aspx у нас есть ScriptEditorWebpart с пользовательской кнопкой HomePageNewItem и ListView запросов на поездки. Когда пользователь нажимает на пользовательскую кнопку, через API REST создается новый элемент ListItem и отображается файл EditForm.aspx созданного в настоящее время элемента ListItem.
В чем проблема?
Это прекрасно работает для администратора (полный контроль). Когда сотрудники пытаются создать ListItem, появляется следующее сообщение об ошибке: HRESULT: 0x80131904 (возвращение из REST API). То же самое происходит, когда сотрудники посещают некоторые списки. ListView не отображается, но есть то же сообщение об ошибке.
Некоторая дополнительная информация
- База данных SQL имеет достаточно памяти на всех разделах
- Когда сотрудник использует стандартную кнопку "Новый элемент", все работает просто отлично (кроме ListView)
- Когда сотрудник переводится в группу администраторов, все работает просто отлично
- Все списки имеют правильные права доступа
- Это работало неделю назад, и в коде не было никаких изменений, только некоторые настройки сайтов, например homepage.aspx)
Дополнительные советы
Может ли это быть как-то связано с определением веб-сайта?
Функция, которая создает элемент списка
function createListItem(listName, newItem, success) {
var itemType = getItemTypeForListName(listName);
newItem.__metadata = { "type": itemType }
$.ajax({
url: _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items",
type: "POST",
contentType: "application/json;odata=verbose",
data: JSON.stringify(newItem),
headers: {
"Accept": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val()
},
success: function (data) {
success(data);
},
error: function (data) {
var errorMessage = JSON.parse(data.responseText).error.message.value;
var statusId;
statusId = SP.UI.Status.addStatus("Hoppla:", errorMessage);
SP.UI.Status.setStatusPriColor(statusId, "Blue");
setTimeout(function () { SP.UI.Status.removeStatus(statusId); },10000);
}
});
}
function getItemTypeForListName(name) {
return "SP.Data." + name.charAt(0).toUpperCase() + name.split(" ").join("").slice(1) + "ListItem";
}
Заранее спасибо Бенджамин
1 ответ
Проверьте количество элементов в списке. Если в списке более 5000 элементов (иначе, пороговое ограничение), можно получить аналогичные ошибки, используя REST, или это может быть целый ряд возможных проблем. Чтобы узнать точную причину, попробуйте выполнить одно из следующих действий:
- Проверьте журналы ULS для более подробного сообщения об ошибке.
- Попробуйте включить дросселирование для списка. Используйте PowerShell, чтобы установить свойство EnableThrottling для
SPList
в$false
, - Иногда могут возникнуть другие проблемы регулирования. Попробуйте увеличить ограничения регулирования для веб-приложения. как увеличить максимальное количество столбцов поиска для списка. Перейдите в Central Admin -> Веб-приложения -> Регулирование ресурсов и увеличьте пределы регулирования.
- Удалите некоторые поля для тестирования. Попробуйте поэкспериментировать с удалением некоторых полей, особенно поиска, полей пользователя или даты.
- Измените свой запрос REST и возьмите только один или несколько элементов из списка.
Попробуйте что-то вроде этого:
"/_api/web/lists/getbytitle('" + listName + "')/items?$top=5"
или же
"/_api/web/lists/getbytitle('" + listName + "')/items(1)",