Apex - Trigger

I trigger Apex sono come procedure memorizzate che vengono eseguite quando si verifica un particolare evento. Un trigger viene eseguito prima e dopo che un evento si verifica nel record.

Sintassi

trigger triggerName on ObjectName (trigger_events) { Trigger_code_block }

Esecuzione del trigger

Di seguito sono riportati gli eventi su cui possiamo attivare il grilletto:

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

Esempio di trigger 1

Supponiamo di aver ricevuto un requisito aziendale per cui dobbiamo creare un record di fattura quando il campo "Stato cliente" del cliente cambia in Attivo da Inattivo. Per questo, creeremo un trigger sull'oggetto APEX_Customer__c seguendo questi passaggi:

Step 1 - Vai a sObject

Step 2 - Fare clic su Cliente

Step 3 - Fare clic sul pulsante "Nuovo" nell'elenco correlato Trigger e aggiungere il codice trigger come indicato di seguito.

// 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;
}

Spiegazione

Trigger.new- Questa è la variabile di contesto che memorizza i record attualmente nel contesto di trigger, inseriti o aggiornati. In questo caso, questa variabile ha i record dell'oggetto Cliente che sono stati aggiornati.

Ci sono altre variabili di contesto disponibili nel contesto: trigger.old, trigger.newMap, trigger.OldMap.

Esempio di trigger 2

Il trigger di cui sopra verrà eseguito quando è presente un'operazione di aggiornamento sui record del cliente. Supponiamo che il record della fattura debba essere inserito solo quando lo Stato del cliente cambia da Inattivo ad Attivo e non ogni volta; per questo, possiamo usare un'altra variabile di contestotrigger.oldMap che memorizzerà la chiave come ID record e il valore come vecchi valori record.

// 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;
}

Spiegazione

Abbiamo utilizzato la variabile Trigger.oldMap che, come spiegato in precedenza, è una variabile di contesto che memorizza l'ID e il vecchio valore dei record che vengono aggiornati.