【问题标题】:Need to get the XML of a component's that version which is published需要获取已发布的组件版本的 XML
【发布时间】:2012-07-23 14:39:34
【问题描述】:

我们在 Tridion 2011 中迭代文件夹中的组件,并根据组件的发布状态创建自定义 XML 以在 CDS 上使用。我给出下面的例子是为了让你理解这个问题。

  1. 假设我们在一个文件夹中有 10 个组件都已发布,并且我们发布了我们的 XML,然后为 10 个项目生成 XML。
  2. 现在我们对其中一个组件进行更改并且不发布它。
  3. 组件修改后,我们再次发布XML。然后 XML 也会为修改后的组件更新。因此,它会在该组件的已发布版本与我们 XML 中的版本之间产生差异。

所以我想以这样一种方式发布自定义 XML,它应该只包含与已发布版本的组件同步的数据。

【问题讨论】:

  • >> “我想发布自定义 XML,使其只包含与已发布的组件版本同步的数据” - 您是说要禁用内容更新?
  • 你的问题不是很清楚,你用的是什么发布模式?如果您的内容进入动态内容代理,您可以从代理中获取已发布的内容,而不是尝试从内容管理器中获取。为此,您可以使用 Broker API 甚至 oData 网络服务(如果已安装)。
  • 我想确定上次发布的组件的 XML 并在此帮助下创建 XML。我不需要注意尚未发布的更改。

标签: tridion tridion-2011


【解决方案1】:

所以你想:

  1. 确定上次发布的组件的 XML
  2. 确定该 XML 与组件的当前 XML 之间的更改
  3. 仅发布更改

Tridion 不跟踪已发布的版本(至少在内容管理器上)。因此,您可以做的最接近的事情是找出组件上次发布的时间 并检索该时间的 XML。 This question 是了解有关该方法的更多信息的一个很好的起点。然后,您可以根据该 XML 执行上述步骤 2 和 3。

或者,您可以在呈现组件时保留您在“某处”(例如在应用程序数据中)发布的 XML 的快照。然后下次发布组件时,您可以检索该 XML 并执行上述步骤 2 和 3。

请注意,对于这些解决方案中的任何一个,您都应该真正想知道是否应该从一开始就实施它。您正在覆盖 Tridion 的一些默认渲染行为并规避其架构的一部分(内容管理和内容交付之间的明确、明确的脱节,前者对后者“一无所知”)并且您所做的任何事情都会回来困扰您时间。在这个用例中,您必须想知道当 CDS 和 TCM 不同步时会发生什么。突然重新发布内容已经不够好,因为您的代码将在那里决定“自上次发布以来没有任何变化,所以我们不会发布任何内容”。

【讨论】:

  • 第 1 点是我的确切要求。我想在 CMS 部分做。
  • Tridion 没有现成的:item.ContentAsLastPublishedToTarget(targetId) 方法。因此,我为您提供了两种可能的方法来确定此 XML:通过 LastPublished 时间戳查找或在发布期间存储快照。
【解决方案2】:

如果我妄下结论,请原谅我,但我强烈认为这个问题是由于对 Tridion 缺乏了解而引起的。在 Tridion 中发布不仅仅是举起一个标志来表明该项目已“发布”,换句话说,准备好向外界展示。我知道这就是一些(许多)内容管理系统的运作方式(这可以解释你为什么问这个问题)。 然而,在 Tridion 中,发布意味着项目实际上(物理上)从内容管理环境转移到内容交付环境。此环境始终包含您的内容版本,这些版本代表项目上次发布时的状态 - 仅仅是因为正是发布行为创建了它们。

在我看来,您真正要问的是如何重建此发布功能。这从来都不是一个好主意。相反,您应该认真对待 Bart 的评论并查看 Tridion 提供的内容交付 API 之一(代理 API 或 OData Web 服务)。或者,您可能想要研究 DD4T,它构建在代理之上并公开了完整的 Tridion 数据模型。

【讨论】:

  • 我们使用事件来自动发布 xml。一旦任何组件发布,我们就会将 xml 发布到 CDS,自动迭代文件夹中的组件。根据您的说法,我们应该使用代理 API 并将其与事件处理集成。我的理解对吗???
  • 那将是一个更有成效的方法,是的。为什么不从经过验证的功能中获利,而不是自己构建呢?
【解决方案3】:

那么你的解决方案是

  1. 在 Publish Transaction Save 事件上编写事件处理程序
  2. 将发布信息(版本数据)保存到已发布组件的应用程序数据中

我提到了 Publish Transaction Save 事件,因为从那里您可以确保仅在事务成功时才保存发布信息。

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

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

【讨论】:

  • 应用程序数据存储在 CMS 数据库中,并且在 Content Porter 2009 SP2 中也将被移植,因此根据不同环境的同步方式,应该可以将应用程序数据也保留在那里.但我仍然想知道这是否应该在 CM 方面实施,从收集的信息来看,这听起来更像是 CD 方面的要求,正如 Frank 在他的最后一段中所指出的那样。
  • 我不认为这是 CD 方面的要求。他可能想要发布某种类型的列表,并且仅包含已作为嵌入页面的一部分发布的组件版本。但是对于这些背景有限的问题,很难弄清楚究竟是什么目的。 :(
猜你喜欢
  • 2010-10-21
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多