如何从C#TBB中的类别名称获取关键字?

时间:2012-10-16 06:34:37

标签: tridion tridion-2011

我正在尝试使用C#TBB获取类别中存在的关键字,以使用以下DWT TBB中的输出。

为此我有一个带有Category字段的组件。

我正在尝试编写以下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'的定义,也没有扩展方法'GetKeywordByTitle'接受类型'Tridion.ContentManager.Templating.Package'的第一个参数(你是否缺少using指令或汇编引用?)

请建议我如何实现它?

提前致谢

3 个答案:

答案 0 :(得分:4)

Af Jeremy建议您应该学习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;
}

答案 1 :(得分:3)

错误信息绝对清楚问题是什么 - 没有引用KeywordField类。您需要导入相关的命名空间:

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

同样绝对清楚的是,Package对象没有名为GetKeywordByTitle的方法。有一个GetByName方法,但这是用于从Package中检索命名项,而不是从存储库中获取对象。

Tridion.ContentManager.ContentManagement.Category确实有一个GetKeywordByTitle方法,但要使用它,你必须首先获得该类别,这可能意味着必须知道该类别的URI。

也许您需要更多地学习API文档?

答案 2 :(得分:0)

“GetKeywordByTitle”不是Package上的方法,它是Category上的方法。 你不能只是新手关键字吗?

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

干杯