我们正在迭代Tridion 2011中的文件夹中的组件,并根据组件的发布状态创建要在CDS上使用的自定义XML。我举几个例子让你明白这个问题。
所以我想以这样的方式发布自定义XML,它应该只包含与已发布的组件版本同步的数据。
答案 0 :(得分:2)
所以你想:
Tridion不会跟踪发布的版本(至少在Content Manager上)。因此,您可以做的最接近的事情是在 上次发布组件时找出 并检索当时的XML。 This question是获得有关该方法的更多信息的一个很好的起点。根据该XML,您可以执行上面的步骤2和步骤。
或者,您可以在渲染组件时保留“在某处”(例如在“应用程序数据”中)发布的XML的快照。然后,当下次发布Component时,您可以检索该XML并执行上面的步骤2和步骤。
请注意,对于任何这些解决方案,您应该真的想知道是否应该首先实现它。你正在覆盖Tridion的一些默认渲染行为,并绕过其部分架构(内容管理和内容交付之间明确的,明确的脱节,前者对后者一无所知),你所做的任何事情都会让你回过头来困扰你时间。在这个用例中,你不得不想知道当CDS和TCM不同步时会发生什么。简单地重新发布内容突然变得不够好了,因为你的代码将在那里决定“自上次发布以来没有任何改变,所以我们什么都不会发布”。
答案 1 :(得分:2)
如果我得出结论,请原谅我,但我强烈地感到这个问题源于对Tridion缺乏了解。在Tridion中发布不仅仅是举起一个标志来表明该项目是“已发布”的,换句话说就是准备好向外界展示。我知道这是一些(许多)内容管理系统的运作方式(这可以解释为什么你要问这个问题)。 但是,在Tridion中,发布意味着该项目实际上是从内容管理环境物理转移到内容交付环境。此环境始终包含您的内容版本,这些版本代表上次发布项目时的状态 - 仅仅因为它是创建它们的发布行为。
在我看来,您真正要问的是如何重建此发布功能。这绝不是一个好主意。相反,您应该认真对待Bart的评论并查看Tridion提供的内容交付API之一(代理API或OData Web服务)。或者,您可能希望查看DD4T,它构建在代理之上并公开完整的Tridion数据模型。
答案 2 :(得分:1)
然后你的解决方案是
我提到了Publish Transaction Save事件,因为从那里你可以确保只在事务成功时保存发布信息。
另请注意,当事件处理程序无法执行时,此发布信息可能会不同步,并且在移动到其他环境时可能会丢失所有应用程序数据。
因此,当这些信息绝对至关重要时,我会将其保存到单独的数据库,而不是应用程序数据。