Получить все списки корневой папки с 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 3

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');
});