Tridion 事件系统-在发布页面时是否可以发布其他页面?

Tridion 事件系统-在发布页面时是否可以发布其他页面?,tridion,Tridion,我对Tridion 2011中的事件系统有一个问题……当其他页面发送到发布队列时,是否可以发布另一个页面 我们目前有一个XML文件,用于定义我们的站点导航和站点地图,但不幸的是,当前需要在每次向网站添加新页面时手动发布 我担心的是,从events系统自动发布也需要多次发布同一页面,而实际上,它只需要在发布队列中的最后一项结束其事务后才需要发布。这是在实现过程中多次出现的问题,当然,导航或站点地图取决于发布的项目(我认为这不是一个理想的情况) 一个可能的解决方案是使用事件系统将生成XML的页面以低

我对Tridion 2011中的事件系统有一个问题……当其他页面发送到发布队列时,是否可以发布另一个页面

我们目前有一个XML文件,用于定义我们的站点导航和站点地图,但不幸的是,当前需要在每次向网站添加新页面时手动发布


我担心的是,从events系统自动发布也需要多次发布同一页面,而实际上,它只需要在发布队列中的最后一项结束其事务后才需要发布。

这是在实现过程中多次出现的问题,当然,导航或站点地图取决于发布的项目(我认为这不是一个理想的情况)

一个可能的解决方案是使用事件系统将生成XML的页面以低优先级放置在发布队列中。这将(在某种程度上)确保仅在执行常规发布操作后发布。现在,第二个事件应该检查这个页面是否已经在队列中,所以它不会再次添加它

请记住,这不会阻止它一天被发布多次,但至少应该确保它不会在队列中出现两次。在具有专用多线程发布服务器的快速系统上,这很可能意味着它仍然会根据您的活动等每隔一小时左右发布一次


另一种选择是计划每天发布该页面一次,使用事件系统重复该过程,以便每天在同一时间只发布一次。这会降低XML的准确性,因为它每天只更新一次,但会防止发布队列被填满太多。这可能是一个问题。

您可以通过订阅PublishTransaction保存事件来发布每个事务的站点地图(可以包含许多页面、结构组等)

您可以考虑验证发布队列,看看是否有等待事务,但从理论上讲,这可以推迟站点地图发布一段非常长的时间。

EventSystem.SubscribeAsync(
(主题、参数、阶段)=>
{
如果(!PublishTransactionStateIssuccessfullyCompleted(主题))
返回;
//发布站点地图的代码
},
EventPhases.TransactionCommitted
);
静态bool PublishTransactionStatesIssuccessfullyCompleted(PublishTransaction事务)
{
return transaction.State==PublishTransactionState.Success||
transaction.State==PublishTransactionState.Warning;
}

每当你想更改Tridion为响应发布操作而发布的项目数量时,我的大脑会立即尖叫自定义解析器

克里斯·萨默斯(Chris Summers)不久前写了一篇关于他与他们相处经历的精彩文章:

努诺把他的经历写得更简洁一些:


在我看来,您应该简单地将导航添加到ResolvedItems集合中。如果您始终使用解析程序,您也不会得到您似乎担心的大量发布事务,而是在一个事务中发布(和部署)所有相关项。

太好了,我使用了这个示例,效果非常好,因为使用异步事件似乎不会阻塞发布队列!现在只想弄清楚发布事务是否是队列中的最后一个事务,嘿,普雷斯托!也许定制解析器会更好,但是站点地图将成为事务的一部分——我喜欢巴特的建议,以较低的优先级发布站点地图。并不是所有的网站地图建设者都这么快。。此外,当您取消发布页面时,您也希望重新发布您的站点地图,这与解析程序当时处理的操作相反。对抗系统无疑是提高作业安全性的有效方法。我更愿意接受这个系统,并将其视为解决其他问题的绝佳机会:比如站点地图需要很长时间才能生成。再说一次,我也是一个从家里慢慢剥开管道胶带的家伙,然后不得不打电话给handy man,因为修复漏洞是我不能做的一件事。取决于网站地图的生成方式以及它的重量,我最初也在想一个自定义解析器,但理查德明确表示,他担心的是,这一页不应该被发布多次。自定义冲突解决程序将在每次发布事务中发布它,如果您发布了很多单个页面,这可能会成为一个问题。再次感谢您的帮助。老实说,在阅读Frank的答案之前,我不知道自定义解析器,因此它提供了大量信息,是一次学习经历——尽管如此,我还是很感激:)