【问题标题】:Keyword has incorrect values in custom meta关键字在自定义元中的值不正确
【发布时间】:2013-02-27 13:06:57
【问题描述】:

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

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 的代码中,它返回这些 uri:

    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)
           {
               . . . 
           }
        }
    }

有没有人知道什么可能导致这样的问题?

【问题讨论】:

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


    【解决方案1】:

    乍一看,我的猜测是用于转换类别的内部模板是直接从数据库中读取元数据字段数据(或在 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 重写方面比我聪明一点:)

    【讨论】:

    • 感谢您的回复,努诺。所以换句话说,在当前的 Tridion 实现中,我无法在 KeywordMeta 字典中获取关键字的标题,可以吗? KeywordMeta 属性是否总是包含 tcm uri 零作为关键字字段中的发布?
    • 不确定我是否关注你。标题在元数据中。例如,如果您想对此进行更多控制,则必须编写自己的模板,将该信息发布为页面。此处的简短示例:nunolinhares.blogspot.com/2010/04/…
    • 对不起,让我澄清一下。当我访问 ((NameValuePair)((Keyword)item).KeywordMeta.NameValues["InterestProfile"]).Value 时,它​​等于 tcm uri(例如 tcm:0-17786-1024),我想有标题而不是它.这可能吗?
    • 知道了。不确定,今天晚些时候我得试试看。
    • 感谢您提供代码示例,但老实说,我已经创建了类似的修复程序。最奇怪的是它曾经在我们的开发环境中工作过一段时间(我的意思是关键字解析为标题)。可能是因为 HR1 更新,但我不确定。无论如何,这个答案是可以接受的。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 2013-05-21
      • 2016-10-23
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多