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