0

JavaScript を使用して用語ストアから用語を取得しようとしていますが、次のコードで問題なく動作します: 単一分類フィールドのラベルを取得:

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

複数値の分類フィールドのラベルを取得する際に 1 つの問題がありますか? 私はこれを試しました

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
}

しかし、うまくいきません

4

1 に答える 1

3

ライブラリがロードされていないため、このエラーが発生する可能性が高くsp.taxonomy.js、その場合、分類フィールド値は「軽量」オブジェクトとして返されます ( SP.Taxonomy.TaxonomyFieldValueCollection オブジェクトタイプではありません)。

sp.taxonomyオプション 1 (推奨):ライブラリを使用して複数の分類フィールド値を取得する

SP.Taxonomy名前空間は、分類フィールド値を処理する標準的な方法だけでなく、JSOM を介して Managed Metadata API を操作する方法も提供する ため、まず、このアプローチをお勧めします。

次の例は、次の方法を示しています。

  • sp.taxonomy.js ライブラリがロードされていることを確認します
  • SP.Taxonomy.TaxonomyFieldValueCollectionオブジェクトを表す複数の分類フィールド値を 取得します

例:

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());
   });
于 2016-10-05T08:33:14.190 に答える