Skip to main content

Abonnement aux événements de modification à l’aide d’un déclencheur Apex

Objectifs de formation

Une fois cette unité terminée, vous pourrez :

  • Utiliser un déclencheur Apex pour vous abonner à des événements de modification
  • Générer des notifications d’événement de modification en effectuant des mises à jour dans Salesforce.
  • Vérifier les messages du journal de débogage du déclencheur dans le journal de débogage
Remarque

Remarque

Vous souhaitez apprendre en français ? Dans ce badge, les validations de défi pratique Trailhead se font en anglais. Les traductions sont fournies entre parenthèses à titre de référence. Dans votre Trailhead Playground, veillez (1) à définir les États-Unis comme région, (2) à sélectionner l’anglais comme langue, et (3) à copier et coller uniquement les valeurs en anglais. Suivez les instructions ici.

Consultez le badge Trailhead dans votre langue pour découvrir comment profiter de l’expérience Trailhead traduite.

Vous avez vu comment vous abonner aux événements de modification à l’aide d’EMP Connector, un outil construit sur CometD. Les déclencheurs Apex sont un autre moyen de s’abonner aux événements de modification. Apprenons-en plus sur ces derniers.

Déclencheurs Apex asynchrones relatifs aux événements de modification

Vous pouvez souscrire aux événements de modification en utilisant des déclencheurs Apex sur la plate-forme Lightning. Les déclencheurs Apex relatifs aux événements de modification sont semblables aux déclencheurs Apex pour les objets Salesforce, mais présentent toutefois quelques différences. À l’instar des déclencheurs Apex pour les objets Salesforce, un déclencheur d’événement de modification se définit sur l’événement de modification correspondant à l’objet Salesforce. Seuls les déclencheurs AFTER INSERT sont pris en charge. 

Pour associer un déclencheur d’événements de modification à un événement de modification, utilisez le mot-clé after insert en employant le format suivant :

trigger TriggerName on ChangeEventName (after insert) {
}

Voici un exemple pour l’objet AccountChangeEvent, qui est l’événement de modification correspondant à Account.

trigger MyAccountChangeTrigger on AccountChangeEvent (after insert) {
}

Un déclencheur d’événements de modification s’active lorsqu’il reçoit un ou plusieurs lots d’événements de modification. Contrairement aux déclencheurs d’objets, les déclencheurs d’événements de modification s’exécutent de manière asynchrone une fois la transaction de base de données effectuée. L’exécution asynchrone rend les déclencheurs d’événements de modification idéaux pour le traitement d’une logique métier gourmande en ressources et permet de conserver la logique transactionnelle dans le déclencheur d’objets. En dissociant le traitement des modifications, les déclencheurs d’événements de modification contribuent à réduire le temps de traitement des transactions.

Les déclencheurs d’événements de modification présentent les caractéristiques suivantes :

  • Ils s’exécutent sous l’entité Processus automatisé. En conséquence, les journaux de débogage du déclencheur sont créés par l’entité Processus automatisé et les champs système, comme CreatedById et OwnerId, référencent cette même entité.
  • Ils sont soumis aux limitations du gouverneur synchrone Apex.
  • Ils ont une taille de lot maximale de 2 000 messages d’événement (ce qui correspond au nombre d’éléments dans Trigger.New).

Enregistrements d’événement de modification Apex et champs d’en-tête

Étant donné que les champs d’un message d’événement de modification sont définis de manière statique comme dans tout autre type Apex, tous les champs de l’enregistrement sont conservés. Contrairement aux événements de modification reçus dans des applications CometD externes, les messages d’événement de modification Apex peuvent contenir des champs vides (Null). Les champs non modifiés ont pour valeur Null, tout comme les champs pour lesquels cette valeur est explicitement définie lors d’une mise à jour. 

Pour déterminer quels champs ont été modifiés, utilisez le champ d’en-tête changedFields. Il contient une liste des champs d’enregistrement qui ont été modifiés lors d’une opération de mise à jour. L’exemple de déclencheur de cette unité montre comment utiliser le champ changedFields pour déterminer quels champs ont été mis à jour ou supprimés.

Remarque

Le champ d’en-tête changedFields est disponible pour les déclencheurs d’événements de modification Apex enregistrés par le biais de l’API version 47.0 ou supérieure.

Création d’un déclencheur d’événements de modification

Ajouter un déclencheur d’événements de modification est tout aussi simple que d’ajouter un déclencheur d’objets Salesforce. Cela implique de créer, à l’aide de la Developer Console, un déclencheur pour l’événement de modification relatif à l’objet personnalisé Employee que vous avez créé précédemment. Le système a automatiquement créé l’objet d’événement de modification Employee__ChangeEvent lorsque vous avez créé l’objet personnalisé. 

Remarque

Pour effectuer les étapes suivantes, vous devez d’abord créer l’objet personnalisé Employee__c. Suivez les étapes énoncées dans l’unité précédente pour créer cet objet personnalisé. 

Pour créer le déclencheur d’événement de modification à l’aide de la Developer Console, suivez ces étapes :

  1. Cliquez sur le menu d’accès rapide (Menu d’accès rapide).
  2. Cliquez sur Developer Console.
  3. Dans la Developer Console, sélectionnez Fichier | Nouveau | Déclencheur Apex.
  4. Dans le champ Nom, saisissez le nom du déclencheur : EmployeeChangeTrigger.
  5. Dans la liste déroulante, sélectionnez l’objet d’événement de modification pour l’objet Employee personnalisé : Employee__ChangeEvent. Vous pouvez créer le déclencheur en utilisant le mot-clé after insert.
  6. Remplacez le contenu par défaut par le code suivant :
trigger EmployeeChangeTrigger on Employee__ChangeEvent (after insert) {
  List<Task> tasks = new List<Task>();
  // Iterate through each event message.
  for (Employee__ChangeEvent event : Trigger.New) {
    // Get some event header fields
    EventBus.ChangeEventHeader header = event.ChangeEventHeader;
    System.debug('Received change event for ' +
      header.entityName +
      ' for the ' + header.changeType + ' operation.');
    // For update operations, we can get a list of changed fields
    if (header.changetype == 'UPDATE') {
        System.debug('List of all changed fields:');
        for (String field : header.changedFields) {
            if (null == event.get(field)) {
                System.debug('Deleted field value (set to null): ' + field);
            } else {
                System.debug('Changed field value: ' + field + '. New Value: '
                    + event.get(field));
            }
        }
    }
    // Get record fields and display only if not null.
    System.debug('Some Employee record field values from the change event:');
    if (event.First_Name__c != null) {
      System.debug('First Name: ' + event.First_Name__c);
    }
    if (event.Last_Name__c != null) {
      System.debug('Last Name: ' + event.Last_Name__c);
    }
    if (event.Name != null) {
      System.debug('Name: ' + event.Name);
    }
    if (event.Tenure__c != null) {
      System.debug('Tenure: ' + event.Tenure__c);
    }
    // Create a followup task
    Task tk = new Task();
    tk.Subject = 'Follow up on employee record(s): ' +
    header.recordIds;
    tk.OwnerId = header.CommitUser;
    tasks.add(tk);
  }
  // Insert all tasks in bulk.
  if (tasks.size() > 0) {
    insert tasks;
  }
}

Ce déclencheur d’événements de modification parcourt chaque message d’événement de modification reçu dans Trigger.New. Pour chaque événement, le déclencheur récupère quelques champs d’en-tête. Si l’opération est une mise à jour, le déclencheur récupère également la liste des champs ayant été modifiés en accédant au champ d’en-tête changedFields. Le déclencheur affiche ensuite les valeurs des champs d’enregistrement qui ne sont pas vides. Enfin, il crée une tâche de suivi pour les nouveaux enregistrements Employee.

Remarque

Dans l’interface utilisateur, vous ne pouvez créer des déclencheurs d’événements de modification qu’à partir de la Developer Console. Les objets d’événement de modification ne sont ni répertoriés dans le gestionnaire d’objets de Lightning Experience ni dans la configuration de Salesforce Classic. 

Vérification du fonctionnement d’un déclencheur d’événements de modification

Nous allons maintenant vérifier manuellement que le déclencheur fonctionne. Pour recevoir des messages d’événement dans le déclencheur, activez d’abord l’objet sur la page Capture des données de modification dans Configuration. Comme vous avez activé les notifications pour Employee dans une étape précédente, vous pouvez ignorer cette étape ici. Les journaux de débogage étant créés sous l’entité Processus automatisé, activez les journaux de débogage pour cette entité dans Configuration afin que les journaux soient collectés.

  1. Pour ouvrir Configuration dans un nouvel onglet, cliquez sur le menu d’accès rapide ( Menu d'accès rapide), puis sur Configuration.
  2. Dans Configuration, saisissez Journaux de débogage dans la case Recherche rapide, puis sélectionnez Journaux de débogage.
  3. Cliquez sur Nouveau.
  4. Sélectionnez Processus automatisé comme Type d'entité suivie.
  5. Sélectionnez la période sur laquelle les journaux doivent être collectés. Les dates de début et d’expiration sont définies par défaut sur la date et l’heure actuelles. Prolongez la date d’expiration en cliquant sur la zone de saisie de la date de fin et en sélectionnant le jour suivant dans le calendrier.
  6. Dans Niveau de débogage, cliquez sur Nouveau niveau de débogage. Saisissez le nom CustomDebugLevel et acceptez les valeurs par défaut.
  7. Cliquez sur Enregistrer.

Ne fermez pas la page de configuration des journaux de débogage : nous y reviendrons dans une minute. Maintenant, effectuez quelques modifications dans Salesforce pour activer le déclencheur d’événements de modification. Créez un enregistrement d’employé, puis mettez-le à jour.

  1. Dans un nouvel onglet, depuis le lanceur d’application ( Lanceur d’application), trouvez et sélectionnez Employés.
  2. Cliquez sur Nouveau.
  3. Remplissez les champs suivants :
    • Nom de l’employé : e-200
    • Nom de famille : Smith
    • Prénom : Joseph
    • Ancienneté : 1
  4. Cliquez sur Enregistrer.
  5. Cliquez sur Modifier sur la page des détails de l’enregistrement d’employé.
  6. Modifiez le champ Prénom en saisissant Joe.
  7. Supprimez la valeur associée à Ancienneté.
  8. Cliquez sur Enregistrer.
  9. Accédez à l’onglet Journaux de débogage et actualisez le navigateur.
  10. Pour afficher les journaux de débogage correspondant à la création de l’enregistrement, cliquez sur Afficher en regard du deuxième journal de la liste (les journaux sont classés par ordre du plus récent au plus ancien). Le résultat des instructions System.debug ressemble à ceci.
  11. ...|DEBUG|Received change event for Employee__c for the CREATE operation.
    ...|DEBUG|Some Employee record field values from the change event:
    ...|DEBUG|First Name: Joseph
    ...|DEBUG|Last Name: Smith
    ...|DEBUG|Name: e-200
    ...|DEBUG|Tenure: 1.0
  12. Pour afficher les journaux de débogage correspondant à la mise à jour de l’enregistrement, cliquez sur Afficher en regard du premier journal de la liste. Le résultat des instructions System.debug ressemble à ceci. Le système mettant à jour le champ LastModifiedDate lors de la mise à jour de l’enregistrement, ce champ est répertorié comme faisant partie des champs modifiés.
  13. ...|DEBUG|Received change event for Employee__c for the UPDATE operation.
    ...|DEBUG|List of all changed fields:
    ...|DEBUG|Changed field value: LastModifiedDate. New Value: 2019-09-26 20:53:29
    ...|DEBUG|Changed field value: First_Name__c. New Value: Joe
    ...|DEBUG|Deleted field value (set to null): Tenure__c
    ...|DEBUG|Some Employee record field values from the change event:
    ...|DEBUG|First Name: Joe

Félicitations ! Vous avez écrit un déclencheur d’événement de modification et avez vérifié qu’il fonctionnait correctement dans l’interface utilisateur. Dans l’unité suivante, vous allez apprendre à écrire un test Apex pour le déclencheur d’événements de modification afin d’automatiser le processus permettant de le tester.

Ressources

Formez-vous gratuitement !
Créez un compte pour continuer.
Qu’est-ce que vous y gagnez ?
  • Obtenez des recommandations personnalisées pour vos objectifs de carrière
  • Mettez en pratique vos compétences grâce à des défis pratiques et à des questionnaires
  • Suivez et partagez vos progrès avec des employeurs
  • Découvrez des opportunités de mentorat et de carrière