Я был бы очень признателен, если бы кто-нибудь помог мне проверить, включено ли конкретное поле в вызов обновления внутри триггера обновления до/после. Большое спасибо.
Триггеры Salesforce Apex — как проверить, включено ли поле в триггер обновления?
Ответы (2)
Все поля всегда присутствуют в триггере, независимо от того, являются ли они грязными или нет. Чтобы убедиться, что конкретное поле было изменено, вы должны получить предыдущую версию строки, используя карту 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
}
}
}
person
mmix
schedule
05.04.2011
спасибо, я знаю, как проверить, изменены ли данные поля. однако мой вопрос связан с этим сценарием. Список‹Учетная запись› aclist = [выберите идентификатор, имя, адрес электронной почты__c из учетной записи]; for(Account a : aclist) { a.email__c = a.name+'@gmail.com'; } обновить aclist; теперь, что произойдет, когда этот триггер запустится: триггер для учетной записи (до обновления) { for(Account a : trigger.new) { if(a.accountNumber==null) { a.accountnumber='NA'; } } } будут ли изменены поля accountnumber для обновляемых аккаунтов?
- person Mustafa Turab Ali; 06.04.2011
да. Как я уже сказал, триггер включает ВСЕ поля sObject. Это не похоже на расширение visualforce/apex, которое только предварительно загружает поля, на которые есть ссылки в VF.
- person mmix; 06.04.2011
Триггер будет включать все поля того объекта, для которого он вызывается. Вы можете проверить предыдущее (старое) значение и текущее (новое) значение любого поля в этом объекте, сравнить его и выполнить операцию соответственно.
Надеюсь, это поможет вам.
person
Promila
schedule
12.05.2014