Tridion 关键字在自定义元数据中的值不正确

Tridion 关键字在自定义元数据中的值不正确,tridion,tridion-2011,tridion-content-delivery,Tridion,Tridion 2011,Tridion Content Delivery,我有一个包含关键字的类别,在它们的tern中有元数据模式。该模式由两个字段组成,每个字段都是category。非常简单的结构,但在发布过程中,它会将这些元数据关键字字段解析为错误的tcm URI,而不是关键字的标题,如下所示: 2) 部署程序包的内容 分析和优化 分析和优化 分析和优化 假的 真的 cma CMA分析 3) 在我查询Tridion的代码中,它返回以下URI: TaxonomyFactory TaxonomyFactory=new TaxonomyFactory(); TKey

我有一个包含关键字的类别,在它们的tern中有元数据模式。该模式由两个字段组成,每个字段都是category。非常简单的结构,但在发布过程中,它会将这些元数据关键字字段解析为错误的tcm URI,而不是关键字的标题,如下所示:

2) 部署程序包的内容


分析和优化
分析和优化
分析和优化
假的
真的
cma
CMA分析
3) 在我查询Tridion的代码中,它返回以下URI:

TaxonomyFactory TaxonomyFactory=new TaxonomyFactory();
TKeyword taxonomy=taxonomyFactory.GetTaxonomyKeywords(“tcm_of the_category”);
if(taxonomy!=null&&taxonomy.KeywordChildren!=null)
{
foreach(taxonomy.KeywordChildren中的var项)//关键字元数据包含带有零而不是标题的tcm uri
{
关键字keywordChildren=项目作为关键字;
if(关键字children!=null)
{
. . . 
}
}
}

有人知道是什么导致了这样的问题吗?

我的猜测是,用于转换类别的内部模板直接从数据库读取元数据字段数据(或在BL层中足够接近),而没有对其应用任何蓝图规则(可能是为了性能)

如果查看内容中的TCM URI,当存储在数据库中时,它们都使用
0
作为其发布ID,并且在“读取”时修改此ID

您的呼叫:您可以将此称为缺陷,要求Tridion修复它,它将降低发布类别的性能,或者您可以在交付端处理它-您知道发布Uri为0,并且您知道如果您打算将其用于任何目的,您需要将其替换为当前发布ID

编辑

所以我回去做了一些快速的黑客攻击。实际上,您不能加载关键字的内容,因为根据Tridion的说法,字段“Divisions”的“Value”就是关键字URI。没办法

快速解决方法:加载有问题的关键字:

TaxonomyFactory tf=new TaxonomyFactory();
关键词分类法=tf.GetTaxonomyKeywords(“tcm:5-369-512”);
if(taxonomy!=null&&taxonomy.KeywordChildren!=null)
{
foreach(分类法中的关键字项.KeywordChildren)
{
NameValuePair key=(NameValuePair)item.KeywordMeta.NameValues[“Field1”];
字符串correctUri=key.Value.ToString().Replace(“tcm:0-”,“tcm:5-”;
关键字theOtherKeyword=tf.GetTaxonomyKeyword(correcturturi);
字符串标题=theOtherKeyword.KeywordName;
}
}

现在。。。你可能想在创造性出版物ID重写上比我聪明一点:)

乍一看,我猜用于转换类别的内部模板是直接从DB读取元数据字段数据(或在BL层中足够接近),而没有对其应用任何蓝图规则(可能是为了性能)

如果查看内容中的TCM URI,当存储在数据库中时,它们都使用
0
作为其发布ID,并且在“读取”时修改此ID

您的呼叫:您可以将此称为缺陷,要求Tridion修复它,它将降低发布类别的性能,或者您可以在交付端处理它-您知道发布Uri为0,并且您知道如果您打算将其用于任何目的,您需要将其替换为当前发布ID

编辑

所以我回去做了一些快速的黑客攻击。实际上,您不能加载关键字的内容,因为根据Tridion的说法,字段“Divisions”的“Value”就是关键字URI。没办法

快速解决方法:加载有问题的关键字:

TaxonomyFactory tf=new TaxonomyFactory();
关键词分类法=tf.GetTaxonomyKeywords(“tcm:5-369-512”);
if(taxonomy!=null&&taxonomy.KeywordChildren!=null)
{
foreach(分类法中的关键字项.KeywordChildren)
{
NameValuePair key=(NameValuePair)item.KeywordMeta.NameValues[“Field1”];
字符串correctUri=key.Value.ToString().Replace(“tcm:0-”,“tcm:5-”;
关键字theOtherKeyword=tf.GetTaxonomyKeyword(correcturturi);
字符串标题=theOtherKeyword.KeywordName;
}
}

现在。。。你可能想在创造性出版物ID重写方面比我聪明一点:)

你可以将字段视为组件链接,链接到特定的关键字项(对象)。因此,您主要获得URI,我认为它不会自动解析为Value属性


因此,下一步将是使用URI获取关键字对象,并可能构造URI以包含正确的发布上下文。

您可以将该字段视为组件链接,您可以链接到特定关键字项(对象)。因此,您主要获得URI,我认为它不会自动解析为Value属性


因此,下一步将是使用URI获取关键字对象,并可能构造URI以包含正确的发布上下文。

感谢您的回复,Nuno。换句话说,在当前Tridion的实现中,我无法在关键字元词典中获得关键字的标题,可以吗?KeywordMeta属性是否总是包含在关键字字段中发布为零的tcm uri?我不确定我是否了解。标题在元数据中。例如,如果您想对此进行更多控制,您必须编写自己的模板,将这些信息发布为页面。这里举个简单的例子:对不起,让我澄清一下。当我访问((NameValuePair)((关键字)项).KeywordMeta.NameValues[“InterestProfile”]).Value时,它等于tcm uri(例如,tcm:0-17786-1024),我希望使用标题而不是它。有可能吗?明白了。不确定,我以后要试试看