Salesforce Trigger:什么时候触发.isBefore返回true还是false?取决于什么?

时间:2014-05-20 12:48:08

标签: triggers salesforce

我经常在许多SFDC触发器中看到IsAfter和IsBefore方法,但是我无法理解为这些方法提供真值或假值的逻辑! 所以,一般来说,我在某处我有Trigger.isBefore(同样的问题对IsAfter有效),我怎么能理解这个布尔值是真还是假?取决于什么? 我阅读了这些方法的文档,但只是我无法理解为什么Trigger.isBefore将返回我的真或假!这件事让我烦恼,我想我永远不会完全理解这个概念,请帮助我!

3 个答案:

答案 0 :(得分:2)

Trigger.isBefore只有在条件中具有以下一项或多项时才会返回true:

  • before delete
  • before insert
  • before update

触发器会针对其中一个条件触发。

同样适用于Trigger.isAfter,除非您需要替换"" for"之前"在条件。

大多数情况下,您将要处理Triggers and Order of Execution中的第3步和第6步。

  1. 从数据库加载原始记录或初始化upsert语句的记录。
  2. 从请求中加载新记录字段值并覆盖旧值。
  3. 执行所有before次触发器。 [Trigger.isBefore将为真]
  4. 再次运行大多数系统验证步骤,例如验证所有必填字段都具有非空值,并运行任何用户定义的验证规则。 Salesforce第二次运行的唯一系统验证(当请求来自标准UI编辑页面时)是特定于布局规则的强制执行。
  5. 将记录保存到数据库,但尚未提交。
  6. 执行所有after次触发器。 [Trigger.isAfter将为真]

答案 1 :(得分:1)

您需要阅读DML事件的“保存执行顺序”。如果您在Force.com平台上发布记录保存,很多事情都会在幕后发生,包括执行“之前”或“之后”触发。保存记录时,第一步之一是执行与记录的sObject类型关联的before触发器。最后一步之一是执行after触发器。因此isBefore只是告诉你:是的,对于这个保存事件,平台已达到保存的执行顺序中的点,现在它将自动触发一个触发器。

我希望有所帮助。

答案 2 :(得分:0)

https://www.salesforce.com/us/developer/docs/apexcode/Content/apex_triggers_context_variables.htm解释说,如果在保存任何记录之前触发了触发器,则isBefore返回true,如果在保存所有记录后触发了此触发器,则isAfter返回true。

该页面还有一个有用的示例,说明如何使用此代码来执行仅针对特定触发条件执行的代码。