In this article lets see how to create, read, rename OOTB Folders in a SharePoint library programmatically using JQuery and SPServices
1. To create a Folder using SPServices,
function CreateFolder(folderName) {
$().SPServices({
operation: "UpdateListItems",
async: false,
listName: "Library Name",
updates: "<Batch OnError='Continue' PreCalc='TRUE' ListVersion='0' >" +
"<Method ID='1' Cmd='New'>" +
"<Field Name='FSObjType'>1</Field>" +
"<Field Name='BaseName'>" + folderName + "</Field>" +
"</Method>" +
"</Batch>",
completefunc: function (xData, Status) {
console.log("Folder Created Successfully…");
}
});
}
To create subfolder, the folderName value would be “ParentFolder/ChildFolder”.
2. To read the content inside the folder,
function ReadFolder(folderName) {
$().SPServices({
operation: "GetListItems",
async: false,
listName: "Library Name",
CAMLViewFields: "<ViewFields Properties='True' />",
CAMLQuery: "<Query><Where><Contains><FieldRef Name='FileRef' /><Value Type='Text'>" + folderName + "</Value></Contains></Where></Query>",
CAMLQueryOptions: "<QueryOptions><Folder>" + folderName + "</Folder></QueryOptions>",
completefunc: function (xData, Status) {
$(xData.responseXML).SPFilterNode('z:row').each(function () {
itemID = $(this).attr("ows_ID");
//Extract other fields as per the requirement
});
}
});
}
If the content is inside the subfolder, then we need alter the above ReadFolder(folderName) function little bit
function ReadSubFolder(folderName, subfolder) {
var fullFolderName = _spPageContextInfo.webServerRelativeUrl + "/Shared Document/" + folderName;
$().SPServices({
operation: "GetListItems",
async: false,
listName: "Shared Document",
CAMLViewFields: "<ViewFields Properties='True' />",
CAMLQuery: "<Query><Where><Contains><FieldRef Name='FileRef' /><Value Type='Text'>" + folderName + "</Value></Contains></Where></Query>",
CAMLQueryOptions: "<QueryOptions><Folder>" + fullFolderName + "</Folder></QueryOptions>",
completefunc: function (xData, Status) {
$(xData.responseXML).SPFilterNode('z:row').each(function () {
itemID = $(this).attr("ows_ID");
var subFolderName = $(this).attr("ows_FileLeafRef").split(";#")[1];
if (subFolderName == subfolder) {
//use the same SPService in some other function and pass subfolder value
}
//Extact other fields as per your requirement
});
}
});
}
3. To rename the specific folder,
function RenameFolder(oldFolderName, newFolderName) {
$().SPServices({
operation: "GetListItems",
async: false,
listName: 'Library Name',
CAMLViewFields: "<ViewFields Properties='True' />",
CAMLQuery: "<Query><Where><Eq><FieldRef Name='FSObjType' /><Value Type='Integer'>1</Value></Eq></Where></Query>",
CAMLQueryOptions: "<QueryOptions><IncludeMandatoryColumns>FALSE</IncludeMandatoryColumns></QueryOptions>",
completefunc: function (xData, Status) {
$(xData.responseXML).SPFilterNode('z:row').each(function () {
var existingFolderName = $(this).attr("ows_FileLeafRef").split(";#")[1];
if (existingFolderName == oldFolderName) {
var Folder_ID = $(this).attr("ows_ID");
$().SPServices({
operation: "UpdateListItems",
async: false,
batchCmd: "Update",
listName: 'Library Name',
valuepairs: [["Title", newFolderName], ["BaseName", newFolderName]],
ID: Folder_ID,
completefunc: function (xData, Status) {
console.log("Folder Name Updated Successfully...");
}
});
}
});
}
});
}
I would prefer JSOM to delete the folder, because it is an easy way to delete.
function DeleteFolder(folderName) {
clientContext = new SP.ClientContext.get_current();
oWebsite = clientContext.get_web();
clientContext.load(oWebsite);
clientContext.executeQueryAsync(function () {
folderUrl = oWebsite.get_serverRelativeUrl() + "/Library Name/" + folderName;
this.folderToDelete = oWebsite.getFolderByServerRelativeUrl(folderUrl);
this.folderToDelete.deleteObject();
clientContext.executeQueryAsync(
Function.createDelegate(this, successHandler),
Function.createDelegate(this, errorHandler)
);
}, errorHandler);
function successHandler() {
console.log('Folder Deleted Successfully!!!');
}
function errorHandler() {
console.log('Error in deleting the folder');
}
}
SP.SOD.executeFunc("sp.js", 'SP.ClientContext', DeleteFolder('foldername'));
To delete the subfolder, we need to pass the folderName parameter along with the parent folder name delimited by ‘/’.
Happy Coding
Ahamed
Leave a comment