我正在尝试使用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指令或汇编引用?)
请建议我如何实现它?
提前致谢
答案 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());
干杯