【问题标题】:How to retrieve multi-value Taxonomy Field from term store SharePoint online如何从术语库 SharePoint Online 中检索多值分类字段
【发布时间】:2016-10-07 00:45:31
【问题描述】:

我正在尝试使用 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
}

但它不起作用

【问题讨论】:

  • @Thriggle:你有什么建议吗?

标签: javascript sharepoint sharepoint-online csom sharepoint-jsom


【解决方案1】:

您很可能收到此错误,因为尚未加载 sp.taxonomy.js 库,在这种情况下,分类字段值作为“轻量级”对象返回(not 属于 SP.Taxonomy.TaxonomyFieldValueCollection object 类型)。

选项 1(推荐):使用 sp.taxonomy 库获取多个分类字段值

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

以下示例显示了如何:

例子:

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 library 加载

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    相关资源
    最近更新 更多