需要获取已发布的版本的组件的XML

时间:2012-07-23 14:39:34

标签: tridion tridion-2011

我们正在迭代Tridion 2011中的文件夹中的组件,并根据组件的发布状态创建要在CDS上使用的自定义XML。我举几个例子让你明白这个问题。

  1. 我们在一个文件夹中有10个组件,这些组件都已发布,我们发布了XML,然后为10个项目生成了XML。
  2. 现在我们在其中一个组件中进行更改,不要发布它。
  3. 修改组件后,我们再次发布XML。然后,XML也会针对修改后的组件进行更新。因此,它创建了该组件的已发布版本与我们XML中的版本之间的差异。
  4. 所以我想以这样的方式发布自定义XML,它应该只包含与已发布的组件版本同步的数据。

3 个答案:

答案 0 :(得分:2)

所以你想:

  1. 确定上次发布的Component的XML
  2. 确定该XML与Component
  3. 的当前XML之间的更改
  4. 仅发布更改
  5. 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)

然后你的解决方案是

  1. 在“发布交易保存”事件上编写事件处理程序
  2. 将发布信息(版本数据)保存到已发布组件的应用程序数据
  3. 我提到了Publish Transaction Save事件,因为从那里你可以确保只在事务成功时保存发布信息。

    另请注意,当事件处理程序无法执行时,此发布信息可能会不同步,并且在移动到其他环境时可能会丢失所有应用程序数据。

    因此,当这些信息绝对至关重要时,我会将其保存到单独的数据库,而不是应用程序数据。