Sharepoint 2013 Retrieve Taxonomy Term Store via Javascript

This blog will show you how to retrieve term store, term group, term set and term via JavaScript

1. First, you need understand Managed Metadata Service, it used for storing metadata, and have the database in dependent, then all the site collection can reuse the data, such as site column(Metadata field), Metadata Navigation and search data. here is its construct:

Managed Metadata Service -> Term Stores -> Term Groups -> Term Sets -> Terms -> Term

2. Second, since you retrieve metadata via JS, so sharepoint need provide the relevant api, here are the JS file provided by sharepoint OOB file:

SP.Runtime.js, SP.js, SP.Taxonomy.js, then you must make sure load those js before you call the api(only sharepoint 2013 provide the api).

3. Implement content in detail

Note: I get the default term store directly, in default, sharepoint don‘t set it, so you have to set in Admin center, or the code will encounter issues.

here is the example to retrieve the metadata navigation and print out.

// JavaScript source code

<script>

_spBodyOnLoadFunctionNames.push('Start');


function Start(){
    var scriptbase = _spPageContextInfo.webServerRelativeUrl + "/_layouts/15/";

    $.getScript(scriptbase + "SP.Runtime.js",

    function () {

        $.getScript(scriptbase + "SP.js", function () {

            $.getScript(scriptbase + "SP.Taxonomy.js", function () {
                var termsList = "";
                context = SP.ClientContext.get_current();
                
                getTermStores();

                console.log("success");
            });

        });

    });
}

function getTermStores() {
 
    this.session = SP.Taxonomy.TaxonomySession.getTaxonomySession(context);
    //this.termStores = this.session.get_termStores();
    this.groups = session.getDefaultSiteCollectionTermStore().get_groups();
    context.load(this.groups);

    context.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
 
function onQuerySucceeded(sender, args){
    var groupList = "List: \n";
    var groupsEnum = groups.getEnumerator();
    while (groupsEnum.moveNext()) {
        var currentGroup = groupsEnum.get_current();
        var groupName = currentGroup.get_name();
        if(groupName == "Navigation"){
            this.termSets = currentGroup.get_termSets();

            context.load(this.termSets, 'Include(Name, Id, CustomProperties)');
 
            context.executeQueryAsync(Function.createDelegate(this, this.onTermSetsSucceeded), Function.createDelegate(this, this.onTermSetsFailed));
            
            groupList += groupName + "\n";
            console.log(groupList)
        }

        
    }
       
}

function onQueryFailed(sender, args){
 
    //failure loading termstores.
    console.log("failed to get groups");
}

function onTermSetsSucceeded(sender, args){
    var termSetEnum = this.termSets.getEnumerator();
 
    var termSetList = "Term Sets: \n"
 
    while(termSetEnum.moveNext()){
 
        var currentTermSet = termSetEnum.get_current();
 
        var termSetName = currentTermSet.get_name();
        if(termSetName == "NavTop"){
            this.terms = currentTermSet.get_terms();
            context.load(this.terms, 'Include(Name, Id, CustomProperties, LocalCustomProperties, TermsCount)');
            context.executeQueryAsync(Function.createDelegate(this, this.onTermsSucceeded), Function.createDelegate(this, this.onTermsFailed));           
           
        }
      
    }
 
   
}

function onTermSetsFailed(sender, args){

    alert("failed to get termsets");
}


function onTermsSucceeded(sender, args){

    var termsEnum = this.terms.getEnumerator();
 
    while (termsEnum.moveNext()) {
 
        var currentTerm = termsEnum.get_current();
 
        var termName = currentTerm.get_name();
 
        var termId = currentTerm.get_id();
        //currentTerm.get_objectData().get_properties()["CustomProperties"]["test"]
        var propertied = currentTerm.get_localCustomProperties();
        var groupValues = propertied.group != null ? propertied.group : "";
       
        console.log("propertied : " + propertied._Sys_Nav_HoverText + "\n" + propertied._Sys_Nav_SimpleLinkUrl + "\n" + groupValues);
 
        console.log(termName);
        //Check if term has child terms
 
        if (currentTerm.get_termsCount() > 0) {
 
            //Term has sub terms.
 
            recursiveTerms(currentTerm, 1);
 
        }
 

    }

}

function onTermsFailed(sender, args){

    alert("failed to get termsets");
}

 
function recursiveTerms(currentTerm, nestedLoop) {
 
    //Loop count for formatting purpose.
 
    var loop = nestedLoop + 1;
 
    //Get Term child terms
 
    var terms = currentTerm.get_terms();
 
    context.load(terms);
 
    context.executeQueryAsync(
 
    function () {
 
        var termsEnum = terms.getEnumerator();
 
        while (termsEnum.moveNext()) {
 
            var newCurrentTerm = termsEnum.get_current();
 
            var termName = newCurrentTerm.get_name();
 
            termId = newCurrentTerm.get_id();
 
            //Tab Out format.
            var loops= "";
            for (var i = 0; i < loop; i++) {
                //  termsList += "\t";
                loops +="\t"; 
 
            }
 
            console.log(loops + termName);
 
            //Check if term has child terms.
 
            if (currentTerm.get_termsCount() > 0) {
 
                //Term has sub terms.
 
                recursiveTerms(newCurrentTerm, loop);
 
            }
 
        }
 
    },
 
    function () {
        alert("fie");
        //failure to load terms
 
    });
 
}



</script>


The source link: https://cann0nf0dder.wordpress.com/2013/04/09/accessing-taxonomy-term-store-with-jsom/




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。