835
salesforce: Spring ’13 Guide du développeur de code Apex Force.com © Copyright 2000–2013 salesforce.com, inc. Tous droits réservés. Salesforce.com, le logo "no software" et Team Edition sont des marques déposées, et AppExchange, "Success On Demand" et "The Business Web" sont des marques de commerce de salesforce.com, inc. Toutes les autres marques mentionnées dans ce document sont la propriété de leur détenteur respectif.

Guide du d©veloppeur de code Apex Force.com - Developer Force

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Guide du développeur de code Apex Force.comGuide du développeur de code Apex Force.com
© Copyright 2000–2013 salesforce.com, inc. Tous droits réservés. Salesforce.com, le logo "no software" et Team Edition sont des marques déposées, et AppExchange, "Success On Demand" et "The Business Web" sont des marques de commerce de salesforce.com, inc. Toutes
les autres marques mentionnées dans ce document sont la propriété de leur détenteur respectif.
Table des matières
Utilisation d'une organisation Developer ou Sandbox.......................................................................................5 Apprentissage du langage Apex.........................................................................................................................7 Écriture de code Apex........................................................................................................................................9 Écriture de tests...............................................................................................................................................10 Déploiement de code Apex dans une organisation Sandbox............................................................................10 Déploiement de code Apex dans une organisation de production Salesforce..................................................11 Ajout de code Apex à une application Force.com AppExchange....................................................................11
Nouveautés..............................................................................................................................................................................13 Démarrage rapide avec le langage Apex..................................................................................................................................13
Création d'un objet personnalisé......................................................................................................................20 Ajout d'une classe Apex...................................................................................................................................21 Ajout d'un déclencheur Apex...........................................................................................................................22 Ajout d'une classe de test.................................................................................................................................24 Déploiement de composants en production.....................................................................................................26
Chapitre 2: Constructions du langage..................................................................................................28 Types de données....................................................................................................................................................................29
Sensibilité à la casse.....................................................................................................................................................57 Constantes...................................................................................................................................................................58
Instructions de verrouillage......................................................................................................................................................90 Verrouillage d'une boucle For SOQL..........................................................................................................................90 Éviter les impasses.......................................................................................................................................................91
salesforce | Table des matières | ii
Définition de déclencheurs........................................................................................................................................104 Déclencheurs et instructions Merge..........................................................................................................................106 Déclencheurs et enregistrements restaurés.................................................................................................................107 Déclencheurs et séquence d'exécution.......................................................................................................................107 Opérations n'invoquant pas de déclencheurs.............................................................................................................109 Considérations sur les entités et les champs dans les déclencheurs............................................................................110 Exceptions de déclencheur.........................................................................................................................................112 Meilleures pratiques pour les déclencheurs et les requêtes en masse..........................................................................112
Annotation HttpPost.....................................................................................................................................170 Annotation HttpPut......................................................................................................................................170
Conventions de nommage.........................................................................................................................................176 Occultation de noms..................................................................................................................................................176
Paramètres de version............................................................................................................................................................181 Définition de la version de l'API Salesforce pour des classes et des déclencheurs.....................................................181 Définition de versions de package pour des classes des déclencheurs Apex...............................................................183
Chapitre 5: Test du code Apex...........................................................................................................184 Compréhension du test dans Apex........................................................................................................................................185
Compréhension du journal de débogage...............................................................................................................................256 Utilisation de journaux dans la Console du développeur...........................................................................................261 Débogage des appels d'API Apex..............................................................................................................................271
Chapitre 10: Exposition de méthodes Apex en tant que services Web SOAP........................................288 Méthodes WebService...........................................................................................................................................................289
Exposition des données avec des méthodes WebService...........................................................................................289 Considérations sur l'utilisation du mot clé WebService.............................................................................................289 Surcharge des méthodes WebService........................................................................................................................292
Chapitre 12: Invocation d'appels en utilisant le langage Apex..............................................................306 Ajout des paramètres de site distant......................................................................................................................................307 Services SOAP : Définition d'une classe à partir d'un document WSDL.............................................................................307
Invocation d'un service externe..................................................................................................................................308 Prise en charge d'en-tête HTTP...............................................................................................................................309 Fonctionnalités WSDL prises en charge...................................................................................................................310 Compréhension du code généré.................................................................................................................................313 Test des appels de service Web..................................................................................................................................318 Considérations sur l'utilisation de WSDL.................................................................................................................321
Utilisation de certificats avec des services SOAP.......................................................................................................323 Utilisation de certificats avec des requêtes HTTP.....................................................................................................324
Limitations des appels...........................................................................................................................................................325
Prise en charge JSON....................................................................................................................................490 Méthodes Limits...........................................................................................................................................513 Méthodes Math.............................................................................................................................................516 Méthodes MultiStaticResourceCalloutMock................................................................................................521 REST Apex...................................................................................................................................................522 Méthodes Search...........................................................................................................................................528 Méthodes StaticResourceCalloutMock.........................................................................................................528 Méthodes System...........................................................................................................................................529 Méthodes Test...............................................................................................................................................542 Méthodes TimeZone.....................................................................................................................................548 Méthodes Type..............................................................................................................................................550 Méthodes URL..............................................................................................................................................554 Méthodes UserInfo........................................................................................................................................557 Méthodes Version..........................................................................................................................................560
Classe Crypto.................................................................................................................................................648 Classe EncodingUtil......................................................................................................................................656
Classes XML.............................................................................................................................................................657 Classes XmlStream........................................................................................................................................657 Classes DOM................................................................................................................................................667
Compréhension de deploy.........................................................................................................................................753 Compréhension de retrieveCode...............................................................................................................................755
Compréhension de runTests()...................................................................................................................................757 Utilisation de l'API SOAP pour déployer un code Apex......................................................................................................757
Cross Site Scripting (XSS)........................................................................................................................................778 Sortie et formules non échappées dans des pages Visualforce....................................................................................780 Cross-Site Request Forgery (CSRF).........................................................................................................................782 Injection SOQL........................................................................................................................................................783 Contrôle de l'accès aux données.................................................................................................................................785
CompileAndTestRequest..............................................................................................................................790 CompileAndTestResult.................................................................................................................................791
Chapitre 1
Introduction au langage Apex
Salesforce.com a transformé la façon dont les entreprises exercent leur activité en déplaçant les applications professionnelles, qui étaient traditionnellement
Sujets :
• Qu'est-ce que le langage Apex ? basées sur une relation client-serveur, vers un environnement Web à la demande • Nouveautés et mutualisé, la plate-forme Force.com. Cet environnement permet aux entreprises
d'exécuter et de personnaliser des applications, telles que Automatisation et• Démarrage rapide avec le langage Apex Service et Support Salesforce, et d'élaborer des applications personnalisées basées
sur des besoins métier spécifiques.
Bien que de nombreuses options de personnalisation soient disponibles à travers l'interface utilisateur de Salesforce, notamment la possibilité de définir de nouveaux champs, des objets, un workflow et des processus d'approbation, les développeurs peuvent également utiliser l'API SOAP pour émettre des commandes de manipulation de données, telles que delete(), update() ou upsert(), à partir de programmes côté client.
Ces programmes côté client, généralement écrits en Java, JavaScript et .NET, ou d'autres langages de programmation, offrent aux organisations davantage de flexibilité dans leurs personnalisations. Cependant, comme la logique de contrôle de ces programmes côté client ne réside dans les serveurs de la plate-forme Force.com, ils sont restreints par les éléments suivants :
• Les coûts en performance des multiples allers-retours vers le site salesforce.com pour accomplir des transactions commerciales courantes
• Le coût et la complexité de l'hébergement du code serveur, tel que Java ou .NET, dans un environnement sécurisé et robuste
Pour apporter une réponse à ces problèmes et révolutionner la façon dont les développeurs créent des applications à la demande, salesforce.com présente le code Apex Force.com, le premier langage de programmation à la demande et mutualisé destiné aux développeurs qui élaborent la prochaine génération d'applications professionnelles.
• Qu'est-ce que le code Apex ? Pour en savoir plus sur l'utilisation du code Apex, le processus de développement et ses limitations
• Nouveautés dans cette version Apex ? • Démarrage rapide avec Apex. Explorez directement ce code, et écrivez votre
première classe et votre premier déclencheur Apex
Qu'est-ce que le langage Apex ? Apex est un langage de programmation orienté objet, fortement typé, qui permet aux développeurs d'exécuter des instructions de contrôle de flux et de transactions sur le serveur de la plate-forme Force.com, en conjonction avec des appels à l'API Force.com. Avec une syntaxe semblable à Java et qui se comporte comme les procédures stockées dans une base de données, le langage Apex permet aux développeurs d'ajouter une logique applicative à la plupart des événements système, y compris aux clics de bouton, aux mises à jour d'enregistrements associés et aux pages Visualforce. Le code Apex peut être initialisé par des demandes émanant de services Web et de déclencheurs d'objets.
Figure 1: Vous pouvez ajouter un code Apex à la plupart des événements système.
En tant que langage, Apex est :
Intégré
Apex fournit une prise en charge intégrée pour des idiomes communs de la plate-forme Force.com qui comprennent : • Les appels DML (langage de manipulation de données), tels que INSERT, UPDATE et DELETE, qui inclut le traitement
DmlException intégré • Des requêtes SOQL (langage de requête d'objets) Salesforce et SOSL (langage de recherche d'objets) Salesforce qui
renvoient des listes d'enregistrements sObject • Des boucles qui permettent de traiter en masse plusieurs enregistrements même temps
• Une syntaxe de verrouillage qui empêche les conflits de mise à jour d'enregistrements
salesforce | Qu'est-ce que le langage Apex ? | 2Introduction au langage Apex
• Des appels API Force.com publics personnalisés qui peuvent être créés à partir de méthodes Apex stockées
• Des avertissements et des erreurs émis lorsqu'un utilisateur tente de modifier ou de supprimer un objet personnalisé ou un champ qui est référencé par un code Apex
Facilité d'utilisation
Le langage Apex est basé sur des idiomes Java familiers, tels qu'une syntaxe de variables et d'expressions, une syntaxe de déclaration de bloc et conditionnelle, une syntaxe de boucle, une notation d'objet et de tableau, etc. Lorsque le langage Apex introduit de nouveaux éléments, il utilise une syntaxe et une sémantique faciles à comprendre et favorise une utilisation efficace de la plate-forme Force.com. Par conséquent, le langage Apex produit un code à la fois succinct et facile à écrire.
Orienté vers les données
Le langage Apex est conçu pour relier entre elles plusieurs requêtes et déclarations DML dans une seule unité de travail sur le serveur de la plate-forme Force.com, de la même façon que les développeurs utilisent des procédures stockées dans une base de données pour relier entre elles plusieurs déclarations de transaction sur un serveur de base de données. Notez que comme d'autres procédures stockées dans une base de données, le langage Apex n'essaie pas de fournir un support général pour le rendu des éléments dans l'interface utilisateur.
Rigoureux
L'Apex est un langage fortement typé qui utilise des références directes à des objets de schéma, tels que des noms d'objet et de champ. Il échoue rapidement lors de la compilation si des références ne sont pas valides, et stocke toutes les dépendances de champ, d'objet et de classe personnalisés dans des métadonnées afin de les protéger contre la suppression lorsqu'elles sont demandées par un code Apex actif.
Hébergé
Le langage Apex est entièrement interprété, exécuté et contrôlé par la plate-forme Force.com.
Mutualisé
Comme le reste de la plate-forme Force.com, le langage Apex est exécuté dans un environnement mutualisé (multitenant). Par conséquent, le moteur d'exécution du langage Apex est conçu pour empêcher qu'un emballement de code ne monopolise des ressources partagées. Tout code qui viole ces limites échoue avec des messages d'erreur faciles à comprendre.
Automatiquement mis à niveau
Il n'est jamais nécessaire de réécrire le code Apex lorsque d'autres parties de la plate-forme Force.com sont mises à niveau. Le code étant compilé et stocké sous forme de métadonnées sur la plate-forme, il est toujours automatiquement mis à niveau avec le reste du système.
Facile à tester
Le langage Apex fournit une prise en charge intégrée de la création et de l'exécution de tests unitaires, qui comprennent des résultats de tests indiquant la quantité de code couverte et les parties de votre code qui peuvent être améliorées. Salesforce.com garantit la fiabilité du fonctionnement du code Apex, en exécutant des tests unitaires stockés dans des métadonnées avant toute mise à niveau de la plate-forme.
Versions multiples
Vous pouvez enregistrer votre code Apex dans plusieurs versions API Force.com. Vous pouvez ainsi préserver des comportements.
Le langage Apex est inclus dans les versions Unlimited Edition, Developer Edition, Enterprise Edition et Database.com.
salesforce | Qu'est-ce que le langage Apex ? | 3Introduction au langage Apex
Comment fonctionne le code Apex ?
Tout le code Apex est exécuté entièrement à la demande sur la plate-forme Force.com, comme indiqué dans le diagramme d'architecture suivant :
Figure 2: Le code Apex est entièrement compilé, stocké et exécuté sur la plate-forme Force.com.
Lorsqu'un développeur écrit et enregistre un code Apex sur la plate-forme, le serveur d'applications de la plate-forme commence par compiler le code dans un ensemble d'instructions abstraites compréhensibles par l'interpréteur d'exécution Apex, puis il enregistre ces instructions sous forme de métadonnées.
Lorsqu'un utilisateur final déclenche l'exécution du code Apex, par exemple en cliquant sur un bouton ou en accédant à une page Visualforce, le serveur d'applications de la plate-forme récupère les instructions compilées à partir des métadonnées, et les envoie via l'interpréteur d'exécution, avant de renvoyer le résultat. L'utilisateur final ne remarque aucune différence en termes de délais d'exécution par rapport aux requêtes standard de la plate-forme.
Qu'est-ce que le processus de développement Apex ?
Nous recommandons le processus suivant pour le développement de code Apex :
1. Obtenir un compte Developer Edition. 2. Apprendre le langage Apex. 3. Écrire votre code Apex. 4. En écrivant un code Apex, vous devez également écrire des tests. 5. (Facultatif) Déployer votre code Apex dans une organisation sandbox et effectuer des tests unitaires finaux. 6. Déployer votre code Apex dans votre organisation de production Salesforce.
En plus de du déploiement de votre code Apex, une fois écrit et testé, vous pouvez également ajouter vos classes et déclencheurs à un package d'applications Force.com AppExchange.
salesforce | Comment fonctionne le code Apex ? | 4Introduction au langage Apex
Utilisation d'une organisation Developer ou Sandbox
Il existe trois types d'organisation dans lesquels vous pouvez exécuter votre code Apex :
• Une organisation de développeur : organisation créée avec un compte Developer Edition.
• Une organisation de production : organisation comprenant des utilisateurs actifs qui accèdent vos données.
• Une organisation sandbox : organisation créée dans votre organisation de production, mais qui est une copie de cette organisation.
Remarque: Des déclencheurs Apex sont disponibles dans la version d'évaluation (Trial Edition) de Salesforce. Ils sont toutefois désactivés lorsque vous passez à une autre version. Si votre nouvelle organisation inscrite inclut le langage Apex, vous devez déployer votre code vers votre organisation en utilisant l'une des méthodes de déploiement.
Vous ne pouvez pas développer un code Apex dans votre organisation de production Salesforce. Les utilisateurs actifs qui accèdent au système pendant que vous développez risquent de déstabiliser vos données ou de corrompre votre application. À la place, nous recommandons de réaliser tout le travail de développement dans un environnement sandbox ou dans une organisation Developer Edition.
Si vous n'êtes pas déjà membre d'une communauté de développeurs, accédez à http://developer.force.com/join et suivez les instructions pour vous inscrire à un compte Developer Edition. Un compte Developer Edition vous donne accès à une organisation Developer Edition gratuite. Même si vous avez déjà une organisation Enterprise Edition ou Unlimited Edition et un environnement sandbox pour créer un code Apex, nous recommandons vivement de bénéficier des ressources disponibles dans la communauté de développeurs.
Remarque: Vous ne pouvez pas modifier un code Apex en utilisant l'interface utilisateur de Salesforce dans une organisation de production Salesforce.
Création d'une organisation Sandbox
Pour créer ou actualiser une sandbox :
1. Cliquez sur Votre nom > Configuration > Gestion des données > Sandbox. 2. Effectuez l'une des opérations suivantes :
• Cliquez sur Nouvelle version test. Pour plus d'informations sur les différents types de sandbox, reportez-vous à Présentation de sandbox.
Salesforce désactive le bouton Nouvelle version test Sandbox lorsqu'une entreprise atteint le nombre maximal d'environnements Sandbox. Si nécessaire, contactez salesforce.com pour commander davantage d'environnements sandbox pour votre organisation. Notez que Salesforce désactive tous les liens d'actualisation lorsque vous atteignez votre limite en environnements sandbox.
• Cliquez sur Actualiser pour remplacer un environnement Sandbox existant par une nouvelle copie. Salesforce affiche le lien Actualiser uniquement pour les environnements sandbox éligibles pour l'actualisation. Pour des sandbox complets, la valeur correspond toute période après 29 jours à compter de la création ou de l'actualisation précédente des sandbox. Pour des sandbox de type configuration-uniquement (y compris les sandbox de développeur), vous pouvez actualiser une fois par jour. Votre copie existante de cet environnement sandbox reste disponible en attendant la fin de l'actualisation. La copie actualisée reste inactive jusqu'à son activation.
3. Saisissez un nom et une description pour le sandbox. Vous pouvez modifier le nom uniquement lors de la création ou de l'actualisation d'un sandbox.
salesforce | Qu'est-ce que le processus de développement Apex ? | 5
Introduction au langage Apex
Conseil: Nous vous recommandons de choisir un nom qui :
• Reflète l'objectif de ce sandbox, tel que « QA ». • Contient peu de caractères, car Salesforce ajoute automatiquement le nom du sandbox au nom d'utilisateur et
à l'adresse e-mail dans les enregistrements utilisateur de l'environnement sandbox. Les noms contenant peu de caractères facilitent la saisie des informations de connexion sandbox.
4. Sélectionnez le type de sandbox :
• Configuration uniquement : Les sandbox de type configuration-uniquement copient tous les rapports, tableaux de bord, catalogues de prix, produits, applications et personnalisations de votre organisation de production sous Votre nom > Configuration, mais excluent tous les enregistrements d'objet personnalisé et standard, les documents et pièces jointes de votre organisation. La création d'un sandbox de type configuration-uniquement peut diminuer le délai de création ou d'actualisation d'un sandbox de quelques heures à seulement quelques minutes, mais peut inclure uniquement 500 Mo de données. Vous pouvez actualiser un sandbox de type configuration-uniquement une fois par jour.
• Développeur : Les sandbox Developer sont des versions test spéciales de configuration-uniquement qui permettent à un seul développeur de coder et de tester des programmes. Plusieurs utilisateurs peuvent se connecter à un seul sandbox de développeur, mais leur objet principal consiste à offrir un environnement permettant d'isoler les modifications en cours de développement tant qu'elles ne sont pas prêtes à être partagées. Semblables aux sandbox de configuration-uniquement, les sandbox Developer copient toutes les informations d'application et de configuration dans l'environnement sandbox. Les sandbox Developer sont limités à 10 Mo de données test ou d'essai, valeur suffisante pour de nombreuses tâches de développement et de test. Vous pouvez actualiser un sandbox de développeur une fois par jour.
• Intégral : Les environnements sandbox complets copient l'ensemble de votre organisation de production et de ses données, notamment les enregistrements d'objet personnalisé et standard, les documents et les pièces jointes. Vous pouvez actualiser un environnement sandbox complet tous les 29 jours.
Si vous avez diminué le nombre de sandbox achetés et que vous possédez toujours un nombre de sandbox d'un type donné supérieur à celui autorisé, vous devez ajuster le nombre de sandbox utilisés au nombre de sandbox achetés. Par exemple, si vous disposez de deux environnements sandbox complets, alors que vous en avez acheté qu'un seul, vous ne pouvez pas actualiser l'environnement sandbox en tant que sandbox complet. Vous devez choisir un sandbox complet pour le convertir en environnement sandbox réduit, tel qu'un sandbox de configuration-uniquement ou de développeur, selon le type de sandbox disponible.
Remarque: Les sandbox de type configuration-uniquement et développeur copient tous les rapports, tableaux de bord, catalogues de prix, produits, applications et personnalisations de votre organisation de production sous Votre nom > Configuration, mais excluent tous les enregistrements d'objet personnalisé et standard, les documents et pièces jointes de votre organisation. Puisque ces types de sandbox copient un volume inférieur de données, leur création peut fortement diminuer le délai de création ou d'actualisation d'un environnement sandbox.
Si vous actualisez un sandbox existant, la case présélectionne généralement le type de sandbox correspondant au sandbox que vous actualisez. Par exemple, si vous actualisez un Sandbox de type configuration-uniquement, la case présélectionne Configuration Uniquement.
Si vous actualisez un sandbox existant ou créez un sandbox, certaines cases peuvent être désactivées si vous avez déjà atteint le nombre de sandbox de ce type autorisé pour votre organisation.
5. Pour un sandbox complet, sélectionnez la quantité d'historique d'objet, d'historique de requête et d'historique d'opportunité à copier, et s'il est nécessaire ou non de copier les données Chatter. L'historique d'objet est le suivi de l'historique des champs des objets personnalisés et de la plupart des objets standard. L'historique de requête et l'historique d'opportunité jouent le même rôle pour les requêtes et les opportunités. Vous pouvez copier de 0 à 180 jours d'historique, par incréments de 30 jours. La valeur par défaut est 0 jour. Les données Chatter comprennent des fils, des messages et des rubriques de découverte. La diminution de la quantité de données copiée peut accélérer de façon significative le délai de copie de votre sandbox.
salesforce | Qu'est-ce que le processus de développement Apex ? | 6
Introduction au langage Apex
6. Cliquez sur Lancer la copie.
Le processus peut durer plusieurs minutes, heures ou mêmes plusieurs jours, en fonction de la taille de votre organisation et du type de copie que vous créez, à savoir une copie complète ou une copie de type configuration-uniquement.
Conseil: Essayez de limiter les modifications de votre organisation de production pendant la copie d'une sandbox.
7. Vous recevez une notification par e-mail une fois la copie de votre sandbox créée ou actualisée. Si vous créez un sandbox, l'environnement est maintenant prêt à l'emploi.
Si vous actualisez un sandbox existant, vous devez exécuter une étape supplémentaire pour terminer le processus de copie de l'environnement sandbox. Le nouveau sandbox doit être activé. Pour supprimer votre sandbox existant et en activer un nouveau :
a. Revenez à la liste de sandbox en vous connectant à votre organisation de production et en accédant à Votre nom > Configuration > Gestion des données > Sandbox.
b. Cliquez sur le lien Activer en regard du sandbox à activer.
Vous êtes dirigé vers une page qui vous informe de la suppression de votre sandbox existant.
c. Lisez attentivement cet avertissement. Si vous acceptez la suppression, saisissez le texte demandé à l'invite, puis cliquez sur le bouton Activer.
Une fois le processus d'activation terminé, vous recevez une notification par e-mail.
ATTENTION: L'activation d'un sandbox de remplacement créé en utilisant le lien Actualiser entraîne la suppression complète du sandbox actualisé. Toutes les configurations et les données de la copie du sandbox précédent sont perdues, y compris les modifications d'applications ou de données effectuées. Lisez attentivement les avertissements, puis cliquez sur le lien Activer uniquement si vous ne souhaitez pas conserver le contenu de la copie de l'environnement sandbox actuellement utilisé. Votre organisation de production et ses données ne sont pas affectées.
8. Une fois votre nouveau sandbox terminé, ou votre sandbox actualisé activé, cliquez sur le lien de la notification par e-mail pour accéder à votre environnement sandbox.
Vous pouvez vous connecter au sandbox à l'adresse test.salesforce.com/login.jsp en ajoutant .nom_sandbox à votre nom d'utilisateur Salesforce. Par exemple, si votre nom d'utilisateur pour votre organisation de production est [email protected], votre nom d'utilisateur pour un sandbox appelé « test » est [email protected].
Remarque: Salesforce modifie automatiquement les noms d'utilisateur de sandbox, mais pas les mots de passe.
Les nouveaux environnements sandbox créés incluent le paramètre de livraison d'e-mail par défaut E-mail système uniquement. Le paramètre E-mail système uniquement est particulièrement utile pour contrôler les e-mails envoyés à partir d'environnements sandbox, afin d'empêcher les opérations de test et de développement d'envoyer des e-mails tests à vos utilisateurs.
Apprentissage du langage Apex
Avec un compte Developer, vous disposez de nombreuses ressources pour apprendre le langage Apex :
Guides Force.com Workbook : Get Started Building Your First App in the Cloud (Premiers pas d'élaboration de votre première application dans le Cloud)
Programmeurs débutants
Introduction au langage Apex
Une série de dix tutoriels de 30 minutes qui présentent diverses fonctionnalités de la plate-forme Force.com. Les tutoriels Force.com Workbook présentent l'élaboration d'un système de gestion des stocks extrêmement simple. Vous apprenez à développer entièrement une application, c.-à-d. vous commencez par élaborer un modèle de base de données pour assurer le suivi des marchandises. Vous ajoutez ensuite une logique métier : des règles de validation qui vérifient si le stock est suffisant, un workflow pour mettre à jour l'inventaire suite à la vente de marchandises, des approbations afin d'envoyer des notifications par e-mail pour des montants de facture importants, enfin une logique de déclenchement pour mettre à jour les prix dans les factures ouvertes. Une fois la base de données et la logique métier terminées, vous créez une interface utilisateur pour présenter l'inventaire produit au personnel, un site Web public pour présenter un catalogue de produits, puis vous commencez à réaliser une simple vitrine. Si vous souhaitez développer hors ligne, puis intégrer à l'application, nous avons ajouté un dernier tutoriel consacré à l'utilisation d'Adobe Flash Builder pour Force.com.
Guides Force.com Workbook : HTML | PDF
Guide Apex Workbook
Programmeurs débutants
Le guide Apex Workbook présente le langage de programmation Apex dans une série de tutoriels. Vous apprenez les concepts de base de Apex, et comment les utiliser sur la plate-forme Force.com pour ajouter une logique métier personnalisée via des déclencheurs, des tests unitaires, un code Apex planifié, un code Apex par lot, des services Web REST et des contrôleurs Visualforce.
Guide Apex Workbook : HTML | PDF
Page Apex Developer Force
Programmeurs débutants et avancés
La page Apex sur Developer Force inclut des liens vers diverses ressources qui comprennent des articles sur le langage de programmation Apex. Ces ressources présentent une vue d'ensemble du langage Apex, ainsi que les meilleures pratiques de développement Apex.
Guide Force.com Cookbook
Programmeurs débutants et avancés
Ce site collaboratif offre plusieurs recettes d'utilisation des services Web API, de développement de code Apex et de création de pages Visualforce. Le guide Force.com Cookbook aide les développeurs à se familiariser avec les techniques et les meilleures pratiques de programmation Force.com courantes. Vous pouvez consulter et commenter les recettes existantes ou soumettre vos propres recettes à l'adresse developer.force.com/cookbook.
Development Life Cycle: Enterprise Development on the Force.com Platform (Cycle de vie du développement - Développement d'entreprise sur la plate-forme Force.com)
Programmeurs architectes et avancés
Que vous soyez architecte, administrateur, développeur ou dirigeant, le guide Development Life Cycle Guide vous prépare au développement et à la livraison d'applications complexes sur la plate-forme Force.com.
Cours de formation
Des cours de formation sont également disponibles dans la rubrique Formation et certification de salesforce.com. Pour consulter la liste complète des cours, accédez au site Formation et Certification.
Dans ce manuel (Guide du développeur Apex)
Nous invitons les programmeurs débutants à consulter les rubriques suivantes : • Introduction au langage Apex, et en particulier :
salesforce | Qu'est-ce que le processus de développement Apex ? | 8
Introduction au langage Apex
◊ Tutoriel de démarrage rapide
• Classes, objets et interfaces
• Test du code Apex
• Compréhension des limitations et des gouverneurs d'exécution
En plus des documents ci-dessus, nous invitons les programmeurs avancés à consulter les rubriques suivantes : • Meilleures pratiques pour les déclencheurs et les requêtes en masse
• Exemple de programmation Apex avancée
• Compréhension de l'information Describe Apex
• Exécution asynchrone (Annotation @future)
Écriture de code Apex
Vous pouvez écrire un code Apex et le tester dans les environnements d'édition suivants :
• L'IDE Force.com, un complément de l'IDE Eclipse. L'IDE Force.com offre une interface unifiée pour l'élaboration et le déploiement d'applications Force.com. Conçu pour les développeurs et les équipes de développement, l'IDE fournit des outils qui permettent d'accélérer le développement d'applications Force.com, notamment des éditeurs de code source, des outils d'exécution de tests, des assistants et une aide intégrée. Ces outils incluent un code couleur de base, une vue de la structure hiérarchique, des tests unitaires intégrés et une compilation automatique lors de l'enregistrement avec un affichage des messages d'erreur. Pour plus d'informations sur son installation et son utilisation, reportez-vous au site Web.
Remarque: L'IDE Force.com est une ressource gratuite offerte par salesforce.com pour aider ses utilisateurs et ses partenaires, mais qui n'est pas considérée comme faisant partie de nos services dans le cadre du Contrat d'abonnement principal salesforce.com.
• L'interface utilisateur de Salesforce Toutes les classes et tous les déclencheurs sont compilés lors de leur enregistrement, et les erreurs de syntaxe sont signalées. Vous ne pouvez pas enregistrer votre code tant qu'il contient des erreurs. L'interface utilisateur de Salesforce numérote également les lignes de code et utilise un code couleur pour distinguer les différents éléments, notamment les commentaires, les mots clés, les chaînes littérales etc.
◊ Pour un déclencheur dans un objet standard, cliquez sur Votre nom > Configuration > Personnaliser, cliquez sur le nom de l'objet, puis sur Déclencheurs. Dans la page de détails Déclencheurs, cliquez sur Nouveau, puis saisissez votre code dans la zone de texte Corps.
◊ Pour un déclencheur dans un objet personnalisé, cliquez sur Votre nom > Configuration > Développer > Objets, puis cliquez sur le nom de l'objet. Dans la liste associée Déclencheurs, cliquez sur Nouveau, puis saisissez votre code dans la zone de texte Corps.
◊ Pour une classe, cliquez sur Votre nom > Configuration > Développer > Classes Apex. Cliquez sur Nouveau, puis saisissez votre code dans la zone de texte Corps.
Remarque: Vous ne pouvez pas modifier un code Apex en utilisant l'interface utilisateur de Salesforce dans une organisation de production Salesforce.
salesforce | Qu'est-ce que le processus de développement Apex ? | 9
Introduction au langage Apex
• N'importe quel éditeur de texte, tel que le Bloc-notes. Vous pouvez écrire votre code Apex, puis le copier et le coller dans votre application, ou utiliser l'un des appels API pour le déployer.
Conseil: Si vous souhaitez étendre le plug-in Eclipse ou développer votre propre IDE Apex, l'API SOAP inclut des méthodes de compilation de déclencheurs et de classes, et d'exécution de méthodes de test, tandis que l'API de métadonnées inclut des méthodes de déploiement de code dans des environnements de production. Pour plus d'informations, reportez-vous à Déploiement de code Apex à la page 750 et API SOAP et en-têtes SOAP pour Apex à la page 788.
Écriture de tests
Le test est la clé de la réussite du développement à long terme et forme un composant essentiel du processus de développement. Nous recommandons vivement d'utiliser un processus de développement piloté par des tests, c.-à-d. des tests effectués parallèlement au développement du code.
Pour faciliter le développement d'un code robuste et sans erreur, Apex prend en charge la création et l'exécution de tests unitaires. Les test unitaires sont des méthodes de classe qui vérifient le fonctionnement normal d'une portion de code. Les méthodes de test unitaires ne prennent aucun argument, ne soumettent aucune donnée à la base de données, n'envoient aucun e-mail et sont marquées avec le mot clé testMethod dans la définition de la méthode.
De plus, avant de pouvoir déployer votre code Apex ou de l'empaqueter pour Force.com AppExchange, le point suivant doit être vrai.
• Au moins 75 % de votre code Apex doit être couvert par des tests unitaires, et tous ces tests doivent être réussis.
Notez les points suivants :
◊ Lors du déploiement d'une organisation de production, chaque test unitaire dans l'espace de noms de votre organisation est exécuté.
◊ Les appels de System.debug ne sont pas pris en compte dans la couverture du code Apex.
◊ Les méthodes de test et les classes de test ne sont pas prises en compte dans la couverture du code Apex.
◊ Alors que seulement 75 % de votre code Apex doit être couvert par des tests, votre attention ne doit pas se porter sur le pourcentage du code couvert. Assurez-vous plutôt que chaque cas d'utilisation de votre application est couvert, y compris les cas positifs et négatifs, ainsi que les enregistrements en masse et uniques. Ils doivent représenter 75 % ou plus de couverture de votre code par des tests unitaires.
• Chaque déclencheur doit avoir une couverture de test.
• Toutes les classes et tous les déclencheurs doivent être compilés avec succès.
Pour plus d'informations sur l'écriture de tests, reportez-vous à Tests Apex à la page 184.
Déploiement de code Apex dans une organisation Sandbox
Salesforce permet de créer plusieurs copies de votre organisation dans des environnements distincts avec le test et la formation comme objectifs principaux, sans altérer les données et les applications de votre organisation de production Salesforce. Ces copies, appelées sandbox, sont presque identiques à votre organisation de production Salesforce. Les sandbox sont totalement isolées de votre organisation de production Salesforce. Par conséquent, les opérations que vous effectuez dans vos sandbox n'affectent pas votre organisation de production Salesforce, et inversement.
Pour déployer un code Apex d'un projet local dans Force.com IDE vers une organisation Salesforce, utilisez l'Assistant de déploiement de composants Force.com. Pour plus d'informations sur Force.com IDE, reportez-vous à http://wiki.developerforce.com/index.php/Force.com_IDE.
salesforce | Qu'est-ce que le processus de développement Apex ? | 10
Introduction au langage Apex
Vous pouvez utiliser l'appel API de métadonnées deploy() pour déployer votre code Apex depuis une organisation de développeur vers une organisation sandbox.
Un appel API utile est runTests(). Dans une organisation de développement ou sandbox, vous pouvez exécuter des tests unitaires pour une classe spécifique, une liste de classes ou un espace de noms.
Salesforce inclut un Outil de migration Force.com qui permet d'émettre ces commandes dans une fenêtre de console. Vous pouvez également mettre en oeuvre votre propre code de déploiement.
Remarque: Force.com IDE et l'Outil de migration Force.com sont des ressources fournies gratuitement par salesforce.com pour aider ses utilisateurs et partenaires, mais qui ne sont pas considérées comme faisant partie de nos services dans le cadre du Contrat d'abonnement principal salesforce.com.
Pour plus d'informations, reportez-vous à Utilisation de l'outil de migration Force.com et Déploiement de code Apex.
Déploiement de code Apex dans une organisation de production Salesforce
Lorsque vous avez terminé tous vos tests unitaires et vérifié que votre code Apex est exécuté correctement, l'étape finale consiste à déployer le code Apex vers votre organisation de production Salesforce.
Pour déployer un code Apex d'un projet local dans Force.com IDE vers une organisation Salesforce, utilisez l'Assistant de déploiement de composants Force.com. Pour plus d'informations sur Force.com IDE, reportez-vous à http://wiki.developerforce.com/index.php/Force.com_IDE.
Vous pouvez également déployer Apex via des ensembles de modifications dans l'interface utilisateur de Salesforce.
Pour plus d'informations et des options de déploiement supplémentaires, reportez-vous à Déploiement de code Apex à la page 750.
Ajout de code Apex à une application Force.com AppExchange
Vous pouvez également inclure une classe ou un déclencheur Apex à une application que vous avez créée pour AppExchange.
Tout code Apex inclus dans un package doit avoir au moins 75 % de couverture de test cumulée. Chaque déclencheur doit avoir une couverture de test. Lorsque vous chargez votre package sur AppExchange, tous les tests sont exécutés pour vérifier l'absence d'erreur. De plus, des tests avec l'annotation @isTest(OnInstall=true) sont exécutés lors de l'installation du package dans l'organisation de l'installateur. Vous pouvez spécifier les tests à exécuter durant l'installation du package en les annotant avec @isTest(OnInstall=true). Ce sous-ensemble de tests doit être exécuté avec succès pour que l'installation du package réussisse.
De plus, salesforce.com recommande que tout package AppExchange contenant un code Apex soit un package géré.
Pour plus d'informations, reportez-vous au document Force.com Quick Reference for Developing Packages. Pour plus d'informations sur le code Apex dans des packages gérés, reportez-vous à Développement de code Apex dans des packages gérés à la page 280.
Remarque: Empaquetage de classes Apex contenant des références à des étiquettes personnalisées qui ont des traductions : Pour inclure les traductions dans le package, activez le Système de traduction, puis empaquetez explicitement les langues individuelles à utiliser dans les étiquettes personnalisées traduites. Reportez-vous à Présentation des étiquettes personnalisées.
salesforce | Qu'est-ce que le processus de développement Apex ? | 11
Introduction au langage Apex
Les applications Salesforce pré-construites offrent des fonctionnalités CRM puissantes. Salesforce offre en outre la possibilité de personnaliser les applications pré-construites en fonction de votre organisation. Cependant, votre organisation peut avoir des processus métier complexes non pris en charge par les fonctionnalités existantes. Dans ce cas, la plate-forme Force.com comprend plusieurs méthodes qui permettent aux administrateurs et aux développeurs de mettre en oeuvre des fonctionnalités personnalisées. Elles comprennent Apex, Visualforce et l'API SOAP.
Apex Utilisez Apex si vous souhaitez :
• Créer des services Web. • Créer des services de messagerie. • Effectuer une validation complexe sur des objets multiples. • Créer des processus métier complexes qui ne sont pas pris en charge par le workflow. • Créer une logique transactionnelle personnalisée (qui se produit sur la transaction complète, pas seulement sur un
enregistrement ou un objet unique). • Joindre une logique personnalisée à une autre opération, par exemple la sauvegarde d'un enregistrement, qui se produit
ainsi lorsque l'opération est exécutée, qu'elle soit issue ou non de l'interface utilisateur, d'une page Visualforce ou de l'API SOAP.
Visualforce Visualforce est formé d'un langage de balisage qui offre aux développeurs un moyen plus puissant pour concevoir des applications et personnaliser l'interface utilisateur de Salesforce. Avec Visualforce, vous pouvez :
• Élaborer des assistants et d'autres processus à plusieurs étapes. • Créer votre propre contrôle de flux personnalisé via une application. • Définir des modèles de navigation et des règles spécifiques aux données pour une interaction d'application optimale et
efficace.
Pour plus d'informations, reportez-vous au guide Visualforce Developer's Guide.
API SOAP Utilisez des appels API SOAP standard si vous souhaitez ajouter à une application composite une fonctionnalité qui traite un seul type d'enregistrement à la fois et ne nécessite aucun contrôle transactionnel (telle que la définition d'un enregistrement ou l'annulation de modifications).
Pour plus d'informations, reportez-vous au guide SOAP API Developer's Guide.
Quelles sont les limitations du langage Apex ?
Le langage Apex change radicalement la façon dont les développeurs créent des applications professionnelles à la demande, mais il n'a pas actuellement pour objectif de devenir un langage de programmation général. La version actuelle du langage Apex ne peut pas être utilisée pour :
• Rendre des éléments autres que des messages d'erreur dans l'interface utilisateur.
• Modifier une fonctionnalité standard : le langage Apex peut uniquement empêcher l'exécution d'une fonctionnalité ou ajouter une fonctionnalité supplémentaire
• Créer des fichiers temporaires
salesforce | Quand dois-je utiliser un code Apex ? | 12Introduction au langage Apex
Conseil:
Tout le code Apex est exécuté sur la plate-forme Force.com, qui est une ressource partagée, utilisée par toutes les autres organisations. Pour garantir une cohérence en termes de performances et d'évolutivité, l'exécution de code Apex est encadrée par des limitations du gouverneur qui empêchent une exécution Apex unique d'affecter le service global de Salesforce. Cela signifie que tout le code Apex est limité en nombre d'opérations (telles que DML ou SOQL) qu'il peut effectuer dans un seul processus.
Toutes les requêtes Apex renvoient une collection qui contient de 1 à 50 000 enregistrements. Vous ne pouvez pas supposer que votre code fonctionne uniquement sur un seul enregistrement à la fois. Par conséquent, vous devez mettre en oeuvre des modèles de programmation qui tiennent compte du traitement global. Sans cette protection, vous risquez de dépasser les limitations du gouverneur.
Voir aussi : Compréhension des limitations et des gouverneurs d'exécution Meilleures pratiques pour les déclencheurs et les requêtes en masse
Nouveautés Reportez-vous aux Notes de publications de Winter ’13 pour prendre connaissance des fonctionnalités Apex nouvelles et modifiées dans la version Winter ’13.
Démarrage rapide avec le langage Apex Lorsque vous avez une organisation Developer Edition ou sandbox, vous pouvez apprendre quelques concepts de base du langage Apex. Comme le langage Apex est très similaire au langage Java, vous pouvez reconnaître la plupart de ses fonctionnalités.
Une fois les concepts de base révisés, vous pouvez écrire votre premier programme Apex : une classe, un déclencheur et un test unitaire extrêmement simples.
Vous pouvez également parcourir un exemple de bordereau d'expédition plus complexe. Cet exemples illustre de nombreuses autres fonctionnalités du langage.
Remarque: Les exemples Hello World et du bordereau d'expédition nécessitent des champs et des objets personnalisés. Vous pouvez créer les vôtres, ou télécharger les objets, les champs et le code Apex dans package géré sur Force.com AppExchange. Pour plus d'informations, reportez-vous à wiki.developerforce.com/index.php/Documentation.
Conventions typographiques de la documentation
La documentation Apex et Visualforce utilise les conventions typographiques ci-dessous.
salesforce | Nouveautés | 13Introduction au langage Apex
Public class HelloWorld
Police Courier
Dans les descriptions de syntaxe, les caractères en italique représentent des variables. Vous renseignez la valeur. Dans l'exemple suivant, trois valeurs doivent être saisies : datatype variable_name [ = value];
Si la syntaxe est en gras et en italique, le texte représente un élément de code pour lequel vous devez saisir une valeur, par exemple un nom de classe ou une valeur de variable :
public static class YourClassHere { ... }
Italique
Dans les exemples de code et les descriptions de syntaxe, la police Courier gras souligne une portion du code ou de la syntaxe.
Police Courier gras
Dans les descriptions de syntaxe, les symboles inférieur à et supérieur à (< >) sont saisis tels quels.
<apex:pageBlockTable value="{!account.Contacts}" var="contact">
< >
</apex:pageBlockTable>
Dans les descriptions de syntaxe, les accolades ({ }) sont saisies telles quelles.
<apex:page>
</apex:page>
Dans les descriptions de syntaxe, tout élément entre parenthèses est facultatif. Dans l'exemple suivant, la spécification value est facultative :
data_type variable_name [ = value];
Introduction au langage Apex
DescriptionConvention
Dans les descriptions de syntaxe, le caractère pipe signifie « ou », c.-à-d. que vous pouvez effectuer l'une des actions (pas toutes). Dans l'exemple suivant, vous pouvez créer un nouvel ensemble non renseigné de deux façons différentes, ou renseigner l'ensemble :
Set<data_type> set_name
;
Compréhension des concepts de base du langage Apex
Le code Apex contient généralement de nombreux éléments courants dans d'autres langages de programmation :
Figure 3: Éléments de programmation dans le langage Apex
La section présente les principales fonctionnalités du langage Apex, ainsi que quelques concepts de base.
Utilisation des paramètres de version Dans l'interface utilisateur de Salesforce, vous pouvez spécifier une version de l'API Salesforce.com pour laquelle vous enregistrez votre classe ou déclencheur Apex. Ce paramètre indique la version de l'API SOAP à utiliser, mais également la version Apex. Vous pouvez changer la version après l'enregistrement. Chaque nom de classe ou de déclencheur doit être unique. Vous ne pouvez pas enregistrer la même classe ou le même déclencheur pour différentes versions.
Vous pouvez également utiliser des paramètres de version afin d'associer une classe ou un déclencheur à une version particulière d'un package géré installé dans votre organisation à partir d'AppExchange. La classe ou le déclencheur continue d'utiliser cette
salesforce | Compréhension des concepts de base du langage Apex | 15
Introduction au langage Apex
version du package géré si des versions ultérieures du package sont installées, sauf si vous mettez à jour manuellement le paramètre de version. Pour ajouter un package géré installé à la liste des paramètres, sélectionnez un package dans la liste des packages disponibles. Cette liste s'affiche uniquement si un package géré installé n'est pas déjà associé à la classe ou au déclencheur.
Pour plus d'informations sur l'utilisation de paramètres de version avec des packages gérés, reportez-vous à « À propos des versions de package » dans l'aide en ligne de Salesforce.
Nommage de variables, de méthodes et de classes Vous ne pouvez utiliser aucun mot clé Apex réservé pour nommer des variables, des méthodes ou des classes. Sont inclus les termes faisant partie du code Apex et de la plate-forme Force.com, tels que list, test ou account, ainsi que les mots clés réservés.
Utilisation de variables et d'expressions Apex est un langage fortement typé, c.-à-d. que vous devez déclarer le type de données d'une variable en la référençant pour la première fois. Le types de données Apex incluent des types de base, tels que Nombre entier, Date et Booléen, ainsi que les types plus avancés, tels que lists, maps, objects et sObjects.
Les variables sont déclarées avec un nom et un type de données. Vous pouvez attribuer une valeur à une variable lorsque vous la déclarez. Vous pouvez également attribuer des valeurs ultérieurement. Lors de la déclaration de variables, utilisez la syntaxe suivante :
datatype variable_name [ = value];
Conseil: Notez que le point-virgule final ci-dessus n'est pas facultatif. Vous devez terminer toutes les instructions par un point-virgule.
Les exemples ci-dessous sont des instructions de variables :
// The following variable has the data type of Integer with the name Count,
// and has the value of 0.
Integer Count = 0;
// The following variable has the data type of Decimal with the name Total. Note
// that no value has been assigned to it.
Decimal Total;
// The following variable is an account, which is also referred to as an sObject.
Account MyAcct = new Account();
salesforce | Compréhension des concepts de base du langage Apex | 16
Introduction au langage Apex
Dans le langage Apex, tous les arguments de type de données primitifs, tels que Nombre entier ou Chaîne, sont transmis en méthodes par valeur. Cela signifie que toute modification apportée aux arguments existe uniquement dans la portée de la méthode. Lorsque la méthode retourne, les modifications de l'argument sont perdues.
Les arguments de type de données non primitifs, tels que sObjects, sont également transmis en méthodes par valeur. Cela signifie que lorsque la méthode retourne, l'argument passé référence toujours le même objet qu'avant l'appel de la méthode et ne peut pas être modifié pour pointer vers un autre objet. Cependant, les valeurs des champs de l'objet peuvent être modifiées dans la méthode.
Utilisation d'instructions Une instruction correspond à toute instruction codée pour exécuter une action.
Dans le langage Apex, les instructions doivent se terminer par un point-virgule et peuvent correspondre à l'un des types suivants :
• Attribution, par exemple attribution d'une valeur à une variable • Conditionnel (if-else) • Boucles :
◊ Do-while ◊ While ◊ For
• Verrouillage • Langage de manipulation des données (DML) • Contrôle des transactions • Invocation de méthode • Gestion des exceptions
Un block est une série d'instructions regroupées par des accolades, qui peut être utilisé partout où une instruction unique est autorisée. Par exemple :
if (true) {
Lorsqu'un bloc contient une seule instruction, les accolades peuvent être abandonnées. Par exemple :
if (true)
salesforce | Compréhension des concepts de base du langage Apex | 17
Introduction au langage Apex
Utilisation de collections Le langage Apex inclut les types de collection suivants :
• Lists (tableaux) • Maps • Sets
Une list (liste) est une collection d'éléments, telle que des Nombres entiers, des Chaînes, des objets ou d'autres collections. Utilisez une liste lorsque la séquence d'élément est importante. Une liste peut inclure des éléments dupliqués.
La première position d'index dans une liste est toujours 0.
Pour créer une liste :
• Utilisez le mot clé new
• Utilisez le mot clé List suivi du type d'élément entre crochets <>.
Utilisez la syntaxe suivante pour créer une liste :
List <datatype> list_name
[= new List<datatype>();] |
;
L'exemple suivant crée une liste de Nombres entiers et l'attribue à la variable My_List. Notez que comme le langage Apex est fortement typé, vous devez déclarer le type de données My_List en tant que liste de Nombres entiers.
List<Integer> My_List = new List<Integer>();
Pour plus informations, reportez-vous à Lists à la page 38.
Un set (ensemble) est une collection d'éléments uniques non organisés. Il contient des types de données primitifs, tels que Chaîne, Nombre entier, Date, etc. Il inclut également des types de données plus complexes tels que des sObjects.
Pour créer un ensemble :
• Utilisez le mot clé new
• Utilisez le mot clé Set suivi du type de données primitif entre crochets <>.
Utilisez la syntaxe suivante pour créer un ensemble :
Set<datatype> set_name
[= new Set<datatype>();] |
;
L'exemple suivant crée un ensemble de Chaînes. Les valeurs de l'ensemble sont transmises en utilisant des accolades {}.
Set<String> My_String = new Set<String>{'a', 'b', 'c'};
salesforce | Compréhension des concepts de base du langage Apex | 18
Introduction au langage Apex
Pour plus informations, reportez-vous à Sets à la page 46.
Un map (mappage) est une collection de paires clé-valeur. Les clés peuvent avoir n'importe quel type de données primitif. Les valeurs peuvent inclure des types de données primitifs, ainsi que des objets et d'autres collections. Utilisez un mappage lorsque la recherche par clé est importante. Un mappage peut inclure des valeurs dupliquées, mais chaque clé doit être unique.
Pour créer un mappage :
• Utilisez le mot clé new
• Utilisez le mot clé Map suivi d'une paire clé-valeur, séparée par une virgule et placée entre crochets <>.
Utilisez la syntaxe suivante pour créer un mappage :
Map<key_datatype, value_datatype> map_name
[=new map<key_datatype, value_datatype>();] |
[=new map<key_datatype, value_datatype>
;
L'exemple suivant crée un mappage qui a un type de données Integer pour clé et String pour valeur. Dans cet exemple, les valeurs du mappage sont transmises entre accolades {} lors de la création du mappage.
Map<Integer, String> My_Map = new Map<Integer, String>{1 => 'a', 2 => 'b', 3 => 'c'};
Pour plus informations, reportez-vous à Maps à la page 47.
Utilisation de branchements Une instruction if est un test vrai-faux qui permet à votre application d'exécuter plusieurs opérations en fonction d'une condition. La syntaxe de base est la suivante :
if (Condition){
} else {
}
Pour plus d'informations, reportez-vous à Instructions conditionnelles (If-Else) à la page 69.
Utilisation de boucles Tandis que l'instruction if permet à votre organisation d'exécuter des opérations basées sur une condition, les boucles indiquent à votre application d'exécuter la même opération en boucle en fonction d'une condition. Le langage Apex prend en charge les types de boucle suivants :
• Do-while • While • For
salesforce | Compréhension des concepts de base du langage Apex | 19
Introduction au langage Apex
Une boucle Do-while vérifie la condition après l'exécution du code.
Une boucle While vérifie la condition au début, avant l'exécution du code.
Une boucle For permet d'affiner le contrôle de la condition utilisée par la boucle. De plus, le langage Apex prend charge les boucles traditionnelles For dans lesquels vous définissez les conditions, ainsi que les boucles For qui utilisent des listes et des requêtes SOQL dans la condition.
Pour plus informations, reportez-vous à Boucles à la page 70.
Écriture de votre première classe et de votre premier déclencheur Apex
Ce tutoriel pas à pas présente la création d'une simple classe et d'un simple déclencheur Apex. Il montre également comment déployer ces composants dans une organisation de production.
Ce tutoriel est basé sur un objet personnalisé appelé Book qui est créé à la première étape. Cet objet personnalisé est mis à jour via un déclencheur.
Voir aussi : Création d'un objet personnalisé Ajout d'une classe Apex Ajout d'un déclencheur Apex Ajout d'une classe de test Déploiement de composants en production
Création d'un objet personnalisé
Un compte Salesforce dans une organisation sandbox Unlimited Edition ou Enterprise Edition, ou un compte dans une organisation Developer.
Pour plus d'informations sur la création d'une organisation sandbox, reportez-vous à « Présentation de Sandbox » dans l'aide en ligne de Salesforce. Pour vous inscrire à une organisation Developer gratuite, reportez-vous à Page d'inscription à un environnement Developer Edition.
Dans cette étape, vous créez un objet personnalisé appelé Book avec un champ personnalisé appelé Price.
1. Connectez-vous à votre organisation sandbox ou Developer. 2. Cliquez sur Votre nom > Configuration > Créer > Objets, puis cliquez sur Nouvel objet personnalisé. 3. Saisissez l'étiquette Book. 4. Saisissez l'étiquette au pluriel Books. 5. Cliquez sur Enregistrer.
Terminé ! Nous avons créé notre premier objet personnalisé. Créons maintenant un champ personnalisé. 6. Dans la section Champs personnalisés et relations de la page de détail Book, cliquez sur Nouveau. 7. Sélectionnez le type de données Numéro, puis cliquez sur Suivant. 8. Saisissez l'étiquette de champ Price. 9. Saisissez 16 dans la zone de texte de la longueur. 10. Saisissez 2 dans la zone de texte des décimales, puis cliquez sur Suivant. 11. Cliquez sur Suivant pour accepter les valeurs par défaut de sécurité au niveau du champ. 12. Cliquez sur Enregistrer.
salesforce | Écriture de votre première classe et de votre premier déclencheur Apex | 20
Introduction au langage Apex
Vous venez de créer un objet personnalisé appelé Book et ajouté un champ personnalisé à cet objet. Les objets personnalisés contiennent déjà des champs standard, tels que Nom et Créé par. Ils permettent d'ajouter d'autres champs plus spécifiques à votre mise en oeuvre. Dans ce tutoriel, le champ Price fait partie de votre objet Book, et il est accessible via la classe Apex que vous allez écrire à la prochaine étape.
Voir aussi : Écriture de votre première classe et de votre premier déclencheur Apex Ajout d'une classe Apex
Ajout d'une classe Apex
• Un compte Salesforce dans une organisation sandbox Unlimited Edition ou Enterprise Edition, ou un compte dans une organisation Developer.
• L'objet personnalisé Book
Dans cette étape, vous allez ajouter une classe Apex qui inclut une méthode de mise à jour du prix du livre. Cette méthode est appelée par le déclencheur que vous allez ajouter à la prochaine étape.
1. Cliquez sur Votre nom > Configuration > Développer > Classes Apex, puis cliquez sur Nouveau. 2. Dans l'éditeur de classe, saisissez la définition de classe suivante :
public class MyHelloWorld {
}
Le code précédent correspond à la définition de classe à laquelle vous allez ajouter une méthode supplémentaire à la prochaine étape. Le code Apex est généralement contenu dans une classe. Cette classe est définie comme public, ce qui signifie qu'elle est disponible pour d'autres classes et déclencheurs Apex. Pour plus d'informations, reportez-vous à Classes, objets et interfaces à la page 124.
3. Ajoutez cette définition de méthode entre les parenthèses ouvrante et fermante de la classe.
public static void applyDiscount(Book__c[] books) {
for (Book__c b :books){
}
}
Cette méthode est appelée applyDiscount, et elle est à la fois publique et statique. Puisque cette méthode est statique, il n'est pas nécessaire de créer une instance de la classe pour accéder à la méthode, il suffit d'utiliser le nom de la classe suivie d'un point (.) et du nom de la méthode. Pour plus informations, reportez-vous à Statique et instance à la page 139.
Cette méthode prend un paramètre, une liste d'enregistrements Book, qui est attribué à la variable books. Notez le __c dans le nom de l'objet Book__c. Il indique que vous avez créé un objet personnalisé. Les objets standard fournis dans l'application Salesforce, tels que Account, ne se terminent pas par ce suffixe.
salesforce | Écriture de votre première classe et de votre premier déclencheur Apex | 21
Introduction au langage Apex
La section suivante du code contient le reste de la définition de la méthode :
for (Book__c b :books){
}
Notez le __c après le nom de champ Price__c. Il indique que vous avez créé un champ personnalisé. Les champs standard fournis par défaut dans Salesforce sont accessibles en utilisant le même type de notation pointée, mais sans le __c, par exemple Name ne se termine pas par __c dans Book__c.Name. L'instruction b.Price__c *= 0.9; prend l'ancienne valeur de b.Price__c, la multiplie par 0,9, ce qui signifie qu'elle est diminuée de 10 %, puis stocke la nouvelle valeur dans le champ b.Price__c. L'opérateur *= est un raccourci. Une autre façon d'écrire cette instruction est b.Price__c = b.Price__c * 0.9;. Reportez-vous à Compréhension des opérateurs d'expression à la page 60.
4. Cliquez sur Enregistrer pour enregistrer la nouvelle classe. Vous devez maintenant obtenir cette définition de classe complète.
public class MyHelloWorld {
for (Book__c b :books){
}
}
}
Vous avez désormais une classe contenant un code qui itère dans une liste de livres et met à jour le champ Price pour chaque livre. Ce code fait partie de la méthode statique applyDiscount qui est appelé par le déclencheur que vous allez créer à la prochaine étape.
Voir aussi : Écriture de votre première classe et de votre premier déclencheur Apex Création d'un objet personnalisé Ajout d'un déclencheur Apex
Ajout d'un déclencheur Apex
• Un compte Salesforce dans une organisation sandbox Unlimited Edition ou Enterprise Edition, ou un compte dans une organisation Developer.
• La classe Apex MyHelloWorld.
Dans cette étape, vous créez un déclencheur pour l'objet personnalisé Book__c qui appelle la méthode applyDiscount de la classe MyHelloWorld que vous avez créée à l'étape précédente.
Un déclencheur est une partie de code qui s'exécute avant ou après l'insertion, la mise à jour ou la suppression d'enregistrements d'un type spécifique à partir de la base de données de la plate-forme Force.com. Chaque déclencheur est exécuté avec un
salesforce | Écriture de votre première classe et de votre premier déclencheur Apex | 22
Introduction au langage Apex
ensemble de variables contextuelles qui fournissent l'accès aux enregistrements ayant activé le déclencheur. Tous les déclencheurs sont activés en masse, c.-à-d. qu'ils traitent plusieurs enregistrements à la fois.
:
Book__c[] books = Trigger.new;
trigger HelloWorldTrigger on Book__c (before insert) {
Elle attribue un nom au déclencheur, spécifie l'objet sur lequel il opère et définit les événements qui l'activent. Par exemple, ce déclencheur est appelé HelloWorldTrigger, il opère sur l'objet Book__c et est exécuté avant l'insertion de nouveaux livres dans la base de données.
La ligne suivante du déclencheur crée une liste d'enregistrements de livres nommée books et attribue le contenu d'une variable de contexte de déclencheur appelée Trigger.new. Les variables de contexte de déclencheur, telles que Trigger.new, sont définies implicitement dans tous les déclencheurs et fournissent l'accès aux enregistrements qui activent le déclencheur. Dans ce cas, Trigger.new contient les nouveaux livres qui vont être insérés.
Book__c[] books = Trigger.new;
La ligne suivante du code appelle la méthode applyDiscount dans la classe MyHelloWorld. Il transmet le tableau des nouveaux livres.
MyHelloWorld.applyDiscount(books);
Vous disposez maintenant de tout le code nécessaire pour mettre à jour le prix de tous les livres qui sont insérés. Cependant, une pièce du puzzle est manquante. Les tests unitaires sont une partie importante de l'écriture de code et sont obligatoires. Dans la prochaine étape, vous allez en découvrir les raisons et vous pourrez ajouter une classe de test.
Voir aussi : Écriture de votre première classe et de votre premier déclencheur Apex Ajout d'une classe Apex Ajout d'une classe de test
salesforce | Écriture de votre première classe et de votre premier déclencheur Apex | 23
Introduction au langage Apex
Prérequis :
• Un compte Salesforce dans une organisation sandbox Unlimited Edition ou Enterprise Edition, ou un compte dans une organisation Developer.
• Le déclencheur Apex HelloWorldTrigger.
Dans cette étape, vous ajoutez une classe de test avec une méthode de test. Vous exécutez également le test et vérifiez la couverture de code. La méthode de test exerce et valide le code dans le déclencheur et la classe. Il permet également d'atteindre 100 % de couverture de code pour le déclencheur et la classe.
Remarque: Le test est une partie importante du processus de développement. Avant de pouvoir déployer votre code Apex ou de l'empaqueter pour Force.com AppExchange, les conditions suivantes doivent être remplies.
• Au moins 75 % de votre code Apex doit être couvert par des tests unitaires, et tous ces tests doivent être réussis.
Notez les points suivants :
◊ Lors du déploiement d'une organisation de production, chaque test unitaire dans l'espace de noms de votre organisation est exécuté.
◊ Les appels de System.debug ne sont pas pris en compte dans la couverture du code Apex. ◊ Les méthodes de test et les classes de test ne sont pas prises en compte dans la couverture du code Apex. ◊ Alors que seulement 75 % de votre code Apex doit être couvert par des tests, votre attention ne doit pas se
porter sur le pourcentage du code couvert. Assurez-vous plutôt que chaque cas d'utilisation de votre application est couvert, y compris les cas positifs et négatifs, ainsi que les enregistrements en masse et uniques. Ils doivent représenter 75 % ou plus de couverture de votre code par des tests unitaires.
• Chaque déclencheur doit avoir une couverture de test. • Toutes les classes et tous les déclencheurs doivent être compilés avec succès.
1. Cliquez sur Votre nom > Configuration > Développer > Classes Apex, puis cliquez sur Nouveau. 2. Dans l'éditeur de classe, ajoutez cette définition de classe de test, puis cliquez sur Enregistrer.
@isTest
System.debug('Price before inserting new book: ' + b.Price__c);
// Insert book
insert b;
System.debug('Price after trigger fired: ' + b.Price__c);
salesforce | Écriture de votre première classe et de votre premier déclencheur Apex | 24
Introduction au langage Apex
System.assertEquals(90, b.Price__c);
}
}
Cette classe est définie en utilisant l'annotatio