Création et gestion de déclencheurs (Triggers) dans Salesforce

Partagez cet article

Objectifs

  • Comprendre ce qu’est un déclencheur (Trigger) Apex dans Salesforce.
  • Apprendre à créer et déployer des déclencheurs Apex.
  • Comprendre les différents contextes d’exécution des déclencheurs.
  • Apprendre à gérer les déclencheurs pour maintenir des performances et une organisation efficaces.

Prérequis

  • Un compte Salesforce. Vous pouvez en créer un gratuitement sur Salesforce Developer.
  • Connexion à votre compte Salesforce.

1. Qu’est-ce qu’un déclencheur (Trigger) Apex ?

Un déclencheur Apex est un morceau de code qui s’exécute automatiquement en réponse à certains événements sur des enregistrements Salesforce, tels que l’insertion, la mise à jour ou la suppression d’un enregistrement. Les déclencheurs sont utilisés pour effectuer des opérations avant ou après les événements DML (Data Manipulation Language).

Types de déclencheurs :

  • Avant les événements (before insert, before update, before delete)
  • Après les événements (after insert, after update, after delete, after undelete)

2. Création d’un déclencheur Apex

Exemple : Déclencheur Simple sur l’objet Account

  1. Accéder à l’éditeur Apex
    • Connectez-vous à Salesforce et naviguez vers Setup.
    • Dans la barre de recherche rapide, tapez “Apex Triggers” et sélectionnez Apex Triggers.
    • Cliquez sur New pour créer un nouveau déclencheur.
  2. Écrire le déclencheur
    • Nom du déclencheur : AccountTrigger
    • Objet associé : Account
    • Code du déclencheur :
trigger AccountTrigger on Account (before insert) {
for (Account acc : Trigger.new) {
acc.Description = 'New Account Created: ' + acc.Name;
}
}
  • Cliquez sur Save pour enregistrer le déclencheur.

    3. Contextes d’exécution des déclencheurs

    Les déclencheurs peuvent s’exécuter dans différents contextes, déterminés par des mots-clés spéciaux dans Apex :

    Explications détaillées

    • Trigger.new et Trigger.old : Utilisez ces contextes pour accéder aux enregistrements avant et après les événements de déclenchement respectivement. Par exemple, lors de l’insertion d’un nouvel enregistrement, Trigger.new contiendra les valeurs de l’enregistrement inséré.
    • Trigger.newMap et Trigger.oldMap : Utilisez ces maps pour accéder rapidement aux enregistrements par leur ID. Cela est particulièrement utile lorsque vous avez besoin de comparer les valeurs d’un enregistrement avant et après une mise à jour.
    • Trigger.isExecuting : Vérifie si le déclencheur est actuellement en cours d’exécution, ce qui peut être utile pour éviter des boucles infinies ou des appels récursifs.
    • Trigger.isInsert, Trigger.isUpdate, et Trigger.isDelete : Utilisez ces contextes pour déterminer le type d’événement DML qui a déclenché l’exécution du déclencheur. Cela permet de conditionner l’exécution du code en fonction de l’opération en cours.
    • Trigger.isBefore et Trigger.isAfter : Utilisez ces contextes pour exécuter la logique avant ou après l’événement DML respectivement. Par exemple, vous pouvez valider ou modifier des valeurs d’enregistrement avant leur insertion en utilisant Trigger.isBefore.

    4. Gestion des déclencheurs

    Meilleures pratiques pour gérer les déclencheurs

    1. Un déclencheur par objet : Limitez un seul déclencheur par objet pour simplifier la gestion et la maintenance du code.
    2. Utiliser des gestionnaires de déclencheurs : Déléguez la logique des déclencheurs à des classes de gestionnaires séparées.
    3. Gérer les exécutions en masse : Écrivez du code qui peut traiter plusieurs enregistrements à la fois pour respecter les limites de gouvernance de Salesforce.
    A lire aussi :  Salesforce DX CLI: 4 étapes pour configurer son environnement

    Exemple : Gestionnaire de déclencheurs

    1. Créer la classe de gestionnaire
      • Dans l’éditeur Apex, créez une nouvelle classe nommée AccountTriggerHandler.
      • Code de la classe :
    public class AccountTriggerHandler {
        public static void onBeforeInsert(List<Account> newAccounts) {
            for (Account acc : newAccounts) {
                acc.Description = 'New Account Created: ' + acc.Name;
            }
        }
    }
    1. Modifier le déclencheur pour utiliser le gestionnaire
    • Code du déclencheur modifié :
    trigger AccountTrigger on Account (before insert) {
        if (Trigger.isBefore && Trigger.isInsert) {
            AccountTriggerHandler.onBeforeInsert(Trigger.new);
        }
    }

    5. Exemples avancés de déclencheurs

    Déclencheur avant mise à jour

    Mettre à jour le champ Last_Activity_Date__c lorsque le champ Activity__c change.

    trigger AccountTrigger on Account (before update) {
    for (Account acc : Trigger.new) {
    Account oldAcc = Trigger.oldMap.get(acc.Id);
    if (acc.Activity__c != oldAcc.Activity__c) {
    acc.Last_Activity_Date__c = Date.today();
    }
    }
    }

    Déclencheur après suppression

    Supprimer les contacts associés lorsqu’un compte est supprimé.

    trigger AccountTrigger on Account (after delete) {
    List<Contact> contactsToDelete = [SELECT Id FROM Contact WHERE AccountId IN :Trigger.oldMap.keySet()];
    delete contactsToDelete;
    }

    Conclusion

    Vous avez maintenant appris les bases de la création et de la gestion des déclencheurs Apex dans Salesforce. Vous savez comment écrire des déclencheurs pour différentes opérations DML et comment organiser le code des déclencheurs pour une gestion efficace. En suivant ces meilleures pratiques, vous pouvez maintenir la performance et la lisibilité de votre code Apex.


    Partagez cet article

    Publications similaires