0

How do I get a flattened version of child terms, or just the last level/tier of terms. Ex: TermSet --> Term --> ChildTerm How do I grab the child term in an SPFX webpart? I can grab the Terms under the termset, but I cant go any deeper.

Danny
  • 77
  • 1
  • 8

1 Answers1

0

Tested code based on this thread(test the code to get term of current site).

private getTermsetWithChildren(termStoreName: string, termsetId: string) {
  return new Promise((resolve, reject) => {
   //const taxonomy = new Session(siteCollectionURL);
   const store: any = taxonomy.termStores.getByName(termStoreName);
   store.getTermSetById(termsetId).terms.select('Name', 'Id', 'Parent').get()
   .then((data: any[]) => {
    let result = [];
    // build termset levels
    do {
     for (let index = 0; index < data.length; index++) {
      let currTerm = data[index];
      if (currTerm.Parent) {
       let parentGuid = currTerm.Parent.Id;
       insertChildInParent(result, parentGuid, currTerm, index);
       index = index - 1;
      } else {
       data.splice(index, 1);
       index = index - 1;
       result.push(currTerm);
      }
     }
    } while (data.length !== 0);
    // recursive insert term in parent and delete it from start data array with index
    function insertChildInParent(searchArray, parentGuid, currTerm, orgIndex) {
     searchArray.forEach(parentItem => {
      if (parentItem.Id == parentGuid) {
       if (parentItem.children) {
        parentItem.children.push(currTerm);
       } else {
        parentItem.children = [];
        parentItem.children.push(currTerm);
       }
       data.splice(orgIndex, 1);
      } else if (parentItem.children) {
       // recursive is recursive is recursive
       insertChildInParent(parentItem.children, parentGuid, currTerm, orgIndex);
      }
     });
    }
    resolve(result);
   }).catch(fail => {
    console.warn(fail);
    reject(fail);
   });
  });
 }

Call the function.

this.getTermsetWithChildren(      
      'Taxonomy_hAIlyuIrZSNizRU+uUbanA==',
      '70719569-ae34-4f24-81b9-0629d68c05aa'
    ).then(data => {
      console.log(data);
    });
Lee
  • 5,305
  • 1
  • 6
  • 12