Here, I'll explain you in detail how to create SharePoint sub-site programmatically using custom Site Templates through JSOM and REST API.
Implementation Approach:
First, we need to identify Web Template Id for our custom template. programmatically. And then, we will a create sub-site using the Web Template Id.
Let's go through the code snippet, now. We have two functions in code snippet:
1. CreateSubsiteByTemplateName(title, description, webUrl, templateTitle)
- This function will create a sub-site by Template Name. First of all, it will find out the Template Id from Template Name, and then, will call another function to create the sub-site.
- Parameters Information:
1. title= name of sub-site which you want to create Ex: "subsite1"
2. description = description for sub-site
3. weburl = URL for sub-site Ex: "subsite1"
4. templateTitle= Name of custom template Ex: "Physicians"
2. CreateSubsiteByTemplateId(title, description, webUrl, templateId)
- This function will create a sub-site by Template Id.
-
Parameters Information:
1. title= name of sub-site which you want to create Ex: "subsite1"
2. description = description for sub-site.
3. weburl = URL for sub-site Ex: "subsite1"
4. templateId= Id of custom template Ex: "{D5729655-B3D8-4DED-B5E9-3EE09934FC80}#Physicians"
Code Snippet 1:
function CreateSubsiteByTemplateName(title, description, webUrl, templateTitle) {
var context = new SP.ClientContext.get_current();
var web = context.get_web();
context.load(web);
var webTemplates = web.getAvailableWebTemplates(1033, false);
context.load(webTemplates);
context.executeQueryAsync(function () {
var enumerator = webTemplates.getEnumerator();
var templateId = "STS#0";
while (enumerator.moveNext()) {
var webTemplate = enumerator.get_current();
var webTitle = webTemplate.get_title();
if (webTitle == templateTitle) {
templateId = webTemplate.get_name();
break;
}
}
CreateSubsiteByTemplateId(title, description, webUrl, templateId);
},
function (sender, args) {
alert(args.get_message())
}
);
}
Code Snippet 2:
function CreateSubsiteByTemplateId(title, description, webUrl, templateId) {
var restAPIURL = "/_api/web/webinfos/add";
var newSiteData = JSON.stringify(
{
'parameters': {
'__metadata': {
'type': 'SP.WebInfoCreationInformation'
},
'Url': webUrl,
'Description': 'Subsite created from REST API',
'Title': title,
'Language': 1033,
'WebTemplate': templateId,
'UseUniquePermissions': true
}
});
$.ajax
({
url: restAPIURL,
type: "POST",
async: false,
data: newSiteData,
headers: {
"accept": "application/json;odata=verbose",
"content-type": "application/json;odata=verbose",
"X-RequestDigest": $('#__REQUESTDIGEST').val()
},
success: function (data) {
console.log('site created');
},
error: function (data) {
console.log('Error creating site');
}
});
}