Search code examples
sharepoint-clientobject

How to create folder and subfolder using client object model-Javascript


I have a custom list form, we need to create one folder in doc library with folder name equal to list item title.and then should immediately create 3 folders in that newly created folder. I could create top level folder after capturing list item title, but dont know how to create sub folders in this newly created folder. any inputs please?

Below shown code, works fine for creating top level folder. need to know, how to add three subfolders.

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


Solution

  • The following example demonstrates how to create a Folder (including nested) using 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);
    };
    

    Usage

    Assume the following folder hierarchy have to be created under Documents library:

    Archive
       |  
       2014
          |
          07
    

    then:

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