Site icon Blog ARC Optimizer

Déclencheur Apex pour la validation personnalisée dans Salesforce


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 :

  1. 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).
  2. 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.
  3. 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.
  4. 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 :

  1. 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.
  2. 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:

  1. Lot Apex dans Salesforce
  2. Apex asynchrone dans Salesforce

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
Quitter la version mobile