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 :
- 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
