Получить все списки корневой папки с SP.JS
Мне нужно получить все корневые папки списков в текущей сети, с помощью объектной модели клиента shrepoint.
Я пытаюсь использовать этот код, но у меня есть ошибка
var context = SP.ClientContext.get_current();
var lists = context.get_web().get_lists();
context.load(lists);
context.executeQueryAsync(function (sender, args) {
var enumerator = lists.getEnumerator();
while (enumerator.moveNext()) {
var list = enumerator.get_current();
var rootFolder = list.get_rootFolder();
context.load(rootFolder, 'ServerRelativeUrl');
context.executeQueryAsync(
function (sender, args) {
//error
var url = rootFolder.get_serverRelativeUrl();
console.log(url);
},
function (sender, args) {
console.log('error');
});
}
},
function (sender, args) {
console.log('error');
});
Спасибо
1 ответ:
Эта ошибка возникает из-за списка .Свойство RootFolder не было инициализировано, так как оно не было запрошено.
Для загрузки
List.RootFolder
Замените строку:context.load(lists);
С этим:
context.load(lists,'Include(RootFolder)');
Но указанный пример содержит и другие недостатки:
- С СП.Метод clientcontext.executeQueryAsync метод является асинхронным и он используется в цикле, он будет не печатать все папки, как вы ожидаете это к
- в этом нет необходимости. выполните последующий запрос для
ServerRelativeUrl
свойствоНиже показана исправленная версия, которая печатает корневые папки для всех списков:
var context = SP.ClientContext.get_current(); var lists = context.get_web().get_lists(); context.load(lists,'Include(RootFolder)'); context.executeQueryAsync(function () { var enumerator = lists.getEnumerator(); while (enumerator.moveNext()) { var list = enumerator.get_current(); var rootFolder = list.get_rootFolder(); var url = rootFolder.get_serverRelativeUrl(); console.log(url); } }, function (sender, args) { console.log('error'); });