Apex - gatilhos

Os gatilhos do Apex são como procedimentos armazenados que são executados quando ocorre um determinado evento. Um gatilho é executado antes e depois da ocorrência de um evento no registro.

Sintaxe

trigger triggerName on ObjectName (trigger_events) { Trigger_code_block }

Executando o gatilho

A seguir estão os eventos em que podemos disparar o gatilho -

  • insert
  • update
  • delete
  • merge
  • upsert
  • undelete

Exemplo 1 de gatilho

Suponha que recebemos um requisito de negócios de que precisamos criar um Registro de Fatura quando o campo 'Status do Cliente' do Cliente muda para Ativo de Inativo. Para isso, criaremos um gatilho no objeto APEX_Customer__c seguindo estas etapas -

Step 1 - Vá para sObject

Step 2 - Clique em Cliente

Step 3 - Clique no botão 'Novo' na lista relacionada do acionador e adicione o código do acionador conforme abaixo.

// Trigger Code
trigger Customer_After_Insert on APEX_Customer__c (after update) {
   List InvoiceList = new List();
   
   for (APEX_Customer__c objCustomer: Trigger.new) {
      
      if (objCustomer.APEX_Customer_Status__c == 'Active') {
         APEX_Invoice__c objInvoice = new APEX_Invoice__c();
         objInvoice.APEX_Status__c = 'Pending';
         InvoiceList.add(objInvoice);
      }
   }
   
   // DML to insert the Invoice List in SFDC
   insert InvoiceList;
}

Explicação

Trigger.new- Esta é a variável de contexto que armazena os registros atualmente no contexto do acionador, sendo inseridos ou atualizados. Neste caso, esta variável contém os registros do objeto Cliente que foram atualizados.

Existem outras variáveis ​​de contexto que estão disponíveis no contexto - trigger.old, trigger.newMap, trigger.OldMap.

Exemplo de gatilho 2

O gatilho acima será executado quando houver uma operação de atualização nos registros do Cliente. Suponha que o registro da fatura precise ser inserido apenas quando o Status do cliente mudar de Inativo para Ativo e não sempre; para isso, podemos usar outra variável de contextotrigger.oldMap que armazenará a chave como id de registro e o valor como valores de registro antigos.

// Modified Trigger Code
trigger Customer_After_Insert on APEX_Customer__c (after update) {
   List<apex_invoice__c> InvoiceList = new List<apex_invoice__c>();
   
   for (APEX_Customer__c objCustomer: Trigger.new) {
      
      // condition to check the old value and new value
      if (objCustomer.APEX_Customer_Status__c == 'Active' &&
      
      trigger.oldMap.get(objCustomer.id).APEX_Customer_Status__c == 'Inactive') {
         APEX_Invoice__c objInvoice = new APEX_Invoice__c();
         objInvoice.APEX_Status__c = 'Pending';
         InvoiceList.add(objInvoice);
      }
   }
   
   // DML to insert the Invoice List in SFDC
   insert InvoiceList;
}

Explicação

Usamos a variável Trigger.oldMap que, conforme explicado anteriormente, é uma variável de contexto que armazena o Id e o valor antigo dos registros que estão sendo atualizados.