小白Salesforce---如何避免Trigger重复触发?

在绝大多数业务场景中,我们都不希望Trigger被重复执行。可以利用static variable来控制trigger中的逻辑是否执行,间接的避免trigger被重复执行, 避免governor limit以及其他未知错误。

想象下,你想要更新A Object的某个字段,before trigger会被触发,字段被更新后,又会执行一个workflow, 而workflow的逻辑也是要更新该表的某一字段。所以该before trigger在同一transction就会被无情的执行两次。同样的,有时在执行batch对某个表进行DML操作时,其实我们内心是拒绝让该object 上的trigger被触发的。考虑到这些情形,用static变量来做一个全局的开关还是很方便的。

在 RecursiveTriggerHandler 类中, 我们设置了一个 static类型的变量 ,初始值是true.

public class RecursiveTriggerHandler{
     public static Boolean isFirstTime = true;
}

在下面的trigger中,我们Check是否这个变量的值是true,只有在true时才会执行trigger的逻辑。然后在trigger第一次执行时把变量值更改为false,这样,当第二次trigger被触发时,就会跳出执行逻辑,避免了trigger的重复触发。

trigger SampleTrigger on Contact (after update){
 
    Set<String> accIdSet = new Set<String>();
     
    if(RecursiveTriggerHandler.isFirstTime){
        RecursiveTriggerHandler.isFirstTime = false;
         
        for(Contact conObj : Trigger.New){
            if(conObj.name != 'SFDC'){
                accIdSet.add(conObj.accountId);
            }
        }
         
        // Use accIdSet in some way
    }
}

  

转载于:https://www.cnblogs.com/wicky-666/p/8510224.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值