问题 Salesforce Apex触发器 - 如何检查更新触发器中是否包含字段?


如果有人可以指导我检查更新调用中是否包含特定字段是否包含在更新前/后更新触发器中,我将非常感激。非常感谢。


1441
2018-04-05 07:30


起源



答案:


所有字段始终存在于触发器中,无论它们是否脏,要确定特定字段是否已被修改,您必须使用以下方法检索行的先前版本 oldMap 地图是一个 Map<ID, sObject> 并比较旧的和新的值。例如

trigger CaseOnParticularFieldUpdate on Case (before update) {
    for (Case c: Trigger.new) {
        Case oldCase = Trigger.oldMap.get(c.ID);
        if (c.Field != oldCase.Field) {
            // field was updated, do some magic here
        }
    }
}

13
2018-04-05 09:39



谢谢我知道如何检查字段数据是否被修改。然而,我的问题与这种情况有关。列出<帐户> aclist = [从帐户中选择id,name,email__c]; for(Account a:aclist){a.email__c = a.name+'@gmail.com';更新aclist;现在,当这个触发器运行时会发生什么:触发账户(更新前){for(账户a:trigger.new){if(a.accountNumber == null){a.accountnumber ='NA';更新帐户的accountnumber字段会被更改吗? - Mustafa Turab Ali
是。正如我所说,触发器包括所有sObject字段。它不像visualforce / apex扩展,它只预加载VF中引用的字段。 - mmix


答案:


所有字段始终存在于触发器中,无论它们是否脏,要确定特定字段是否已被修改,您必须使用以下方法检索行的先前版本 oldMap 地图是一个 Map<ID, sObject> 并比较旧的和新的值。例如

trigger CaseOnParticularFieldUpdate on Case (before update) {
    for (Case c: Trigger.new) {
        Case oldCase = Trigger.oldMap.get(c.ID);
        if (c.Field != oldCase.Field) {
            // field was updated, do some magic here
        }
    }
}

13
2018-04-05 09:39



谢谢我知道如何检查字段数据是否被修改。然而,我的问题与这种情况有关。列出<帐户> aclist = [从帐户中选择id,name,email__c]; for(Account a:aclist){a.email__c = a.name+'@gmail.com';更新aclist;现在,当这个触发器运行时会发生什么:触发账户(更新前){for(账户a:trigger.new){if(a.accountNumber == null){a.accountnumber ='NA';更新帐户的accountnumber字段会被更改吗? - Mustafa Turab Ali
是。正如我所说,触发器包括所有sObject字段。它不像visualforce / apex扩展,它只预加载VF中引用的字段。 - mmix


触发器将包括调用它的那个sobject的所有字段。您可以检查该对象中任何字段的先前(旧)值和当前(新)值,并可以对其进行比较并相应地执行操作。

希望它能帮到你。


1
2018-05-12 12:04