Контекст триггера - trigger runtime context
Класс System.Trigger предоставляет возможность получить доступ к контексту выполнения. Ниже приведен список переменных и коллекций, без использования которых работа любого триггера невозможна.
isExecuting | Возвращает TRUE, если текущий контекст вызван из триггера. |
isInsert | Возвращает TRUE, если триггер запущен в результате DML операции insert |
isUpdate | Возвращает TRUE, если триггер запущен в результате DML операции update |
isDelete | Возвращает TRUE, если триггер запущен в результате DML операции delete |
isBefore | Возвращает TRUE, если триггер запущен ДО записи данных в базу данных |
isAfter | Возвращает TRUE, если триггер запущен ПОСЛЕ записи данных в базу данных |
isUndelete | Возвращает TRUE, если триггер запущен в результате операции восстановления записи из Корзины. |
new | Возвращает список "новых версий" записей. ! Важно запомнить, что данный список доступен только при вызове триггера в результате операций insert и update и может быть изменен только перед записью данных в базу данных (on before) |
newMap |
Словарь - ID записи = "новое значение" записи
!Словарь доступен только при вызове триггере результате операций before update, after insert и after update |
old | Возвращает список "старых версий" записей.
!Список доступен при вызове триггера в результате операций update и delete
|
oldMap | Словарь - ID записи = "старое значение" записи |
Коллекции необходимы для того чтобы получить и обработать данные приходящие в триггер в результате DML операций.
Переменные состояния триггера используются для разделения логики выполнения триггера в зависимости от типа DML операции, в результате которой вызван триггер.
Вот небольшой пример. При написании триггера вы можете разделить логику между различными триггерами, повешенными на один объект. Но я советую всю логику, касающуюся одного объекта поместить в один триггера и разделить использую переменные состояния (is...)
trigger ContactTrigger on Contact (before delete, before insert, before update, after delete, after insert, after update) {
if (Trigger.isBefore){
if (Trigger.isInsert){
// before insert
...
}
if (isDelete){
// before delete
...
}
} else {
if (Trigger.isInsert){
// after insert
...
}
}
}
Комментарии
Отправить комментарий