6

难以理解事件阶段。

1) 考虑组件保存操作。当要根据内容规则覆盖内容时,可以在“启动”阶段进行。如果内容违反内容规则,则可能在“已启动”或“已处理”事件阶段引发错误。

当“已启动”阶段本身足以用于内容覆盖和内容规则验证时,“已处理”阶段何时有用?请。举例说明。

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

以上是我能想到的“TrasactionAborted”的唯一例子。您能否提供任何其他有助于理解“TrasactionAborted”阶段的示例?

4

2 回答 2

6

我已尝试在以下有关 SDL Tridion World 的文章中对 SDL Tridion 2011 事件阶段、事件类型和主题类型进行完整解释:SDL Tridion 2011 .NET events

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

  1. 开始阶段
  2. CMS 动作发生(不是阶段)
  3. 处理阶段
  4. 事务阶段之一(如果事务成功,则为 TransactionCommitted,如果事务中止,则为 TransactionAborted,当无法确定事务状态时,则为 TransactionInDoubt,既不提交也不中止,永远不会)

因此,如果您想在保存项目之前做某事(例如对项目进行有效性检查,在这种情况下您可能希望阻止它被保存,您最好使用 Initiated 阶段,但如果您想在之后做某事该项目已被保存(如将其放在页面上),您应该使用事务提交阶段(在这种情况下可能是签入阶段,而不是保存事件)。

所以 Processed 阶段什么时候有用,我永远想不出一个简单的用例,但我确信在某些情况下它会在某个时候派上用场。它存在的事实并不意味着您需要立即使用它。

于 2012-07-16T09:19:08.787 回答
6

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

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

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

Ad2:一般情况下,任何异常都会触发Transaction Aborted。也许您可以详细说明第 2 点?

于 2012-07-16T09:52:36.977 回答