2014-06-07 73 views
2

我的应用程序读取SharePoint Term Store并需要获取与用户语言相关联的标签。我得到了用户的语言和LCID,然后我在使用此代码的分类读取某个节点下的所有条款:阅读SharePoint分类术语存储和getDefaultLabel(lcid)

... some code to get the Term Store, then Term Group, then Term Set, and finally startTerm 

var tsTerms = startTerm.get_terms(); 
context.load(tsTerms); 
context.executeQueryAsync(
    function() { 
     var termsEnum = tsTerms.getEnumerator(); 
     while (termsEnum.moveNext()) { 
      var currentTerm = termsEnum.get_current(); 
      var termName = currentTerm.get_name(); 
      var userLabel = currentTerm.getDefaultLabel(lcid); 
      var userLabelValue = userLabel.get_value(); 
      console.log ("Label=", userLabel, userLabelValue) 
... more code ... 

在while循环,我可以得到术语,我需要的所有属性,标签除外。在我在网上找到的其他示例中,为了获取默认标签,我的userLabel对象将被加载到上下文中,然后调用另一个context.executeQueryAsync。所有这一切都有道理,但这会导致对SharePoint服务器的大量调用。

但是,当我向控制台写入userLabel对象时,显示为SP.Result类型,当我打开它时,我在m_value下看到我想要的标签。所以应该不需要再次去服务器。但是,userLabelValue返回为0 - 显然,get_value()不起作用。在MSDN文档中,SP.Result对象类型仅供内部使用。有什么方法可以提取它存储的数据吗?

我附上了扩展对象的控制台图片,我们清楚地看到m_value =“Contrat”,这是我需要的标签。

console log

回答

1

使用SP.Taxonomy.Term.getDefaultLabel Method获取默认Label的基础上,LCID此期限:

function getTermDefaultValue(termId,lcid,success,failure) 
{ 
    var context = SP.ClientContext.get_current();   
    var taxSession = SP.Taxonomy.TaxonomySession.getTaxonomySession(context); 
    var termDefaultValue = taxSession.getTerm(termId).getDefaultLabel(lcid); 
    context.executeQueryAsync(function() { 
      success(termDefaultValue); 
     }, 
     failure); 
} 

注:SP.Taxonomy.Term.getDefaultLabel方法需要locale identifier (LCID)的标签。

使用

var layoutsRoot = _spPageContextInfo.webAbsoluteUrl + '/_layouts/15/';  
$.getScript(layoutsRoot + 'sp.taxonomy.js', 
    function() { 
     var termId = 'dff82ab5-6b7a-4406-9d20-40a8973967dd'; 
     getTermDefaultValue(termId,1033,printLabelInfo,printError); 
}); 


function printLabelInfo(label) 
{ 
    console.log(String.format('Default Label: {0}',label.get_value())); 
} 


function printError(sender,args){ 
    console.log(args.get_message()); 
}  
0

我面临同样的问题,找到了解决办法。代替使用getDefaultLabel(LCID)的,使用:

termSet.getTerm(Termid).getAllLabels(LCID).itemAt(0).get_value();

在我看来,这和'getDefaultLabel'的做法是一样的,但它起作用。它可能会导致比其他功能多一点的负载,但是这对我来说很有用

相关问题