2012-10-16 99 views
3

我正在嘗試使用C#TBB獲取類別中的關鍵字,以便在後面的DWT TBB中使用輸出。如何從C#TBB中的類別名稱獲取關鍵字?

爲此我有一個組件與類別字段。

我想寫下面的C#TBB來獲取關鍵字值。

<%@Import NameSpace="Tridion.ContentManager.Templating.Expression" %>   

try 
{ 
    string className = package.GetValue("Component.Fields.title"); 
    KeywordField keywordField = package.GetKeywordByTitle(className); 

    package.PushItem("Class", package.CreateStringItem(ContentType.Text, keywordField.Value.Key)); 


} 
catch(TemplatingException ex) 
{ 
    log.Debug("Exception is " + ex.Message); 
} 

但是我收到以下編譯錯誤。

無法編譯模板,因爲:錯誤CS0246:無法找到類型或名稱空間名稱'KeywordField'(您是否缺少using指令或程序集引用?)錯誤CS1061:'Tridion.ContentManager.Templating。 Package'不包含'GetKeywordByTitle'的定義,並且沒有找到接受'Tridion.ContentManager.Templating.Package'類型的第一個參數的擴展方法'GetKeywordByTitle'(可以找到缺少使用指令或程序集引用嗎?)

請問我該如何實現它?

在此先感謝

回答

3

的錯誤信息是絕對清楚的是什麼問題 - 有到KeywordField類沒有提及。您需要導入相關的命名空間:

<%@Import NameSpace="Tridion.ContentManager.ContentManagement.Fields" %> 

而且絕對清楚的是,包對象沒有一個叫GetKeywordByTitle方法。有一個GetByName方法,但它用於從Package中檢索命名項目,而不是從存儲庫中獲取對象。

Tridion.ContentManager.ContentManagement.Category確實有GetKeywordByTitle方法,但要使用此方法,您必須首先獲取類別,這可能意味着必須知道該類別的URI。

也許你需要研究一些API文檔?

+0

我應該閱讀API文檔更多自己! –

0

「GetKeywordByTitle」不是Package上的方法,它是Category上的方法。 你不能只是新的關鍵字?

string selectedKeyword= package.GetValue("Component.Fields.title"); 
Keyword keyword = new Keyword(selectedKeyword, engine.GetSession()); 

乾杯

+0

沒有關鍵字的構造函數將字符串作爲參數之一。這個字符串實際上是一個URI嗎?如果是這樣,則需要使用該字符串創建TcmUri對象,例如TcmUri kwUri =新TcmUri(selectedKeyword) –

+0

我的不好!應該更好地閱讀API文檔! – Neil

4

房顫傑里米建議你應該學習API,我爲您提供例如,從類別獲得關鍵字。希望它可以幫助

包含文件

using Tridion.ContentManager; 
using Tridion.ContentManager.CommunicationManagement; 
using Tridion.ContentManager.Templating.Assembly; 
using Tridion.ContentManager.ContentManagement; 
using Tridion.ContentManager.ContentManagement.Fields; 
using Tridion.ContentManager.Templating; 

示例代碼,您可以使用鍵和值從環這裏按您的要求。

string catID = package.GetByName("CategoryID").GetAsString(); 
     TcmUri catURI = new TcmUri(int.Parse(catID), ItemType.Category, PubId); 
     var theCategory = m_Engine.GetObject(catURI) as Category; 
     catKeywords = GetCatKeywords(theCategory); 
     string strSelect = "<select>"; 
     foreach (Keyword k in catKeywords) 
     { 

     k.Key // Keyowrd key 
     k.Value // KEyword Value 

     } 

//keyword list 
private IList<Keyword> GetCatKeywords(Category category) 
{ 
    IList<Keyword> keywords; 

    if (!Utilities.IsNull(category)) 
    { 
     Filter filter = new Filter(); 
     filter.BaseColumns = ListBaseColumns.IdAndTitle; 
     keywords = category.GetKeywords(filter); 

     if (!Utilities.IsNull(keywords)) 
     { 
      return keywords; 
     } 
    } 

    return null; 
} 
相關問題