Premiers pas avec Apex
Objectifs de formation
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 ?
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.
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 (y compris des tableaux).
- 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 modificateurpublic
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 ().
Présentation des types de données
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 (ou tableau) 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 d'objets. Dans Apex, les listes sont synonymes de tableaux et les deux peuvent être utilisés indifféremment.
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>();
La variable colors
peut également être déclarée en tant que tableau, mais attribuée à une liste plutôt qu'à un 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. Utilisez 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, de la même façon que des éléments 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 tableau.
// 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 for(Integer i=0;i<colors.size();i++) { // Write value to the debug log System.debug(colors[i]); }
Classes Apex
Enregistrez la classe EmailManager
dans votre organisation :
- Ouvrez la Developer Console sous Your name (Votre nom) ou le menu d’accès rapide ().
- 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.
- Remplacez le corps de classe par défaut par l’exemple de classe
EmailManager
.
La classeEmailManager
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 parsendMail()
.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 an array 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; } }
- 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.
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.
- Dans la Developer Console, cliquez sur Debug (Débogage) | Open Execute Anonymous Window (Ouvrir la fenêtre d’exécution anonyme).
- 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');
- 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.
- Dans la Developer Console, cliquez sur l’onglet Logs (Journaux), puis double-cliquez sur le journal le plus récent de la liste.
- Sélectionnez Debug Only (Déboguer uniquement) pour filtrer le journal et afficher uniquement les lignes des instructions
System.debug()
.
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
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.
- 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éthodesendMail()
avec la ligne suivante (la seule modification est l’ajout du mot-cléstatic
).public static void sendMail(String address, String subject, String body) {
- Cliquez sur File (Fichier) | Save (Enregistrer) pour enregistrer votre classe.
- 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');
- 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.