首页 > 解决方案 > 如何使用 System.TriggerOperation 枚举

问题描述

有一个Salesforce允许使用TriggerOperation枚举的新功能。与传统触发器相比,我找不到任何示例如何使用这种方法。例如,如何替换此代码:

trigger TriggerName on ObjectName (before delete, before insert, before update,
                                   after delete, after insert, after update) {

    if (Trigger.isBefore) {
       if (Trigger.isInsert) { // do something }
       if (Trigger.isUpdate { // do something }
    } else {
       if (Trigger.isInsert) { // do something }
       if (Trigger.isUpdate { // do something }
    }
}

谢谢。

标签: salesforce

解决方案


来自salesforce.stackexchange.com的回答

根据Summer 18Apex 开发人员指南,System.TriggerOperation 类中引入了 7 个新的 Enum 值。

AFTER_DELETE AFTER_INSERT AFTER_UNDELETE AFTER_UPDATE BEFORE_DELETE BEFORE_INSERT BEFORE_UPDATE

类似地,在名为 as 的 Trigger 类中添加了一个新变量,该变量operationType存储了它正在执行的上下文枚举。

因此,您使用 switch case 的触发器将如下所示:

 trigger AccountTrigger on Account (before delete, before insert, before update, 
                                    after delete, after insert, after update) {

    switch on Trigger.operationType {
        when AFTER_INSERT{
            //do after insert stuff
        }
        when AFTER_UPDATE{
            //Do after update stuff
        } 

    }
}

没有失败。当代码块执行完一个>特定的when块后,switch语句退出

切换语句

我的补充

您还可以执行以下操作

 trigger AccountTrigger on Account (before delete, before insert, before update, 
                                    after delete, after insert, after update) {
    if (Trigger.operationType == TriggerOperation.AFTER_INSERT) {
        // do after insert stuff
    } 
}

最后是非常个人化的恕我直言 - 这只是一种语法糖,对于使用良好触发器架构的人来说没有任何利润


推荐阅读