Salesforce触发器
触发器定义的语法不同于类定义的语法。 触发器定义以trigger关键字开始。 之后是触发器的名称,触发器所关联的Salesforce对象以及触发的条件。 触发器具有以下语法:
trigger TriggerName on ObjectName (trigger_events) { code_block }
要在插入,更新,删除和取消删除操作之前或之后执行触发器,请在逗号分隔列表中指定多个触发器事件。 您可以指定的事件是:
- before insert
- before update
- before delete
- after insert
- after update
- after delete
- after undelete
现在我们来创建一个触发器 :
在插入客户并将消息写入调试日志之前,触发这个简单的触发器
首先 , 进入开发者控制台 单击File
| New
| Apex Class
创建一个触发器 , 为触发器命名为 HelloWorldTrigger
, 选择 sObject的Account
点击提交。
输入代码 :
// An highlighted block
System.debug('Hello World');
点击保存 .
想要测试触发器 , 我们还需要创建一个客户
点击 Debug
选择 Open Execute Anonymous Window
在新窗口中,添加以下代码,然后单击Execute
。
Account a = new Account(Name=‘Test Trigger’);
insert a;
然后输入 " USER "
在调试日志中,找到Hello World! 声明。 日志还显示触发器已被执行
触发器调用类方法
可以通过触发器调用公用方法。 调用其他类的方法可以重用代码,减少触发器的大小,并且可以提高Apex代码的维护。
首先 , 我们进入开发者控制台 点击 File
| New
| Apex Trigger
Name : ExampleTrigger
sObject : Contact
点击提交
接着将默认代码替换为以下内容,然后将sendMail()中的电子邮件地址占位符文本修改为您的电子邮件地址 (由于操作与上面相似 , 这里我就不演示了)
trigger ExampleTrigger on Contact (after insert, after delete) {
if (Trigger.isInsert) {
Integer recordCount = Trigger.New.size();
// 从另一个类调用实用程序方法
EmailManager.sendMail(‘您的电子邮件地址’, ‘触发教程’,
recordCount + ‘ contact(s) were inserted.’);
}
else if (Trigger.isDelete) {
// 删除后处理
}
}
Ctrl+S.保存
测试触发器,请创建一个联系人
单击 Debug
| Open Execute Anonymous Window
在小窗口复制以下代码 :
Contact c = new Contact(LastName=’Test Contact’);
insert c;
在调试日志中,检查触发器是否被触发。 在日志末尾,找到实用程序方法编写的调试消息:DEBUG | Email发送成功
现在检查您是否收到一封电子邮件,其中正文1个联系人已被插入
在这里,注意一下Apex(before) triggers、Apex(after) triggers这两个事件。在这两个事件中间,数据会被保存到数据库(并没有committed),在after triggers事件之后,数据将被Commit到数据库。上面MyFirstTriggerForAccount要定义为before event还是after event?假设我们定义为after event,那么数据库操作将会执行两次,第一次保存我们新建的Account的基本信息,第二次将会修改我们的Description信息。如果用before event呢,数据库只会执行一次保存操作,所以我们将采用before insert,因为只在插入数据的时候才触发该逻辑块。我们的触发器将进一步完善。
trigger MyFirstTriggerForAccount on Account(before insert){
code_block
}
code_block编写完成后,将会是下面的样子:
trigger MyFirstTriggerForAccount on Account(before insert){
for(Account a : Trigger.New) {
if(a.Description == null || a.Description == ''){
a.Description = 'New';
}
}
}