Fermer

décembre 31, 2024

Gestion des exceptions dans Salesforce Apex

Gestion des exceptions dans Salesforce Apex


Dans Salesforce Apex, les exceptions résultent de divers facteurs tels que des opérations non valides, le dépassement des limites du gouverneur ou la rencontre d’erreurs système critiques. Apex fournit un cadre complet pour gérer ces exceptions, permettant aux applications de maintenir la stabilité et d’éviter les pannes inattendues.

Comment surmonter efficacement les exceptions ?

Pour surmonter les exceptions dans Salesforce Apex, suivez ces stratégies :

Utilisez les blocs Try-Catch : Encapsulez le code à risque dans un bloc try et gérez les erreurs dans le bloc catch correspondant.
Classes d’exceptions personnalisées : Créez des exceptions personnalisées significatives pour gérer des scénarios de logique métier spécifiques.
Gérer les limites du gouverneur : Surveillez et optimisez l’utilisation des ressources pour éviter les exceptions aux limites du gouverneur.
Utiliser le bloc Finalement : Incluez un bloc final pour nettoyer les ressources, garantissant ainsi une bonne exécution quel que soit le succès ou l’échec.
Erreurs de journal : Utilisez System.debug ou des frameworks de journalisation personnalisés pour suivre et analyser les exceptions.
Commentaires des utilisateurs gracieux : Affichez des messages d’erreur conviviaux au lieu du jargon technique.
Tirez parti des continuations Apex : Pour les légendes, utilisez des processus asynchrones pour gérer efficacement les limites.

Différents types de gestion des exceptions dans Apex :

Exception DML :

Lorsque nous effectuons le DML tel que l’insertion, la mise à jour, la suppression et que nous ne remplissons pas les champs requis lors de l’insertion, une erreur se produit.

public class ExceptionExample{
   public static void exceptionErr(){

       Contact conta1= new Contact();
       conta1.FirstName="John";
       insert conta1;
      }
}

Dans le code ci-dessus, l’erreur dmlexception s’est produite, comme indiqué ci-dessous.

Pour éviter cette erreur, assurez-vous que tous les champs obligatoires sont spécifiés lors de l’opération DML dans le code Apex.

Exception de liste :

Chaque fois qu’un problème survient dans la liste de notre code apex et que vous accédez à l’élément à un index qui n’existe pas dans la liste, une ListException se produit.

Public class ExceptionExamples {
public static void exceptErr(){

List<Contact> contactList2 = [SELECT Id, Name FROM Contact WHERE Name="SFDC Einstein"];
system.debug('List Exception' +contactList2[0].Name);
}
}

Dans le code ci-dessus, une erreur ListException s’est produite et s’affiche ci-dessous.
Listeexception

Pour éviter cette erreur, nous devons vérifier la taille de la liste.

List<Contact> contactList2 = [SELECT Id, Name FROM Contact WHERE Name="SFMC Einstein"];
//check the list size
if (contactList2.size()>0){
system.debug('List Exception' +contactList2[0].Name);
}

Exception de requête :

Cette erreur se produit lorsqu’il y a un problème avec un SOQL. Lorsque la requête SOQL ne renvoie aucun enregistrement et n’attribue cette requête dans SObject, cette erreur se produit généralement.

Public class ExceptionExamples {

     public static void exceptErr(){

        Teacher__c teacherList1 = [SELECT Id, Name FROM Teacher__c WHERE Name="Marc"];
       system.debug('teacherList'+teacherList1);

     }
}

Dans le code ci-dessus, une erreur queryException s’est produite, comme indiqué ci-dessous.
Exception de requête

Pour éviter queryException, nous devons utiliser la liste. Nous pouvons mettre à jour la ligne dans le code ci-dessus comme

LISTE professeurListe1 = [SELECT Id, Name FROM Teacher__c  WHERE Name=’Marc’];

Exception SObject :

Cela se produit lorsque vous tentez d’accéder à un champ sur un enregistrement SObject interrogé, mais que ce champ n’a pas été inclus dans la clause SELECT de la requête SOQL.

Public class ExceptionExamples {
   public static void exceptErr(){
      List<Teacher__c> teacherList1 = [SELECT Id FROM Teacher__c];
      if(teacherList1.size()>0){
         for(Teacher__c tch: teacherList1){
             system.debug('teacherList1'+tch.Name);
            }
          }
     }
}

Dans le code ci-dessus, une exception SObject se produit comme illustré ci-dessous.
Sobjectexception

Pour éviter cette erreur, nous devons mentionner le champ : Nom dans la requête SOQL auquel nous souhaitons accéder dans le code apex.

Liste TeacherList = [SELECT Id, Name FROM Teacher__c];

Exception limite :

Salesforce impose des limites de gouverneur pour optimiser l’utilisation des ressources et maintenir les performances de la plateforme. Si ces limites sont dépassées, une LimitException est déclenchée.

1.Trop d’instructions DML : 151 :
L’erreur se produit lorsque votre code Apex dépasse le nombre maximum d’instructions DML autorisées dans une seule transaction. Salesforce applique les limites du gouverneur pour garantir une utilisation équitable des ressources entre toutes les transactions en cours d’exécution. La limite pour les instructions DML est de 150.

Public class ExceptionExamples {
    public static void exceptErr(){
      for(integer i= 0; i<151; i++){
          Contact conta1 = new Contact();
          conta1.LastName="Einstein"+ i;
         insert conta1;
      }
   }
}

Dans le code ci-dessus, une erreur limitException s’est produite, illustrée ci-dessous.
151 Limite Dml

Pour interdire l’erreur, vous pouvez regrouper votre code en effectuant l’opération DML en dehors de la boucle.

Public class ExceptionExamples {
    public static void exceptErr(){
    List<Contact> contactList23 = new List<Contact>();
      for(integer i= 0; i<151; i++){
        Contact conta1 = new Contact();
        conta1.LastName="SFDC"+ i;
        contactList23.add(conta1);
       }
      if(contactList23.size()>0){
         insert contactList23;
       }
    }
}
//In above code error will not occur


2.Trop de requêtes SOQL : 101 :

Cette erreur se produit dans Salesforce lorsque votre code Apex ou vos déclencheurs dépassent le nombre autorisé de requêtes SOQL au sein d’une seule transaction. La limite du gouverneur pour les requêtes SOQL dans une transaction est de 100.

Public class ExceptionExamples {
  public static void exceptErr(){
   List<Contact> contactList2 = new List<Contact>();
   for(integer i= 0; i<101; i++){
    List<Contact> con = [SELECT Id, Name, Phone FROM Contact WHERE Name Like '%contact%'];
    system.debug('Exception'+con[0].Name);
   }
  }
}

Dans le code ci-dessus, une erreur limitException s’est produite et s’affiche ci-dessous.
Soqllim

Pour éviter cette erreur, nous devons déplacer la requête soql en dehors de la boucle for pour éviter le trop grand nombre de requêtes soql dans le code apex.

Public class ExceptionExamples {
  public static void exceptErr(){
   List<Contact> con = [SELECT Id, Name,Phone FROM Contact WHERE Name Like '%contact%'];
   for (integer i = 0; i < 101; i++){
      // You can use the con variable to access the query results
        system.debug('Exception ' + con[0].Name);
    }
  }
}//In above code error will not occur.

Exception NullPointer :

Une NullPointerException dans Apex se produit lorsque nous essayons d’accéder à une référence d’objet nulle. Cette erreur indique que notre code tente d’effectuer une opération sur un objet qui n’est pas instancié.

Public class ExceptionExamples {
  public static void exceptErr(){
    Account acc;
   System.debug('NullPointerException'+acc.Name);
   }
}

Dans le code ci-dessus, une erreur NullPointerException s’est produite et apparaît ci-dessous.
NullPointerException
Pour éviter cette erreur, nous devons attribuer la valeur avant d’accéder à notre code

if (acc != null) {
System.debug(acc.Name);
} else {
System.debug('Account is null');
}

Référence:Exceptions dans Apex

Conclusion

La gestion des exceptions est un aspect essentiel du développement Salesforce Apex qui garantit que vos applications sont robustes, fiables et conviviales. En identifiant de manière proactive les points de défaillance potentiels, en implémentant des blocs structurés try-catch-finally et en créant des exceptions personnalisées significatives, vous pouvez créer des solutions résilientes qui gèrent avec élégance les scénarios inattendus. N’oubliez jamais de consigner les erreurs pour le débogage, d’optimiser votre code pour respecter les limites du gouverneur et de fournir des commentaires clairs aux utilisateurs. Grâce à ces pratiques, vous pouvez transformer les défis en opportunités pour améliorer la qualité et la maintenabilité de votre code. Bon codage !

En savoir plus sur les différents sujets Salesforce :

  1. FlexCards dans Salesforce OmniStudio : guide du débutant
  2. Maîtriser Salesforce OmniScript : un guide complet pour des flux de travail rationalisés
  3. Intégration transparente des données avec Salesforce OmniStudio DataRaptor
  4. Libérer la puissance de la procédure d’intégration de Salesforce OmniStudio : un guide détaillé






Source link