【问题标题】:Raising a “warning” status during SDL Tridion 2011 publishing在 SDL Tridion 2011 发布期间提高“警告”状态
【发布时间】:2012-03-27 17:45:28
【问题描述】:

我们希望实现一些功能,以便当由于某种原因在发布或解析过程中发生错误时,我们使用 try/catch 块跳过它,但仍想通知用户跳过了某些内容。

SDL Tridion 2011 Publishing Queue 可以按状态过滤。这些状态之一是“警告”。是否可以使用模板代码或自定义解析器中的 API 触发发布事务以具有“警告”状态?

【问题讨论】:

  • 克里斯。 PublishTransaction 类具有可设置的状态属性。你试过用那个吗?结果如何?
  • 我没有尝试在模板中执行此操作 - 我当前的挑战是尝试在解析器中执行此操作,但我认为 PublishTransaction 在那里不可用。

标签: tridion tridion-2011


【解决方案1】:

如果您只需要在发布期间发出警告(例如 Publish Transaction 有状态警告),那么您需要将 PublishInstruction.MaximumNumberOfRenderFailures 设置为大于 0 的值。只要渲染错误的数量低于您指定的最大值,发布的状态将为警告。

如果在渲染之外发生错误,则该指令将显示为失败。

另一方面,如果您想在 GUI(在消息中心)中显示一条带有“警告”的消息,表明出现了问题,那么您将需要更复杂的架构。弗兰克不久前就在这方面工作过。这个想法(IIRC)是有一个GUI片段,例如轮询服务的 iframe,该服务返回该用户的发布操作的状态。事件系统将通过监视 PublishInstruction 来产生这些状态,并将它们写入某种存储(文件、数据库、内存)中,然后服务将轮询。

【讨论】:

  • 那么当我捕捉到错误时如何引发错误呢?这只能在模板代码中完成吗?关于这是否可以在自定义解析器中完成的任何想法?
  • 在模板代码中,你根本看不到它。让它被抛出,它将被视为 1 次渲染失败。但是,如果您在客户解析器中捕获异常,则会更加棘手。您需要将错误“推迟”到模板代码中。您需要一些机制来让模板代码知道它应该抛出异常。也许在组件或页面上使用 AppData?例如。自定义解析器捕获异常,写入 AppData,然后继续并执行模板代码,它所做的第一件事就是读取 AppData 以查找该标志。如果找到,则从模板代码中抛出异常。
  • 谢谢@Mihai - 不幸的是,这不适用于我的解析器。当项目在解析器中失败时,它们最终不会被添加到包中,因此它们永远不会被渲染(因此不会为它们执行这样的模板)。似乎自定义解析器无法在通知发布队列中的用户时优雅地失败。
  • 我明白你的意思。也许只是将 AppData 放在不同的项目(例如当前用户)上,然后在模板代码中读取它。但实际上,如果您的解析器没有解析 anything,则根本不会进行渲染。也许您可以考虑另一种方法(Frank 的发布状态监视器和 MessageCenter 的变体)
  • 我认为您不应该为此使用 AppData,它是作为项目的附加数据,而不是存储某个操作的状态。话虽如此,我认为确实没有办法让渲染器优雅地失败,它意味着工作或完全失败。当它失败时,应该通过异常停止该过程。如果您在渲染器中发现错误并希望它继续运行,那么您唯一的选择就是记录警告,但不幸的是,它永远不会返回到发布事务。
【解决方案2】:

恐怕这是不可能的,但上面的答案可能会帮助您找到替代解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    相关资源
    最近更新 更多