Skip to main content
Build the future with Agentforce at TDX in San Francisco or on Salesforce+ on March 5–6. Register now.

Premiers pas avec Apex

Objectifs de formation

Une fois cette unité terminée, vous pourrez :

  • Présenter les principales fonctionnalités du langage de programmation Apex
  • Enregistrer une classe Apex et des méthodes d'appel avec un Apex anonyme
  • Utiliser la Developer Console pour inspecter les journaux de débogage
Remarque

Remarque

Vous souhaitez apprendre en français ? Commencez le défi dans un Trailhead Playground en français et utilisez les traductions fournies entre crochets pour naviguer. Copiez et collez uniquement les valeurs en anglais, car les validations de défi reposent sur les données en anglais. Si vous ne réussissez pas le défi dans votre organisation en français, nous vous recommandons (1) de définir le paramètre régional sur les États-Unis, (2) de définir la langue sur l’anglais en suivant les instructions ici, puis (3) de cliquer à nouveau sur le bouton « Vérifier le défi ».

Consultez le badge Trailhead dans votre langue pour découvrir comment profiter de l’expérience Trailhead traduite.

Avant de commencer

Nous sommes ravis de vous accompagner dans votre parcours avec Apex. Bien que ce module couvre les informations de base sur le langage de programmation, il aborde également rapidement des sujets approfondis. Si ce module constitue votre premier contact avec Apex, nous vous recommandons fortement de commencer par le projet Démarrage rapide : Apex. Ensuite, revenez, nous vous attendons !

Qu'est-ce qu'Apex ?

Apex est un langage de programmation qui utilise une syntaxe de type Java et agit de la même façon que des procédures stockées de base de données. Apex permet aux développeurs d’ajouter une logique métier à des événements système, par exemple des clics sur des boutons, des mises à jour d’enregistrements associés et des pages Visualforce.

En tant que langage, Apex est :

  • Hébergé : Apex est enregistré, compilé et exécuté sur le serveur, Lightning Platform.
  • Orienté objet : Apex prend en charge les classes, les interfaces et l'héritage.
  • Fortement typé : Apex valide des références à des objets lors de la compilation.
  • Respectueux de la mutualisation : le langage Apex étant exécuté dans une plate-forme mutualisée, il empêche l'emballement du code en imposant des limitations qui évitent de monopoliser les ressources partagées.
  • Intégré à la base de données : il est extrêmement facile d'accéder à des enregistrements et de les manipuler. Apex offre un accès direct aux enregistrements et à leurs champs, et fournit des instructions et des langages de requête pour manipuler ces enregistrements.
  • Orienté vers les données : Apex offre un accès transactionnel à la base de données, qui permet de restaurer les opérations.
  • Facile à utiliser : Apex s’appuie sur les idiomes Java habituels.
  • Facile à tester : Apex fournit une prise en charge intégrée de création de tests unitaires, d'exécution et de couverture de code. Salesforce vérifie que tous les codes Apex personnalisés fonctionnent normalement, en exécutant tous les tests unitaires avant une mise à niveau de la plate-forme.
  • Doté de versions gérées : un code Apex personnalisé peut être sauvegardé dans différentes versions de l'API.

Apex est un langage de programmation s’appuyant sur le Cloud

Présentation du langage Apex

Comme les autres langages de programmation s’appuyant sur le Cloud, Apex prend en charge certaines constructions de langage :

  • classes, interfaces, propriétés et collections (listes, cartes et ensembles).
  • Notation d'objet et de tableau.
  • Expressions, variables et constantes.
  • Instructions conditionnelles (if-then-else) et instructions de contrôle de flux (boucles for et boucles while).

Contrairement aux autres langages de programmation orientés objet, Apex prend en charge :

  • Le développement Cloud quand Apex est stocké, compilé et exécuté dans le Cloud.
  • Les déclencheurs, qui s’apparentent aux déclencheurs des systèmes de base de données.
  • Les instructions de base de données, qui permettent d'émettre des appels directs à la base de données, et des langages de requête pour interroger et rechercher des données.
  • Les transactions et les restaurations.
  • Le modificateur d’accès global, qui est plus permissif que le modificateur public et autorise l’accès entre les espaces de nom et les applications.
  • La gestion des versions d'un code personnalisé.

De plus, le langage Apex n'est pas sensible à la casse.

Outils de développement

Vous pouvez écrire et déboguer du code Apex sur votre ordinateur client à l’aide des extensions Salesforce pour Visual Studio Code. Voir Extensions Salesforce pour Visual Studio Code.

Vous pouvez également écrire du code Apex et accéder aux informations de débogage directement dans le navigateur en utilisant l’interface utilisateur de Salesforce. Ouvrez la Developer Console sous Your name (Votre nom) ou le menu d’accès rapide (Icône d’engrenage de configuration).

Présentation des types de données

Apex prend en charge plusieurs types de données, dont un propre à Salesforce : le type de données sObject.

Apex prend en charge les types de données suivants :

  • Un primitif, notamment de type entier, double, long, date, date/heure, chaîne, ID ou booléen, entre autres.
  • Un sObject, en tant que sObject générique ou sObject spécifique, tel qu'un compte, un contact ou MyCustomObject__c (MonObjetPersonnalisé__c) (nous présentons les sObjects dans une unité ultérieure).
  • Une collection, qui comprend :
    • Une liste de primitifs, sObjects, objets définis par l’utilisateur, objets créés à partir de classes Apex ou de collections
    • Un ensemble de primitifs, sObjects, objets définis par l’utilisateur, objets créés à partir de classes Apex ou de collections
    • Un mappage d'un primitif avec un primitif, un sObject ou un ensemble
  • Une liste de valeurs saisies, également appelée enum
  • Des classes Apex définies par l'utilisateur
  • Des classes Apex fournies par le système

Collections Apex : syntaxe List

Les listes contiennent une collection ordonnée de données du même type.

Les deux déclarations suivantes sont équivalentes. La variable colors est déclarée en utilisant la syntaxe List.

List<String> colors = new List<String>();

De même, la variable colors peut être déclarée en utilisant la notation de tableau.

String[] colors = new List<String>();

Augmentez les collections selon vos besoins en utilisant la méthode List.add() pour ajouter de nouveaux éléments. Vous pouvez utiliser la notation de tableau entre crochets pour référencer des éléments existants dans la collection par index. Cependant, vous ne pouvez pas utiliser la notation de tableau entre crochets pour ajouter d’autres éléments.

Cet exemple montre comment ajouter des éléments à une liste lors de sa création, puis utiliser la méthode add() pour ajouter plus d’éléments. 

// Create a list and add elements to it in one step
List<String> colors = new List<String> { 'red', 'green', 'blue' };
// Add elements to a list after it has been created
List<String> moreColors = new List<String>();
moreColors.add('orange');
moreColors.add('purple');

Les éléments de liste peuvent être lus en spécifiant un index entre crochets, appelé notation de tableau. Vous pouvez également utiliser la méthode get() pour lire un élément de liste. Cet exemple s’appuie sur les listes créées dans l'exemple précédent et montre comment lire des éléments de liste en utilisant l'une ou l'autre méthode. L’exemple montre également comment itérer sur des éléments de liste.

// Get elements from a list
String color1 = moreColors.get(0);
String color2 = moreColors[0];
System.assertEquals(color1, color2);
// Iterate over a list to read elements
System.debug('Print out the colors in moreColors:');
for(String color : moreColors) {
    // Write value to the debug log
    System.debug(color);
}







Remarque

Au-delà des concepts de base

Apex prend en charge deux autres types de collection : Set (Ensemble) et Map (Mappage). Pour plus d’informations, reportez-vous à la section Collections du guide du développeur Apex.

Classes Apex

L'un des avantages des classes Apex est la réutilisation du code. Des méthodes de classe peuvent être appelées par des déclencheurs et d'autres classes. Le didacticiel ci-dessous présente la sauvegarde d'un exemple de classe dans votre organisation, l'utilisation de cette classe pour envoyer des e-mails et l'inspection des journaux de débogage.

Enregistrement d'une classe Apex

Enregistrez la classe EmailManager dans votre organisation :

  1. Ouvrez la Developer Console sous Your name (Votre nom) ou le menu d’accès rapide (Icône d’engrenage de configuration).
  2. Dans la Developer Console, cliquez sur File (Fichier) | New (Nouveau) | Apex Class (Classe Apex), saisissez le nom EmailManager pour la classe, puis cliquez sur OK.
  3. Remplacez le corps de classe par défaut par l’exemple de classe EmailManager.
    La classe EmailManager a une méthode publique (sendMail()) qui envoie un e-mail et utilise les méthodes de messagerie intégrées de la bibliothèque de classes Apex. Cette classe a également une méthode d’aide privée (inspectResults()) qui ne peut pas être appelée de façon externe, car elle est privée. Elle est utilisée uniquement dans la classe. Cette méthode d’aide inspecte les résultats de l’appel d’envoi d’e-mail, et elle est appelée par sendMail().
    public class EmailManager {
        // Public method
        public void sendMail(String address, String subject, String body) {
            // Create an email message object
            Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
            String[] toAddresses = new String[] {address};
            mail.setToAddresses(toAddresses);
            mail.setSubject(subject);
            mail.setPlainTextBody(body);
            // Pass this email message to the built-in sendEmail method
            // of the Messaging class
            Messaging.SendEmailResult[] results = Messaging.sendEmail(
                                     new Messaging.SingleEmailMessage[] { mail });
            // Call a helper method to inspect the returned results
            inspectResults(results);
        }
        // Helper method
        private static Boolean inspectResults(Messaging.SendEmailResult[] results) {
            Boolean sendResult = true;
            // sendEmail returns a list of result objects.
            // Iterate through the list to inspect results.
            // In this class, the methods send only one email,
            // so we should have only one result.
            for (Messaging.SendEmailResult res : results) {
                if (res.isSuccess()) {
                    System.debug('Email sent successfully');
                }
                else {
                    sendResult = false;
                    System.debug('The following errors occurred: ' + res.getErrors());
                }
            }
            return sendResult;
        }
    }
  4. Cliquez sur File (Fichier) | Save (Enregistrer) pour enregistrer votre classe.
    REMARQUE : si la syntaxe de votre code présente des erreurs, un message s’affiche dans l’onglet Problems (Problèmes). Les détails de l’erreur vous permettront de corriger votre code.
Remarque

Au-delà des concepts de base 

La classe que vous venez d'enregistrer utilise une programmation orientée objet (OOP). La classe encapsule les méthodes associées à la gestion de la messagerie. Pour être un parfait exemple d'OOP, la classe devrait également contenir des variables membres (attributs) et des méthodes accesseur pour accéder à ces attributs. Toutefois, par souci de simplification notre classe n'en contient pas.

Salesforce compile votre classe lorsque vous l'enregistrez.

Appel d'une méthode pour envoyer un e-mail

Invoquons la méthode publique. Pour cela, utilisons une exécution Apex anonyme. Un Apex anonyme permet d’exécuter sur le champ des lignes de code. Cela est pratique pour invoquer Apex, notamment afin de tester des fonctionnalités. Les résultats sont générés dans le journal de débogage, comme avec toute autre exécution Apex.

Remarque

Remarque

Il existe d'autres méthodes pour invoquer Apex, via des déclencheurs par exemple. Nous présentons les déclencheurs dans un autre module.

  1. Dans la Developer Console, cliquez sur Debug (Débogage) | Open Execute Anonymous Window (Ouvrir la fenêtre d’exécution anonyme).
  2. Dans la fenêtre qui s'ouvre, saisissez les éléments ci-dessous. Remplacez ‘Your email address’ par votre adresse e-mail.
    EmailManager em = new EmailManager();
    em.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
  3. Cliquez sur Execute (Exécuter).
    Vous devriez maintenant recevoir un e-mail dans votre boîte de réception. Consultez votre messagerie !

Inspection des journaux de débogage

Les journaux de débogage sont utiles pour le débogage de votre code. Lorsque des méthodes Apex sont exécutées, les appels sont consignés dans le journal de débogage. Vous pouvez également écrire vos propres messages de débogage dans le journal, ce qui facilite le débogage de votre code en cas d'erreur. La méthode d'assistance inspectResults(), qui est appelée par sendMail(), écrit des messages dans le journal en utilisant la méthode System.debug() pour indiquer si l'opération d'envoi d'e-mails a réussi ou a généré des erreurs. Vous pouvez consulter ces messages dans le journal de débogage généré lors de l'exécution de la méthode.

  1. Dans la Developer Console, cliquez sur l’onglet Logs (Journaux), puis double-cliquez sur le journal le plus récent de la liste.
  2. Sélectionnez Debug Only (Déboguer uniquement) pour filtrer le journal et afficher uniquement les lignes des instructions System.debug(). Filtrage du journal de débogage dans la Developer Console pour afficher les messages de débogage

Le message ci-dessous s'affiche dans la vue du journal filtré lorsque l'e-mail a été envoyé sans générer d'erreur.

DEBUG|Email sent successfully
Remarque

Remarque

Vous pouvez également filtrer le journal de débogage en recherchant un mot-clé dans le champ Filter (Filtre) ou en sélectionnant une autre option. Pour plus d’informations, reportez-vous à l’aide de l'inspecteur du journal.

Appel d'une méthode statique

La méthode sendMail() de votre classe n'a pas accès aux variables membre de classe. Par conséquent, il n'est pas nécessaire qu'elle soit une méthode d'instance. Modifiez-la en méthode statique en ajoutant le mot-clé static à sa déclaration. Les méthodes statiques sont plus faciles à appeler que les méthodes d'instance, car il n'est pas nécessaire de les appeler dans une instance de la classe. Elles sont appelées directement dans le nom de la classe.

  1. Dans la Developer Console, recherchez l’onglet ouvert pour la classe EmailManager, puis modifiez la première ligne de la définition de la méthode sendMail() avec la ligne suivante (la seule modification est l’ajout du mot-clé static).
    public static void sendMail(String address, String subject, String body) {
  2. Cliquez sur File (Fichier) | Save (Enregistrer) pour enregistrer votre classe.
  3. Modifiez les instructions dans votre fenêtre Execute Anonymous (Exécution anonyme) pour appeler la méthode statique dans le nom de la classe.
    EmailManager.sendMail('Your email address', 'Trailhead Tutorial', '123 body');
  4. Cliquez sur Execute (Exécuter). Cette méthode ayant été exécutée, vous pouvez consulter votre messagerie et, si nécessaire, le journal de débogage, comme dans les étapes précédentes.

Ressources

Partagez vos commentaires sur Trailhead dans l'aide Salesforce.

Nous aimerions connaître votre expérience avec Trailhead. Vous pouvez désormais accéder au nouveau formulaire de commentaires à tout moment depuis le site d'aide Salesforce.

En savoir plus Continuer à partager vos commentaires