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

时间:2013-02-27 13:06:57

标签: tridion tridion-2011 tridion-content-delivery

我有一个关键字类别,其中包含元数据架构。该模式由两个字段组成,每个字段都是类别。非常简单的结构,但在发布期间,它将这些元数据关键字字段解析为错误的tcm uris而不是关键字的标题,如下所示:enter image description here

2)部署程序包的内容

    <tcmc:Topic rdf:about="tcm:10-11325-1024">
      <rdfs:label>Analytics and optimization</rdfs:label>
      <rdfs:comment>Analytics and optimization</rdfs:comment>
      <tcmt:key>Analytics and optimization</tcmt:key>
      <tcmt:isAbstract>false</tcmt:isAbstract>
      <tcmt:isRoot>true</tcmt:isRoot>
      <tcmt:metadata rdf:parseType="Literal">
      <Metadata xmlns="uuid:a30b06d3-b6c5-4c2e-a53b-2b88771370ed"> 
        <Divisions xlink:title="cma" xmlns:xlink="http://www.w3.org/1999/xlink"         xlink:href="tcm:0-17737-1024">cma</Divisions>
        <InterestProfile xlink:title="CMAAnalytics" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="tcm:0-11175-1024">CMAAnalytics</InterestProfile> 
      </Metadata>
    </tcmt:metadata>
   </tcmc:Topic>

3)在我查询Tridion的代码中,它返回这些uris:

    TaxonomyFactory taxonomyFactory = new TaxonomyFactory();
    TKeyword taxonomy = taxonomyFactory.GetTaxonomyKeywords(“tcm_of_the_category”);
    if (taxonomy != null && taxonomy.KeywordChildren != null)
    {
        foreach (var item in taxonomy.KeywordChildren) //keyword metadata contains tcm uri with zero instead of title
        {
           Keyword keywordChildren = item as Keyword;
           if (keywordChildren != null)
           {
               . . . 
           }
        }
    }

有没有人有什么想法会导致这样的问题?

2 个答案:

答案 0 :(得分:3)

乍看之下,我的猜测是用于转换类别的内部模板是直接从数据库中读取元数据字段数据(或者在BL层中足够接近)并且不对其应用任何蓝图规则(可能用于性能) )。

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

你的电话:你可以称之为缺陷,要求Tridion修复它,它会降低发布类别的性能,或者你可以在交付方面处理它 - 你知道出版物Uri是0,并且如果您打算将其用于任何目的,则需要将其替换为当前的出版物ID。

修改

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

快速解决此问题:加载相关关键字:

TaxonomyFactory tf = new TaxonomyFactory();
Keyword taxonomy = tf.GetTaxonomyKeywords("tcm:5-369-512");
if(taxonomy != null && taxonomy.KeywordChildren != null)
{
    foreach (Keyword item in taxonomy.KeywordChildren)
    {
        NameValuePair key = (NameValuePair) item.KeywordMeta.NameValues["Field1"];
        string correctUri = key.Value.ToString().Replace("tcm:0-", "tcm:5-");
        Keyword theOtherKeyword = tf.GetTaxonomyKeyword(correctUri);
        string title = theOtherKeyword.KeywordName;
    }
}

现在......你可能希望在创意出版物ID重写上比我聪明一点:)

答案 1 :(得分:1)

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

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