如何检索多值分类法字段从术语存储SharePoint在线

How to retrieve multi-value Taxonomy Field from term store SharePoint online

本文关键字:字段 术语 存储 在线 SharePoint 分类法 何检索 检索      更新时间:2023-09-26

我试图从使用JavaScript的术语存储检索术语,它的工作只是一个很好的与此代码:获取单个分类法字段的标签:

var fieldValue = item.get_item("FieldName");
var fieldLabel = fieldValue.Label;

我有一个问题,检索多值分类字段的标签?我已经试过了

var fieldValue = item.get_item("FieldName");
var taxEnumerator = fieldValue.getEnumerator();
while(taxEnumerator.moveNext()){
    var currentTerm = taxEnumerator.get_current();
    var label = currentTerm.Label;
    // do something with the label here
}

但是行不通

很可能你得到这个错误,因为sp.taxonomy.js库没有加载,在这种情况下,分类法字段值返回为"轻量级"对象(而不是sp . taxonomytaxonomyfieldvaluecollection对象类型的)。

选项1(推荐):使用sp.taxonomy

获取多个分类法字段值

首先,我会推荐这种方法,因为SP.Taxonomy名称空间不仅提供了处理分类法字段值的标准方法,而且还提供了通过JSOM使用托管元数据API的方法。

下面的例子展示了如何:

  • 确保sp.分类法.js库已加载
  • 获取多个分类法字段值,表示/ul>

    的例子:

    SP.SOD.registerSod('sp.taxonomy.js', SP.Utilities.Utility.getLayoutsPageUrl('sp.taxonomy.js'));   
    SP.SOD.executeFunc('sp.taxonomy.js', 'SP.Taxonomy.TaxonomySession', function () { 
    var ctx = SP.ClientContext.get_current();
    var list = ctx.get_web().get_lists().getByTitle(listTitle);
    var item = list.getItemById(itemId);
    ctx.load(item);
    ctx.executeQueryAsync(
       function(){
          var fieldVal = item.get_item(fieldName); 
          for(var i = 0; i < fieldVal.get_count(); i++) {
             var label = fieldVal.get_item(i).get_label();
             var guid = fieldVal.get_item(i).get_termGuid();
             //...
          }       
       },
       function(sender,args){
           console.log(args.get_message());
       });
    
    });
    

    选项2:获取多个分类法字段值而不加载 sp.taxonomy.js

    sp.taxonomy未加载时,仍然可以通过_Child_Items_属性检索分类字段值,如下所示:

    var ctx = SP.ClientContext.get_current();
    var list = ctx.get_web().get_lists().getByTitle(listTitle);
    var item = list.getItemById(itemId);
    ctx.load(item);
    ctx.executeQueryAsync(
       function(){
          var fieldVal = item.get_item(fieldName)._Child_Items_; 
          for(var i = 0; i < fieldVal.length; i++) {
             var label = fieldVal[i].Label;
             var guid = fieldVal[i].TermGuid;
             //...
          }       
       },
       function(sender,args){
           console.log(args.get_message());
       });