Как создать папку и подпапку с помощью клиентской объектной модели-Javascript

У меня есть настраиваемая форма списка, нам нужно создать одну папку в библиотеке документов с именем папки, равным заголовку элемента списка, а затем следует немедленно создать 3 папки в этой вновь созданной папке. Я мог бы создать папку верхнего уровня после захвата заголовка элемента списка, но не знаю, как создавать подпапки в этой вновь созданной папке. любые входные данные, пожалуйста?

Показанный ниже код отлично работает для создания папки верхнего уровня. нужно знать, как добавить три подпапки.

function retrieveWebSite() {
    var clientContext;
    var oWebsite;
    var oList;
    var itemCreateInfo;

    clientContext = new SP.ClientContext.get_current();
    oWebsite = clientContext.get_web();
    oList = oWebsite.get_lists().getByTitle("Docs");

    itemCreateInfo = new SP.ListItemCreationInformation();
    itemCreateInfo.set_underlyingObjectType(SP.FileSystemObjectType.folder);
    itemCreateInfo.set_leafName("Top Folder");
    this.oListItem = oList.addItem(itemCreateInfo);
    this.oListItem.update();

    clientContext.load(this.oListItem);
    clientContext.executeQueryAsync(
        Function.createDelegate(this, successHandler),
        Function.createDelegate(this, errorHandler)
    );

    function successHandler() {
       alert('success');
    }

    function errorHandler() {
      alert('fail');
    }
}


person Rohit    schedule 06.01.2015    source источник


Ответы (1)


В следующем примере показано, как создать папку (в том числе вложенную) с помощью SharePoint JSOM:

var createFolder = function(listTitle, folderUrl,success,error)
{
    var ctx = SP.ClientContext.get_current();
    var list = ctx.get_web().get_lists().getByTitle(listTitle);
    var createFolderInternal = function(parentFolder,folderUrl,success,error)
    {
       var ctx = parentFolder.get_context();
       var folderNames = folderUrl.split('/');
       var folderName = folderNames[0];
       var curFolder = parentFolder.get_folders().add(folderName);
       ctx.load(curFolder);
       ctx.executeQueryAsync(
         function () {
            if (folderNames.length > 1)
            {
               var subFolderUrl = folderNames.slice(1,folderNames.length).join('/');
               createFolderInternal(curFolder, subFolderUrl,success,error);
            }  
            success(curFolder);
         }, 
         error);
    };
    createFolderInternal(list.get_rootFolder(), folderUrl,success,error);
};

Использование

Предположим, что в библиотеке документов необходимо создать следующую иерархию папок:

Archive
   |  
   2014
      |
      07

тогда:

createFolder('Documents','Archive/2014/07',
  function(folder){
      console.log(String.format("Folder '{0}' has been created",folder.get_name()));
  },
  function(sender,args){
      console.log(args.get_message());
  });
person Vadim Gremyachev    schedule 11.01.2015
comment
Работает как шарм. Слава! Я добавил еще перед успехом (curFolder); вызов в строке 19, поэтому он вызывается только после проверки/создания полного пути. - person Anders Bjerin; 21.08.2020