Bonjour les pionniers,
Dans cet article de blog, nous apprendrons comment écrire un déclencheur Apex pour les validations personnalisées.
Critères d’acceptation : Écrivez un déclencheur Apex pour restreindre le paiement jusqu’à ce que le devis final soit « approuvé ».
Pour résoudre ce problème, nous avons des objets personnalisés nommés Payment__c et Final_Quote__c dans une relation de recherche les uns avec les autres. Le nom du champ de recherche est « Quote__c ». Sur l’objet Final_Quote__c, il existe un champ de liste de sélection personnalisé nommé Status__c. Si le statut du devis n’est pas « Approuvé », alors l’utilisateur ne doit pas effectuer de paiement.
Alors, commençons…
Déclencheur Apex pour la validation personnalisée :
trigger paymentRestrictionTrigger on Payment__c (before insert, after insert) { if(trigger.isInsert && trigger.isBefore){ for(Payment__c pay : trigger.new){ if(pay. Quote__c!= null){ Final_Quote__c quo = [SELECT Id, Status__c FROM Final_Quote__c WHERE Id = :pay. Quote__c]; if(quo.Status__c != 'APPROVED'){ pay.addError('You can not create payment, because this Quote is not Approved yet. Thank You !!'); } } } } }
Dans cet exemple :
- Nous avons défini le déclencheur sur l’objet Payment__c et l’avons configuré pour qu’il s’exécute avant que les enregistrements ne soient insérés (avant l’insertion).
- Pour chaque enregistrement Payment__c du lot, il insérera et vérifiera si le champ Quote__c de l’enregistrement Payment__c n’est pas nul.
- Après cela, il récupère les enregistrements Final_Quote__c liés aux enregistrements Payment__c à l’aide d’une requête SOQL.
- Il vérifie que le statut du devis est « Approuvé » ou non. Sinon, cela génère une erreur.
Classe de test pour le déclencheur Apex :
Écrivons une classe de test pour le déclencheur Apex ci-dessus. Dans ce cours de test, nous aborderons des scénarios positifs et négatifs.
@isTest public class PaymentRestrictionTriggerTest { @isTest static void testPaymentCreationNotAllowed() { // Create a test Final Quote with a non-approved status Final_Quote__c testQuote = new Final_Quote__c(Status__c="Pending"); insert testQuote; // Create a test Payment related to the non-approved Final Quote Payment__c testPayment = new Payment__c(Quote__c = testQuote.Id); Test.startTest(); try { // Insert the Payment insert testPayment; // If the trigger logic is correct, the payment insert should throw an exception System.assert(false, 'Exception should have been thrown'); } catch (Exception e) { // Ensure that the expected exception message is thrown System.assertEquals('You can not create payment, because this Quote is not Approved yet. Thank You !!', e.getMessage()); } Test.stopTest(); } @isTest static void testPaymentCreationAllowed() { // Create a test Final Quote with an approved status Final_Quote__c testQuote = new Final_Quote__c(Status__c="APPROVED"); insert testQuote; // Create a test Payment related to the approved Final Quote Payment__c testPayment = new Payment__c(Quote__c = testQuote.Id); Test.startTest(); try { // Insert the Payment insert testPayment; // If the trigger logic is correct, no exception should be thrown System.assert(true, 'No exception should have been thrown'); } catch (Exception e) { // If an exception is thrown, fail the test System.assert(false, 'Unexpected exception: ' + e.getMessage()); } Test.stopTest(); } }
La classe de test ci-dessus couvre deux scénarios :
- testPaymentCreationNotAllowed : Il teste que la tentative de création d’un enregistrement Payment__c lié à un enregistrement Final_Quote__c non approuvé lèvera l’exception attendue.
- testPaymentCreationAllowed : Il teste que la création d’un enregistrement Payment__c lié à un enregistrement Final_Quote__c approuvé ne générera aucune exception.
Conclusion:
Ainsi, nous avons appris comment écrire un déclencheur Apex pour une validation personnalisée dans cet article de blog.
Les références:
Vous pouvez également lire :
1.Une introduction à Salesforce CPQ
2.Salesforce CPQ et ses fonctionnalités clés
3.Libérer la puissance de l’IA : Einstein pour les développeurs
4.Révolutionner l’engagement client : le chatbot Salesforce Einstein
Source link