SDL Tridion事件处理程序2011中的阶段

时间:2012-07-16 08:59:11

标签: tridion tridion-2011

难以理解事件阶段。

1)考虑“组件保存”操作。当根据内容规则覆盖内容时,可以在“已启动”阶段完成。如果内容违反内容规则,则可以在“已启动”或“已处理”事件阶段中抛出错误。

当“已启动”阶段本身对于内容覆盖和内容规则验证都足够时,“已处理”阶段何时有用? PLS。用一个例子来解释。

2)在保存和关闭组件时,会触发“保存”和“检入”事件。在“保存”操作的“已处理”阶段之后,将执行CheckIn操作。如果在CheckIn操作的“已启动”/“已处理”阶段出现任何错误,则会执行“保存”操作的“TransactionAborted”阶段。

上面是我能想到的'TrasactionAborted'的唯一例子。你能提供任何其他有助于理解'TrasactionAborted'阶段的例子吗?

2 个答案:

答案 0 :(得分:6)

我试图在以下关于SDL Tridion World的文章SDL Tridion 2011 .NET events中完整解释SDL Tridion 2011事件阶段,事件类型和主题类型。

简而言之,阶段按特定顺序触发,因此您可以在特定时间挂钩操作,顺序如下:

  1. 启动阶段
  2. CMS行动发生(不是阶段)
  3. 已处理阶段
  4. 其中一个事务阶段(如果事务成功则为TransactionCommitted,事务中止时为TransactionAborted;当事务状态无法确定时为TransactionInDoubt,则既不提交也不中止,永远不会出现)
  5. 因此,如果你想在保存项目之前做一些事情(比如对项目进行有效性检查,在这种情况下你可能想要阻止它被保存,你最好使用Initiated阶段,但如果你想在项目保存后做一些事情(比如把它放在一个页面上),你应该使用Transaction Committed阶段(在这种情况下可能是Check-in,而不是Save事件)。

    那么,什么时候处理阶段变得有用,我就永远不会想到一个简单的用例,但我确信在某些情况下它会在某些时候派上用场。它存在的事实并不意味着你需要马上使用它。

答案 1 :(得分:6)

Ad1:在启动阶段,项目尚未保存到数据库,并且没有要回滚的事务。如果要验证数据,则应在更改数据库中的任何内容之前执行此操作。当然,支持事务,当你提出异常时一切都会好的,但是你执行了不必要的操作,这些都会增加性能图片。

已处理对于您不使用项目内容本身但应该能够回滚更改的情况非常有用。例如:写入存档或高度关键业务事件日志的能力。

另一种情况是在本地化子项上设置翻译必需标志。如果失败,您可能也想要取消对父项的更改(出于某种原因)。

Ad2:通常,当发生任何异常时,将触发“已中止事务”。也许你可以在第2点详细说明一点?