Контекст триггера - 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   
          ...  
      }  
    }  
 }  






Комментарии

Популярные сообщения из этого блога

Начало работы, первые шаги, hello world в Salesforce