2014-06-07 57 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'的做法是一樣的,但它起作用。它可能會導致比其他功能多一點的負載,但是這對我來說很有用

相關問題