Apex - Déclencheurs

Les déclencheurs Apex sont comme des procédures stockées qui s'exécutent lorsqu'un événement particulier se produit. Un déclencheur s'exécute avant et après qu'un événement se soit produit sur l'enregistrement.

Syntaxe

trigger triggerName on ObjectName (trigger_events) { Trigger_code_block }

Exécution du déclencheur

Voici les événements sur lesquels nous pouvons lancer la gâchette -

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

Exemple de déclenchement 1

Supposons que nous ayons reçu une exigence commerciale selon laquelle nous devions créer un enregistrement de facture lorsque le champ «Statut du client» du client passe à Actif à Inactif. Pour cela, nous allons créer un déclencheur sur l'objet APEX_Customer__c en suivant ces étapes -

Step 1 - Aller à sObject

Step 2 - Cliquez sur Client

Step 3 - Cliquez sur le bouton 'Nouveau' dans la liste associée Déclencheur et ajoutez le code de déclenchement comme indiqué ci-dessous.

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

Explication

Trigger.new- Il s'agit de la variable de contexte qui stocke les enregistrements actuellement dans le contexte du déclencheur, en cours d'insertion ou de mise à jour. Dans ce cas, cette variable contient les enregistrements de l'objet Client qui ont été mis à jour.

Il existe d'autres variables de contexte disponibles dans le contexte - trigger.old, trigger.newMap, trigger.OldMap.

Exemple de déclenchement 2

Le déclencheur ci-dessus s'exécutera lorsqu'il y aura une opération de mise à jour sur les enregistrements client. Supposons que l'enregistrement de facture ne doit être inséré que lorsque le statut du client passe de Inactif à Actif et pas à chaque fois; pour cela, nous pouvons utiliser une autre variable de contextetrigger.oldMap qui stockera la clé comme identifiant d'enregistrement et la valeur comme anciennes valeurs d'enregistrement.

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

Explication

Nous avons utilisé la variable Trigger.oldMap qui, comme expliqué précédemment, est une variable de contexte qui stocke l'ID et l'ancienne valeur des enregistrements en cours de mise à jour.