如何从术语库 SharePoint 在线检索多值分类法字段
How to retrieve multi-value Taxonomy Field from term store SharePoint online
我正在尝试使用 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
库尚未加载,在这种情况下,分类字段值返回为 "lightweight" 对象(not SP.Taxonomy.TaxonomyFieldValueCollection object 类型)。
选项 1(推荐):使用 sp.taxonomy
库
获取多个分类字段值
首先,我会推荐这种方法,因为 SP.Taxonomy
命名空间不仅提供了一种处理分类字段值的标准方法,而且还提供了一种通过 JSOM 使用托管元数据 API 的方法。
以下示例说明如何:
- 确保sp.taxonomy.js 库已加载
- 获取multiple分类字段值代表
SP.Taxonomy.TaxonomyFieldValueCollection object
示例:
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());
});
我正在尝试使用 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
库尚未加载,在这种情况下,分类字段值返回为 "lightweight" 对象(not SP.Taxonomy.TaxonomyFieldValueCollection object 类型)。
选项 1(推荐):使用 sp.taxonomy
库
首先,我会推荐这种方法,因为 SP.Taxonomy
命名空间不仅提供了一种处理分类字段值的标准方法,而且还提供了一种通过 JSOM 使用托管元数据 API 的方法。
以下示例说明如何:
- 确保sp.taxonomy.js 库已加载
- 获取multiple分类字段值代表 SP.Taxonomy.TaxonomyFieldValueCollection object
示例:
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());
});