何时在 Salesforce 中使用之前和之后的触发器?

介绍

触发器是在 DML 事件发生之前或之后执行的顶级代码。 触发器是幕后的一个类,它具有 New、NewMap、Old 和 OldMap 等变量。 触发器应该是 散装. 它应该以相同的方式适用于单个记录以及多个记录。

Salesforce 中触发器的概念

触发器是一个 Apex 组件,一旦在任何对象上触发 DML,它就会自动执行。 假设我们在插入和更新事件之前在 Account 对象上写入了一个触发器。 然后,如果用户尝试插入或更新 Account 的记录,则触发器将根据提供的条件触发。

这意味着触发器是特定于对象的(一次可以在单个对象上创建触发器)并且以事件为中心。

Salesforce 中的触发器类型

我们在 Salesforce 中主要有两种类型的触发器

1. 触发前

这主要用于如果我们想在记录保存到数据库之前更新或验证记录的值。 这意味着将验证第一条记录,然后在触发之前将其保存。 我们不需要在触发器之前编写任何 DML 事件。

2.触发后

这种类型的触发器通常用于由于更改而需要将数据更新到单独的对象中。

它们在对数据库进行最终更改后执行。

一旦在任何对象中提交 DML,就会触发 After Trigger,触发 After Trigger 的记录是只读的。

何时在 Salesforce 中使用之前与之后的触发器?

当我们需要在保存记录之前验证或更新数据或记录值时,请使用 Before Trigger。 当我们想要访问系统设置的字段值,如 LastModifiedDate 字段并影响其他记录的更改时,请使用 After Trigger。

启动数据库操作的记录在 After Trigger 中是只读的。 如果该记录启动了触发器的执行,我们无法修改 After Trigger 中的任何字段值。 例如,我们在 Account 对象上触发了 After update DML 事件,并且我们想要更新 Account 对象上的字段值。 在这种情况下,用户将无法更改字段值,因为它将处于只读模式。 因此,在这种情况下使用 Before Trigger 而不是 After Trigger。

项目范例

例如1

trigger ContactDeletion on Contact (before delete) { //Trigger.old 包含被删除的联系人列表 for(Contact cc : Trigger.old){ if(cc.AccountId != null){ cc.addError('You cannot delete具有关联帐户的联系人'); } } }

 

例如2

在帐户上触发 AccOppTrigger(插入后){ List oppRec = new List(); for(Account acc : Trigger.new){ if(acc.Industry == 'Banking'){ Opportunity opp = new Opportunity(Name = acc.Name, StageName = 'Prospecting', AccountId = acc.Id, CloseDate = Date.今天().addDays(15)); oppRec.add(opp); } } if(!oppRec.isEmpty()){ 插入 oppRec; } }

 

发表评论

本网站使用Akismet来减少垃圾邮件。 了解您的数据如何处理.