1.使用Apex触发器
Apex触发器使您能够在Salesforce中记录的事件之前或之后执行自定义操作,例如插入、更新或删除。
就像数据库系统支持触发器一样,Apex为管理记录提供了触发器支持。
通常,使用触发器根据特定条件执行操作,修改相关记录或限制某些操作的发生。
您可以使用触发器执行Apex中可以执行的任何操作,包括执行SOQL和DML或调用自定义Apex方法。
使用触发器执行无法使用Salesforce用户界面中的点击工具完成的任务。
例如,如果验证字段值或更新记录上的字段,请改用验证规则和工作流规则。
可以为Apex标准对象定义触发器,例如帐户或联系人、自定义对象和一些标准子对象。
默认情况下,触发器在创建时处于活动状态。
当指定的数据库事件发生时,Salesforce会自动触发活动触发器。
2.触发器语法
触发器定义的语法与类定义的语法不同。
触发器定义以触发器关键字开始。
随后是触发器的名称、与触发器关联的Salesforce对象以及触发条件。
触发器具有以下语法:
trigger TriggerName on ObjectName (trigger_events) {
code_block
}
要在插入、更新、删除和取消删除操作之前或之后执行触发器,请在逗号分隔的列表中指定多个触发器事件。
可以指定的事件有:
before insert
before update
before delete
after insert
after update
after delete
after undelete
两种触发器:Before触发器、After触发器
Before触发器用于在记录值保存到数据库之前更新或验证记录值。
After触发器用于访问系统设置的字段值(例如记录的Id或LastModifiedDate字段),并影响其他记录中的更改。
触发after触发器的记录是只读的。
3.使用上下文变量
要访问导致触发的记录,请使用上下文变量。
例如,Trigger.New包含插入或更新触发器中插入的所有记录。
Trigger.Old提供更新触发器中更新之前的旧版本Sobject,或删除触发器中已删除Sobject的列表。
触发器可以在插入一条记录时触发,或者在通过API或Apex批量插入多条记录时触发。
因此,上下文变量(如Trigger.New)只能包含一条记录或多条记录。
您可以迭代Trigger.New以获取每个单独的sObject。
此示例是HelloWorldTrigger示例触发器的修改版本。
它在for循环中迭代每个帐户,并更新每个帐户的Description字段。
trigger HelloWorldTrigger on Account (before insert) {
for(Account a : Trigger.New) {
a.Description = 'New description';
}
}
在触发器完成执行后,系统保存触发前触发器的记录。
您可以修改触发器中的记录,而无需显式调用DML insert或update操作。
如果对这些记录执行DML语句,则会出现错误。
其他一些上下文变量返回一个布尔值,以指示触发器是由于更新还是其他事件触发的。
当触发器组合多个事件时&#