Tutoriel APEX : classe de programmation Apex et exemples de codage
Quโest-ce quโApex dans Salesforce ?
Apex est un langage de programmation orientรฉ objet et fortement typรฉ dรฉveloppรฉ par Salesforce pour la crรฉation de logiciels en tant que service (SaaS) et de gestion de la relation client (CRM). Apex aide les dรฉveloppeurs ร crรฉer des applications SaaS tierces et ร ajouter une logique mรฉtier aux รฉvรฉnements systรจme en fournissant une prise en charge des bases de donnรฉes principales et des interfaces client-serveur.
Apex aide les dรฉveloppeurs ร ajouter une logique mรฉtier aux รฉvรฉnements systรจme tels que les clics sur les boutons, les mises ร jour des enregistrements associรฉs et les pages Visualforce. Apex a une syntaxe similaire ร Java. S'inscrire ร Salesforce pour savoir comment fonctionne le CRM
Caractรฉristiques du langage de programmation Apex
Voici les fonctionnalitรฉs importantes de Salesforce Apex :
- Apex est un langage insensible ร la casse.
- Vous pouvez effectuer des opรฉrations DML telles que INSERT, UPDATE, UPSERT, DELETE sur les enregistrements sObject ร l'aide d'apex.
- Vous pouvez interroger des enregistrements sObject ร l'aide de SOQL (langage de requรชte d'objet Salesforce) et SOSL (langage de recherche d'objet Salesforce) dans Apex.
- Permet de crรฉer un Test de l'unitรฉ et exรฉcutez-les pour vรฉrifier le couverture de code et l'efficacitรฉ du code au sommet.
- Apex s'exรฉcute dans un environnement multi-tenant et Salesforce a dรฉfini certaines limites de gouverneur qui empรชchent un utilisateur de contrรดler les ressources partagรฉes. Tout code qui dรฉpasse la limite du gouverneur Salesforce รฉchoue et une erreur apparaรฎt.
- L'objet Salesforce peut รชtre utilisรฉ comme type de donnรฉes au sommet. Par exemple -
Account acc = new Account();
,ici Account est un objet Salesforce standard.
- Apex est automatiquement mis ร niveau avec chaque version de Salesforce.
Quand le dรฉveloppeur devrait-il choisir Apex
Le code Apex ne doit รชtre รฉcrit que si un scรฉnario commercial est trop complexe et ne peut pas รชtre implรฉmentรฉ ร l'aide des fonctionnalitรฉs prรฉdรฉfinies fournies par Salesforce.
Voici les quelques scรฉnarios dans lesquels nous devons รฉcrire du code apex :
- Pour crรฉer des services Web qui intรจgrent Salesforce ร d'autres applications.
- Pour implรฉmenter une validation personnalisรฉe sur les sobjects.
- Pour exรฉcuter une logique apex personnalisรฉe lorsquโune opรฉration DML est effectuรฉe.
- Pour implรฉmenter des fonctionnalitรฉs qui ne peuvent pas รชtre implรฉmentรฉes ร l'aide des flux de flux de travail existants et des fonctionnalitรฉs des gรฉnรฉrateurs de processus.
- Installer services de messagerie, vous devez inclure le traitement du contenu, des en-tรชtes et des piรจces jointes des e-mails ร l'aide du code apex.
Structure de travail d'Apex
Maintenant, dans ce didacticiel Apex, nous allons dรฉcouvrir la structure de travail d'Apex :
Voici le flux dโactions pour un code apex :
- Action du dรฉveloppeur : tout le code Apex รฉcrit par un dรฉveloppeur est compilรฉ dans un ensemble d'instructions qui peuvent รชtre comprises par l'interprรฉteur d'exรฉcution Apex lorsque le dรฉveloppeur enregistre le code sur la plate-forme et ces instructions sont ensuite enregistrรฉes sous forme de mรฉtadonnรฉes sur la plate-forme.
- Action de l'utilisateur final : lorsque l'รฉvรฉnement utilisateur exรฉcute un code apex, le serveur de plateforme rรฉcupรจre les instructions compilรฉes ร partir des mรฉtadonnรฉes et les exรฉcute via l'interprรฉteur apex avant de renvoyer le rรฉsultat.

Syntaxe Apex
Dรฉclaration de variable
Comme apex est un langage fortement typรฉ, il est obligatoire de dรฉclarer une variable avec un type de donnรฉes en apex.
Par exemple :
contact con = new contact();
ici, la variable con est dรฉclarรฉe avec contact comme type de donnรฉes.
Requรชte SOQL
SOQL signifie langage de requรชte d'objet Salesforce. SOQL est utilisรฉ pour rรฉcupรฉrer les enregistrements sObject de la base de donnรฉes Salesforce. Par exemple-
Account acc = [select id, name from Account Limit 1];
La requรชte ci-dessus rรฉcupรจre l'enregistrement de compte de la base de donnรฉes Salesforce.
Instruction de boucle
L'instruction de boucle est utilisรฉe pour parcourir les enregistrements d'une liste. Le nombre d'itรฉrations est รฉgal au nombre d'enregistrements dans la liste. Par exemple:
list<Account>listOfAccounts = [select id, name from account limit 100];
// iteration over the list of accounts
for(Account acc : listOfAccounts){
//your logic
}
Dans l'extrait de code ci-dessus, listOfAccounts est une variable de type de donnรฉes liste.
Dรฉclaration de contrรดle de flux
L'instruction de contrรดle de flux est utile lorsque vous souhaitez exรฉcuter certaines lignes du code en fonction de certaines conditions.
Par exemple :
list<Account>listOfAccounts = [select id, name from account limit 100];
// execute the logic if the size of the account list is greater than zero
if(listOfAccounts.size() >0){
//your logic
}
L'extrait de code ci-dessus interroge les enregistrements de compte dans la base de donnรฉes et vรฉrifie la taille de la liste.
Dรฉclaration DML
DML signifie langage de manipulation de donnรฉes. Les instructions DML sont utilisรฉes pour manipuler les donnรฉes dans la base de donnรฉes Salesforce. Par exemple -
Account acc = new Account(Name = โ Test Accountโ); Insert acc; //DML statement to create account record.
Environnement de dรฉveloppement Apex
Maintenant, dans ce didacticiel de programmation Apex, nous allons en apprendre davantage sur l'environnement de dรฉveloppement Apex :
Le code Apex peut รชtre dรฉveloppรฉ dans l'รฉdition sandbox et l'รฉdition dรฉveloppeur de Salesforce.
Il est recommandรฉ de dรฉvelopper le code dans l'environnement sandbox, puis de le dรฉployer dans l'environnement de production.
Outils de dรฉveloppement de code Apex : voici les trois outils disponibles pour dรฉvelopper du code Apex dans toutes les รฉditions de Salesforce.
- Console de dรฉveloppement Force.com
- IDE Force.com
- รditeur de code dans l'interface utilisateur de SalesforceVous
Type de donnรฉes dans Apex
Voici les types de donnรฉes pris en charge par apex :
Primitif
Entier, Double, Long, Date, Date Time, String, ID et Boolean sont considรฉrรฉs comme des types de donnรฉes primitifs. Tous les types de donnรฉes primitifs sont transmis par valeur et non par rรฉfรฉrence.
Collections
Trois types de collecte sont disponibles dans Apex
- Liste : Il s'agit d'une collection ordonnรฉe de primitives, de sObjects, de collections ou d'objets Apex basรฉs sur des indices.
- Ensemble : une collection dรฉsordonnรฉe de primitives uniques.
- Carte : il s'agit d'une collection de clรฉs primitives uniques qui correspondent ร des valeurs uniques qui peuvent รชtre des primitives, des sObjects, des collections ou des objets Apex.
sObjet
Il s'agit d'un type de donnรฉes spรฉcial dans Salesforce. C'est semblable ร un tableau dans SQL et contient des champs similaires aux colonnes de SQL.
Enums
Enum est un type de donnรฉes abstrait qui stocke une valeur d'un ensemble fini d'identifiants spรฉcifiรฉs
Matiรจre idรฉale
Objets
Il fait rรฉfรฉrence ร tout type de donnรฉes pris en charge dans Apex.
Interfaces
Spรฉcificateur d'accรจs Apex
Voici les spรฉcificateurs d'accรจs pris en charge par apex :
Public mode
Ce spรฉcificateur d'accรจs donne accรจs ร une classe, une mรฉthode, une variable ร utiliser par un sommet dans un espace de noms.
Privรฉ mode
Ce spรฉcificateur d'accรจs donne accรจs ร une classe, une mรฉthode, une variable ร utiliser localement ou dans la section de code qu'il est dรฉfini. Dans toute la technique, les variables pour lesquelles aucun spรฉcificateur d'accรจs n'est dรฉfini ont le spรฉcificateur d'accรจs par dรฉfaut privรฉ.
Protรฉgรฉ
Ce spรฉcificateur d'accรจs donne accรจs ร une mรฉthode, variable ร utiliser par toutes les classes internes au sein de la classe Apex dรฉfinissant.
Importation
Ce spรฉcificateur d'accรจs donne accรจs ร une classe, une mรฉthode, une variable ร utiliser par un sommet dans un espace de noms ainsi qu'en dehors de l'espace de noms. Il est recommandรฉ de ne pas utiliser de mot-clรฉ global tant que cela n'est pas nรฉcessaire.
Mots-clรฉs dans Apex
Avec partage
Si une classe est dรฉfinie avec ce mot-clรฉ, alors toutes les rรจgles de partage applicables ร l'utilisateur actuel sont appliquรฉes et si ce mot-clรฉ est absent, alors le code s'exรฉcute dans le contexte systรจme.
Par Exemple:
public with sharing class MyApexClass{
// sharing rules enforced when code in this class execute
}
Sans partage
Si une classe est dรฉfinie avec ce mot-clรฉ, alors toutes les rรจgles de partage applicables ร l'utilisateur actuel ne sont pas appliquรฉes.
Par Exemple:
public without sharing class MyApexClass{
// sharing rules is not enforced when code in this class execute
}
Statique
Une variable, Method est dรฉfinie avec le mot-clรฉ static est initialisรฉe une fois et associรฉe ร la classe. Variables statiques, les mรฉthodes peuvent รชtre appelรฉes directement par nom de classe sans crรฉer l'instance d'une classe.
Final
Une mรฉthode constante, dรฉfinie avec le mot-clรฉ final, ne peut pas รชtre remplacรฉe. Par exemple:
public class myCls {
static final Integer INT_CONST = 10;
}
Si vous essayez de remplacer la valeur de cette variable INT_CONST, vous obtiendrez une exception โ System.FinalException : la variable finale a dรฉjร รฉtรฉ initialisรฉe.
Retour
Ce mot-clรฉ renvoie une valeur d'une mรฉthode. Par exemple:
public String getName() {
return 'Test' ;
}
Null
Il dรฉfinit une constante nulle et peut รชtre affectรฉ ร une variable. Par exemple
Boolean b = null;
Salle de confรฉrence virtuelle
Si une classe est dรฉfinie avec un mot-clรฉ virtuel, elle peut รชtre รฉtendue et remplacรฉe.
Abstract
Si une classe est dรฉfinie avec le mot-clรฉ abstract, elle doit contenir au moins une mรฉthode avec le mot-clรฉ abstract, et cette mรฉthode ne doit avoir qu'une signature.
Par exemple
public abstract class MyAbstrtactClass {
abstract Integer myAbstractMethod1();
}
Chaรฎne Apex
Une chaรฎne est un ensemble de caractรจres sans limite de caractรจres. Par exemple:
String name = 'Test';
Il existe plusieurs mรฉthodes intรฉgrรฉes fournies par la classe String dans Salesforce. Voici les quelques fonctions frรฉquemment et principalement utilisรฉes :
abrรฉger (maxWidth)
Cette mรฉthode tronque une chaรฎne ร la longueur spรฉcifiรฉe et la renvoie si la longueur de la chaรฎne donnรฉe est plus longue que la longueur spรฉcifiรฉe ; sinon, il renvoie la chaรฎne d'origine. Si la valeur de la variable maxWidth est infรฉrieure ร 4, cette mรฉthode renvoie une exception d'exรฉcution โ System.StringException : la largeur minimale de l'abrรฉviation est de 4.
Par exemple :
String s = 'Hello World';
String s2 = s.abbreviate(8);
System.debug('s2'+s2); //Hello...
capitaliser()
Cette mรฉthode convertit la premiรจre lettre d'une chaรฎne en casse du titre et la renvoie.
Par exemple :
String s = 'hello;
String s2 = s.capitalize();
System.assertEquals('Hello', s2);
contient (sous-chaรฎne)
Cette mรฉthode renvoie true si la chaรฎne appelant la mรฉthode contient la sous-chaรฎne spรฉcifiรฉe.
String name1 = 'test1';
String name2 = 'test2';
Boolean flag = name.contains(name2);
System.debug('flag::',+flag); //true
est รฉgal ร (chaรฎneOuId)
Cette mรฉthode renvoie true si le paramรจtre passรฉ n'est pas nul et indique la mรชme sรฉquence binaire de caractรจres que la chaรฎne qui appelle la mรฉthode.
Lors de la comparaison des valeurs d'ID, la longueur des ID peut ne pas รชtre รฉgale. Par exemple : si une chaรฎne qui reprรฉsente un identifiant de 15 caractรจres est comparรฉe ร un objet qui reprรฉsente un identifiant de 18 caractรจres, cette mรฉthode renvoie vrai. Par exemple:
Id idValue15 = '001D000000Ju1zH';
Id idValue18 = '001D000000Ju1zHIAR';
Boolean result4 = stringValue15.equals(IdValue18);
System.debug('result4', +result4); //true
Dans l'exemple ci-dessus, la mรฉthode รฉgale compare l'identifiant d'objet de 15 caractรจres ร l'identifiant d'objet de 18 caractรจres et si ces deux identifiants reprรฉsentent la mรชme sรฉquence binaire, il retournera vrai.
Utilisez cette mรฉthode pour effectuer des comparaisons sensibles ร la casse.
escapeSingleQuotes (stringVersEscape)
Cette mรฉthode ajoute un caractรจre d'รฉchappement (\) avant toute citation simple dans une chaรฎne et le renvoie. Cette mรฉthode empรชche l'injection SOQL lors de la crรฉation d'une requรชte SOQL dynamique. Cette mรฉthode garantit que tous les guillemets simples sont considรฉrรฉs comme des chaรฎnes englobantes, au lieu de commandes de base de donnรฉes.
Par exemple :
String s = 'Hello Tom'; system.debug(s); // Outputs 'Hello Tom' String escapedStr = String.escapeSingleQuotes(s); // Outputs \'Hello Tom\'
supprimer (sous-chaรฎne)
Cette mรฉthode supprime toutes les occurrences de la sous-chaรฎne mentionnรฉe de la chaรฎne qui appelle la mรฉthode et renvoie la chaรฎne rรฉsultante.
Par exemple
String s1 = 'Salesforce and force.com';
String s2 = s1.remove('force');
System.debug( 's2'+ s2);// 'Sales and .com'
sous-chaรฎne (indexdรฉbut)
Cette mรฉthode renvoie une sous-chaรฎne qui commence ร partir du caractรจre de startIndex et s'รฉtend jusqu'au dernier de la chaรฎne.
Par Exemple:
String s1 = 'hamburger';
String s2 = s1.substring(3);
System.debug('s2'+s2); //burger
inverser ()
Cette mรฉthode inverse tous les caractรจres d'une chaรฎne et la renvoie. Par exemple:
String s = 'Hello';
String s2 = s.reverse();
System.debug('s2::::'+s2);// olleH // Hello
trim() : Cette mรฉthode supprime tous les espaces blancs de dรฉbut dโune chaรฎne et la renvoie.
valeurDe(versConvertir)
Cette mรฉthode renvoie la reprรฉsentation sous forme de chaรฎne de l'objet transmis.
Limites du gouverneur Apex
Les limites du gouverneur Apex sont les limites appliquรฉes par le moteur d'exรฉcution Apex pour garantir qu'aucun code et processus Apex de piste ne contrรดlent les ressources partagรฉes et ne violent le traitement des autres utilisateurs de l'environnement mutualisรฉ. Ces limites sont vรฉrifiรฉes pour chaque transaction apex. Voici les limites du gouverneur dรฉfinies par Salesforce pour chaque transaction Apex :
| Description | Limiter |
|---|---|
| Requรชtes SOQL pouvant รชtre effectuรฉes dans une transaction synchrone | 100 |
| Requรชtes SOQL pouvant รชtre effectuรฉes dans une transaction asynchrone | 200 |
| Enregistrements pouvant รชtre rรฉcupรฉrรฉs par une requรชte SOQL | 50000 |
| Enregistrements pouvant รชtre rรฉcupรฉrรฉs par Database.getQueryLocator | 10000 |
| Requรชtes SOSL pouvant รชtre effectuรฉes dans une transaction apex | 20 |
| Enregistrements pouvant รชtre rรฉcupรฉrรฉs par une requรชte SOSL | 2000 |
| Instructions DML pouvant รชtre effectuรฉes dans une transaction apex | 150 |
| Enregistrements pouvant รชtre traitรฉs ร la suite d'une instruction DML, Approval.process ou database.emptyRecycleBin | 10000 |
| Lรฉgendes pouvant รชtre effectuรฉes dans une transaction apex. | 100 |
| Limite de dรฉlai d'expiration cumulรฉe pour tous les appels effectuรฉs dans une transaction apex | 120 secondes |
| Limite des tรขches apex pouvant รชtre ajoutรฉes ร la file d'attente avec System.enqueueJob | 50 |
| Dรฉlai d'exรฉcution pour chaque transaction Apex | 10 minutes |
| Limite des caractรจres pouvant รชtre utilisรฉs dans une classe Apex et un dรฉclencheur | 1 millions |
| Limite de temps CPU pour les transactions synchrones | Millisecondes 10,000 |
| Limite de temps CPU pour les transactions asynchrones | Millisecondes 60,000 |
Apex Getter et Setter
La propriรฉtรฉ Apex est similaire ร la variable sommet. Getter et setter sont nรฉcessaires ร une propriรฉtรฉ apex. Getter et setter peuvent รชtre utilisรฉs pour exรฉcuter du code avant que la valeur de la propriรฉtรฉ ne soit accรฉdรฉe ou modifiรฉe. Le code de l'accesseur get s'exรฉcute lorsqu'une valeur de propriรฉtรฉ est lue. Le code dans l'accesseur set s'exรฉcute lorsqu'une valeur de propriรฉtรฉ est modifiรฉe. Toute propriรฉtรฉ ayant un accesseur get est considรฉrรฉe comme en lecture seule, toute propriรฉtรฉ ayant un accesseur dรฉfini est considรฉrรฉe comme รฉtant en รฉcriture. Seule toute propriรฉtรฉ ayant ร la fois un accesseur get et set est considรฉrรฉe comme รฉtant en lecture-รฉcriture. Syntaxe d'une propriรฉtรฉ sommet :
public class myApexClass {
// Property declaration
access_modifierreturn_typeproperty_name {
get {
//code
}
set{
//code
}
}
Ici, access_modifier est le modificateur d'accรจs de la propriรฉtรฉ. return_type est le dataType de la propriรฉtรฉ. property_name est le nom de la propriรฉtรฉ.
Vous trouverez ci-dessous un exemple de propriรฉtรฉ apex ayant ร la fois un accesseur get et set.
public class myApex{
public String name{
get{ return name;}
set{ name = 'Test';}
}
}
Ici, le nom de la propriรฉtรฉ est name, et c'est une propriรฉtรฉ publique, et elle renvoie une chaรฎne dataType.
Il n'est pas obligatoire d'avoir du code dans le bloc get et set. Ces blocs peuvent รชtre laissรฉs vides pour dรฉfinir une propriรฉtรฉ automatique. Par exemple:
public double MyReadWriteProp{ get; set; }
L'accesseur Get et set peut รฉgalement รชtre dรฉfini avec son modificateur d'accรจs. Si un accesseur est dรฉfini avec un modificateur, il remplace le modificateur d'accรจs de la propriรฉtรฉ. Par exemple:
public String name{private get; set;}// name is private for read and public to write.
Classe Apex
Une classe apex est un plan ou un modรจle ร partir duquel les objets sont crรฉรฉs. Un objet est l'instance d'une classe.
Il existe trois faรงons de crรฉer des classes apex dans Salesforce :
Console dรฉveloppeur
IDE Force.com
Page de dรฉtails de la classe Apex.
Dans Apex, vous pouvez dรฉfinir une classe externe รฉgalement appelรฉe classe de niveau supรฉrieur, ainsi que des classes au sein d'une classe externe appelรฉe classes internes.
Il est obligatoire d'utiliser un modificateur d'accรจs comme global ou public dans la dรฉclaration de la classe externe.
Il n'est pas nรฉcessaire d'utiliser un modificateur d'accรจs dans la dรฉclaration des classes internes.
Une classe apex est dรฉfinie ร lโaide du mot-clรฉ class suivi du nom de la classe.
Le mot-clรฉ Extends est utilisรฉ pour รฉtendre une classe existante par une classe apex, et le mot-clรฉ Implements est utilisรฉ pour implรฉmenter une interface par une classe apex.
Salesforce Apex ne prend pas en charge plusieurs hรฉritages, une classe apex ne peut รฉtendre qu'une seule classe apex existante mais peut implรฉmenter plusieurs interfaces.
Une classe apex peut contenir un constructeur dรฉfini par l'utilisateur, et si un constructeur dรฉfini par l'utilisateur n'est pas disponible, un constructeur par dรฉfaut est utilisรฉ. Le code d'un constructeur s'exรฉcute lorsqu'une instance d'une classe est crรฉรฉe.
Syntaxe de l'exemple de classe Apex :
public class myApexClass{
// variable declaration
//constructor
public myApexClass{
}
//methods declaration
}
Le nouveau mot-clรฉ est utilisรฉ pour crรฉer une instance d'une classe apex. Vous trouverez ci-dessous la syntaxe pour crรฉer une instance d'une classe apex.
myApexClass obj = new myApexClass();
Dรฉclencheur d'apex
Les dรฉclencheurs Apex vous permettent d'exรฉcuter un apex personnalisรฉ avant et aprรจs l'exรฉcution d'une opรฉration DML.
Prise en charge d'Apex suivant deux types de dรฉclencheurs :
Avant les dรฉclencheurs : ces dรฉclencheurs sont utilisรฉs pour valider et mettre ร jour la valeur du champ avant l'enregistrement de l'enregistrement dans la base de donnรฉes.
Aprรจs les dรฉclencheurs : ces dรฉclencheurs sont utilisรฉs pour accรฉder aux champs (ID d'enregistrement, champ LastModifiedDate) dรฉfinis par le systรจme aprรจs un enregistrement validรฉ dans la base de donnรฉes. La valeur de ces champs peut รชtre utilisรฉe pour modifier d'autres enregistrements. Les enregistrements dรฉclenchรฉs aprรจs des dรฉclencheurs sont en lecture seule.
Il est recommandรฉ d'รฉcrire des dรฉclencheurs volumineux. Un dรฉclencheur volumineux peut traiter un seul enregistrement ainsi que plusieurs enregistrements ร la fois.
Syntaxe d'un dรฉclencheur apex :
trigger TriggerName on ObjectName (trigger_events) {
//Code_block
}
Ici, TriggerName est le nom du dรฉclencheur, ObjectName est le nom de l'objet sur lequel le dรฉclencheur doit รชtre รฉcrit, trigger_events est la liste d'รฉvรฉnements sรฉparรฉs par des virgules.
Voici les รฉvรฉnements pris en charge par les dรฉclencheurs apex : avant l'insertion, avant la mise ร jour, avant la suppression, aprรจs l'insertion, aprรจs une mise ร jour, aprรจs la suppression, aprรจs la suppression.
Les mots-clรฉs statiques ne peuvent pas รชtre utilisรฉs dans un dรฉclencheur Apex. Tous les mots-clรฉs applicables aux classes internes peuvent รชtre utilisรฉs dans un dรฉclencheur Apex.
Il existe des variables implicites dรฉfinies par chaque dรฉclencheur qui renvoie le contexte d'exรฉcution. Ces variables sont dรฉfinies dans le systรจme. Classe de dรฉclenchement. Ces variables sont appelรฉes variables de contexte. La capture d'รฉcran ci-dessous montre la variable de contexte prise en charge par le dรฉclencheur apex.
Voici la prise en compte de la variable de contexte dans le dรฉclencheur apex :
- N'utilisez pas trigger.new et trigger.old dans les opรฉrations DML.
- Trigger.new ne peut pas รชtre supprimรฉ.
- Trigger.new est en lecture seule.
- Trigger.new peut รชtre utilisรฉ pour modifier les valeurs des champs sur le mรชme objet avant le dรฉclenchement uniquement.
Les captures d'รฉcran ci-dessous rรฉpertorient les considรฉrations concernant des actions spรฉcifiques dans diffรฉrents รฉvรฉnements dรฉclencheurs.
Classe par lots dans Apex
La classe Batch dans Salesforce est utilisรฉe pour traiter un grand nombre dโenregistrements qui dรฉpasseraient les limites du gouverneur apex sโils รฉtaient traitรฉs normalement. La classe Batch exรฉcute le code de maniรจre asynchrone.
Voici les avantages de la classe batch :
- La classe Batch traite les donnรฉes en morceaux et si un morceau ne parvient pas ร รชtre traitรฉ avec succรจs, tous les morceaux traitรฉs avec succรจs ne sont pas restaurรฉs.
- Chaque bloc de donnรฉes d'une classe de lots est traitรฉ avec un nouvel ensemble de limites du gouverneur qui garantissent que le code s'exรฉcute dans les limites d'exรฉcution du gouverneur.
- Base de donnรฉes. Lโinterface batchable doit รชtre implรฉmentรฉe par une classe apex pour รชtre utilisรฉe comme classe batch. Il fournit trois mรฉthodes qui doivent รชtre implรฉmentรฉes par la classe batch.
Voici les trois mรฉthodes fournies par Database. Interface batchable :
1. commencer()
Cette mรฉthode gรฉnรจre la portรฉe des enregistrements ou des objets ร traiter par la mรฉthode d'interface exรฉcutรฉe. Lors de l'exรฉcution du batch, il n'est appelรฉ qu'une seule fois. Cette mรฉthode renvoie soit un objet Database.QueryLocator, soit un Iterable. Le nombre d'enregistrements rรฉcupรฉrรฉs par une requรชte SQL ร l'aide de l'objet Database.QueryLocator est de 50 millions d'enregistrements, mais en utilisant un itรฉrable, le nombre total d'enregistrements pouvant รชtre rรฉcupรฉrรฉs par la requรชte SQL est de 50000 seulement. Iterable est utilisรฉ pour gรฉnรฉrer une portรฉe complexe pour la classe batch.
Syntaxe de la mรฉthode start :
global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {}
2.exรฉcuter()
Cette mรฉthode est utilisรฉe pour le traitement de chaque bloc de donnรฉes. Pour chaque bloc d'enregistrements, la mรฉthode d'exรฉcution est appelรฉe. La taille de lot par dรฉfaut pour l'exรฉcution est de 200 enregistrements. La mรฉthode Execute prend deux arguments :
Une rรฉfรฉrence ร l'objet Database.BatchableContext,
Une liste de sObjects, telle que List , ou une liste de types paramรฉtrรฉs. Syntaxe de la mรฉthode d'exรฉcution :
global void execute(Database.BatchableContext BC, list<P>){}
3.terminer()
La mรฉthode finish est appelรฉe une fois lors de lโexรฉcution de la classe batch. Les opรฉrations de post-traitement peuvent รชtre effectuรฉes dans la mรฉthode de finition. Par exemple : envoi de l'email de confirmation. Cette mรฉthode est appelรฉe lorsque tous les lots sont traitรฉs. Syntaxe de la mรฉthode Finish :
global void finish(Database.BatchableContext BC){}
Objet Database.BatchableContext
Chaque mรฉthode de la base de donnรฉes. Lโinterface batchable a une rรฉfรฉrence ร lโobjet Database.BatchableContext.
Cet objet est utilisรฉ pour suivre la progression du travail par lots.
Voici les mรฉthodes d'instance fournies par BatchableContext :
- getChildJobId() : cette mรฉthode renvoie l'ID d'un travail par lots en cours de traitement.
- getJobId() : cette mรฉthode renvoie l'ID du travail par lots.
Ci-dessous la syntaxe d'une classe batch :
global class MyBatchClass implements Database.Batchable<sObject> {
global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {
// collect the batches of records or objects to be passed to execute
}
global void execute(Database.BatchableContextbc, List<P> records){
// process each batch of records
}
global void finish(Database.BatchableContextbc){
// execute any post-processing operations
}
}
Mรฉthode Database.executeBatch
La mรฉthode Database.executeBatch est utilisรฉe pour exรฉcuter une classe batch.
Cette mรฉthode prend deux paramรจtres : Instance de la classe de lot ร traiter, Paramรจtre Options pour spรฉcifier la taille du lot si non spรฉcifiรฉ, il prend la taille par dรฉfaut de 200.
Syntaxe de Database.executeBatch :
Database.executeBatch(myBatchObject,scope)
Exรฉcution d'un nom de classe batch MyBatchClass :
MyBatchClassmyBatchObject = new MyBatchClass(); Id batchId = Database.executeBatch(myBatchObject,100);
Base de donnรฉes.stateful
La classe Batch est sans รฉtat par dรฉfaut. Chaque fois que la mรฉthode d'exรฉcution est appelรฉe, une nouvelle copie d'un objet est reรงue, toutes les variables de la classe sont initialisรฉes.
Database.stateful est implรฉmentรฉ pour rendre une classe batch avec รฉtat.
Si votre classe batch a implรฉmentรฉ le Base de donnรฉes , interface avec รฉtat, toutes les variables d'instance conservent leurs valeurs, mais les variables statiques sont rรฉinitialisรฉes entre les transactions.
Rรฉsumรฉ
- Apex est un outil fortement typรฉ et orientรฉ objet langage de programmation qui compile et s'exรฉcute sur la plateforme force.com
- Le langage de programmation Apex est un langage insensible ร la casse
- Il existe deux types de flux d'actions dans Apex : 1) Action du dรฉveloppeur 2) Action de l'utilisateur final
- Apex vous aide ร crรฉer des services Web qui intรจgrent Salesforce ร d'autres applications.
- Les types de donnรฉes pris en charge par apex sont : 1).Primitive 2) Collections 3) sObject, Enums, 4) Classes, 5) Objets et interfaces
- Public, Privรฉ, Protรฉgรฉ et Global sont spรฉcifiรฉs par Apex.
- Les mots clรฉs utilisรฉs dans Apex sont : 1) Avec partage, 2) Sans partage, 3) Statique, 4) Final 5) Retour, 6) Null, 7) Virtuel, 8) Abstrait
- Une chaรฎne est un ensemble de caractรจres sans limite de caractรจres
- Les limites du gouverneur Apex sont les limites appliquรฉes par le moteur d'exรฉcution Apex pour garantir que tout code et processus Apex de piste
- Getter et setter peuvent รชtre utilisรฉs pour exรฉcuter du code avant que la valeur de la propriรฉtรฉ ne soit accรฉdรฉe ou modifiรฉe
- Il existe trois maniรจres de crรฉer des classes Apex dans Salesforce : 1) Console du dรฉveloppeur 2) IDE Force.com et 3) Page de dรฉtails de la classe Apex.
- Les dรฉclencheurs Apex vous permettent d'exรฉcuter un apex personnalisรฉ avant et aprรจs l'exรฉcution d'une opรฉration DML.
- La classe Batch dans Salesforce est utilisรฉe pour traiter un grand nombre dโenregistrements qui dรฉpasseraient les limites du gouverneur apex sโils รฉtaient traitรฉs normalement.





