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
Vous avez appris à vous abonner aux événements de modification à l’aide de l’API Pub/Sub. 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. Les messages d’événement de modification Apex peuvent contenir des champs vides (nuls). 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.
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é.
Pour créer le déclencheur d’événement de modification à l’aide de la Developer Console, suivez ces étapes :
- Cliquez sur le menu d’accès rapide ().
- Cliquez sur Developer Console.
- Dans la Developer Console, sélectionnez Fichier | Nouveau | Déclencheur Apex.
- Dans le champ Nom, saisissez le nom du déclencheur :
EmployeeChangeTrigger
.
- 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
(après insertion).
- 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.
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.
- Pour ouvrir Configuration dans un nouvel onglet, cliquez sur le menu d’accès rapide ( ), puis sur Configuration.
- Dans Setup (Configuration), saisissez
Debug Logs
(Journaux de débogage) dans la zone Quick Find (Recherche rapide), puis sélectionnez Debug Logs (Journaux de débogage).
- Cliquez sur Nouveau.
- Sélectionnez Processus automatisé comme Type d'entité suivie.
- 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.
- Dans Niveau de débogage, cliquez sur Nouveau niveau de débogage. Saisissez le nom
CustomDebugLevel
et acceptez les valeurs par défaut.
- Cliquez sur Save (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.
- Dans un nouvel onglet, depuis le lanceur d’application ( ), trouvez et sélectionnez Employés.
- Cliquez sur Nouveau.
- Remplissez les champs suivants :
- Nom de l’employé :
e-200
- Nom de famille :
Smith
- Prénom :
Joseph
- Ancienneté :
1
- Cliquez sur Enregistrer.
- Cliquez sur Modifier sur la page des détails de l’enregistrement d’employé.
- Modifiez le champ First Name (Prénom) en saisissant
Joe
.
- Supprimez la valeur associée à Ancienneté.
- Cliquez sur Enregistrer.
- Accédez à l’onglet Journaux de débogage et actualisez le navigateur.
- 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.
...|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
- 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.
...|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
-
Développeurs Salesforce : Guide du développeur de la Capture des données de modification : Abonnements via des déclencheurs Apex
-
Développeurs Salesforce : Apex Developer Guide