Salesforce触发器

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';
        }
    }   
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我头发乱了伢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值