0

我如何获得子术语的扁平化版本,或者只是最后一级/层的术语。例如:TermSet --> Term --> ChildTerm 如何在 SPFX webpart 中获取子术语?我可以抓住条款集下的条款,但我不能再深入了。

4

1 回答 1

0

基于此线程的测试代码(测试代码以获取当前站点的术语)。

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);
   });
  });
 }

调用函数。

this.getTermsetWithChildren(      
      'Taxonomy_hAIlyuIrZSNizRU+uUbanA==',
      '70719569-ae34-4f24-81b9-0629d68c05aa'
    ).then(data => {
      console.log(data);
    });
于 2019-12-23T01:50:52.883 回答