【问题标题】:Getting root publication of component获取组件的根发布
【发布时间】:2012-10-29 23:44:10
【问题描述】:

让我们假设这个问题有以下出版物。

20 内容 -> tcm:0-20-1

70 网络 -> tcm:0-121-1

我在 (20 Content) 出版物下创建了一个组件,我正在从其中一个子出版物 (70 Web) 发布此组件。我正在使用 Dreamweaver 模板编写 UI,并从 DWT 调用 C# 自定义函数。发布时,该组件在组件表示中将被称为 121-432。有没有办法获得组件创建位置的根发布?那就是我应该得到 20-432,而不是得到 121-432。

我尝试了 Component.GetBluePrintChain(),它返回一个包含所有蓝图层次结构的列表。我可以从该列表中获取第一项,以获取该组件以及实际创建它的出版物。

由于我必须在很多地方调用此方法,我只是想检查是否有其他直接/更好的方法来完成此操作。

有人可以推荐吗?

【问题讨论】:

    标签: tridion tridion-2011


    【解决方案1】:

    您需要查看组件的OwningRepository 属性,因此:

    var componentIdInOwningPublication = new TcmUri(
        component.Id.ItemId,
        ItemType.Component,
        component.OwningRepository.Id.ItemId
    );
    

    将它放入自定义的 Dreamweaver 可调用函数中,您应该可以开始了。

    更新 还有一个名为CreateTcmUriForPublication 的辅助方法可以进行翻译。所以你也可以像这样调用那个:

    var componentIdInOwningPublication = TemplateUtilities.CreateTcmUriForPublication(
        component.OwningRepository.Id.ItemId,
        component.Id
    );
    

    虽然这两个 sn-ps 的最终结果是相同的:组件的 TcmUri 在其所属存储库的上下文中。

    【讨论】:

    • 同意检查 OwningRepository,但我认为您的参数顺序错误。在 TOM.NET 中,由于某种原因,签名是 public TcmUri(int itemId, ItemType itemType, int publicationId)
    • @FrankvanPuffelen 我已经尝试过了,但我仍然没有获得组件创建级别的发布 ID。我在 020 出版物中有一个组件,在 030 设计出版物中有一个 CT,在 070 网络出版物中进行预览时,我仍然看到 070 出版物的 tcm id。
    • 我刚刚在自己的虚拟机上测试了代码,它运行良好。您确定您正在测试的组件实际上归 020 出版物所有吗?
    • 谢谢@FrankvanPuffelen ...它有效。抱歉这是我的错误,我没有注意到这些变化。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-11-16
    • 2017-02-03
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 2021-02-15
    • 1970-01-01
    相关资源
    最近更新 更多