user3476088
user3476088

Reputation: 85

How to Get AllowedContentTypes of a document set in sharepoint JSOM

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

Answers (1)

Vadim Gremyachev
Vadim Gremyachev

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

Related Questions