Reputation: 85
How to programatically get AllowedContentTypes property of a document set
On SERVER SIDE (C#) WE CAN get the CT as below
var ctIds = ds.ContentTypeTemplate.AllowedContentTypes;
//1
foreach (SPContentTypeId ctId in ctIds)
{
Console.WriteLine(ctId); //print Content Type Id
}
How to achieve the same in Javascript i was able to get the folder of the doc set what properties i need to use to get the AllowedContentTypes Property
Hi Vadim Thanks for your answer but i am getting the error "SP.DocumentSet.DocumentSetTemplate' is null or not an object"
<script type="text/javascript" src="/_layouts/15/sp.runtime.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.js"></script>
<script type="text/javascript" src="/_layouts/15/sp.documentmanagement.js"></script>
<script type="text/javascript">
// ExecuteOrDelayUntilScriptLoaded(getCT, "sp.js");
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function() {
SP.SOD.executeFunc('sp.documentmanagement.js', 'SP.DocumentSet.DocumentSet', function() {
var docSetUrl = getQueryStringValue("RootFolder"); //<- Doc Set Url
getDocumentSetContentTypes(docSetUrl,
function(ctIds)
{
//print content type ids
ctIds.get_data().forEach(function(ctId){
console.log(ctId.get_stringValue());
});
},
logError);
});
});
function logError(sender,args){
console.log(args.get_message());
}
function getFolder(url,success,error)
{
var ctx = SP.ClientContext.get_current();
var folder = ctx.get_web().getFolderByServerRelativeUrl(url);
ctx.load(folder,'ListItemAllFields');
ctx.executeQueryAsync(
function(){
success(folder);
},
error);
}
function getDocumentSetContentTypes(folderUrl,success,error)
{
getFolder(folderUrl,
function(folder)
{
var folderItem = folder.get_listItemAllFields();
var ct = folderItem.get_contentType();
var ctx = folder.get_context();
var template = SP.DocumentSet.DocumentSetTemplate.getDocumentSetTemplate(ctx,ct);
var ctIds = template.get_allowedContentTypes();
ctx.load(ctIds);
ctx.executeQueryAsync(
function(){
success(ctIds);
},
error);
},
error);
}
function getQueryStringValue (key) {
return unescape(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + escape(key).replace
(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));
}
</script>
Upvotes: 0
Views: 1432
Reputation: 59358
SP.DocumentSet.DocumentSetTemplate.getDocumentSetTemplate
function from sp.documentmanagement.js
is used for getting content type template and get_allowedContentTypes
property returns allowed content types, for example:
var template = SP.DocumentSet.DocumentSetTemplate.getDocumentSetTemplate(ctx,ct);
var ctIds = template.get_allowedContentTypes();
The following example demonstrates how to retrieve allowed content types of Document Set using JSOM
function getFolder(url,success,error)
{
var ctx = SP.ClientContext.get_current();
var folder = ctx.get_web().getFolderByServerRelativeUrl(url);
ctx.load(folder,'ListItemAllFields');
ctx.executeQueryAsync(
function(){
success(folder);
},
error);
}
function getDocumentSetContentTypes(folderUrl,success,error)
{
getFolder(folderUrl,
function(folder)
{
var folderItem = folder.get_listItemAllFields();
var ct = folderItem.get_contentType();
var ctx = folder.get_context();
var template = SP.DocumentSet.DocumentSetTemplate.getDocumentSetTemplate(ctx,ct);
var ctIds = template.get_allowedContentTypes();
ctx.load(ctIds);
ctx.executeQueryAsync(
function(){
success(ctIds);
},
error);
},
error);
}
Usage
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', function() {
SP.SOD.executeFunc('sp.documentmanagement.js', 'SP.DocumentSet.DocumentSet', function() {
var docSetUrl = '/Documents/2013'; //<- Doc Set Url
getDocumentSetContentTypes(docSetUrl,
function(ctIds)
{
//print content type ids
ctIds.get_data().forEach(function(ctId){
console.log(ctId.get_stringValue());
});
},
logError);
});
});
function logError(sender,args){
console.log(args.get_message());
}
Upvotes: 1