• Accueil / Salesforce / Introduction à Batch…
, Introduction à Batch Apex dans Salesforce + Exemples<span class="wtr-time-wrap after-title"><span class="wtr-time-number">7</span> minutes de lecture</span>

Introduction à Batch Apex dans Salesforce + Exemples7 minutes de lecture


Qu’est-ce que Batch Apex dans Salesforce ?

Pour les scénarios commerciaux qui nécessitent que la plate-forme traite plus de 50 000 enregistrements, Batch Apex vient à la rescousse. Batch Apex facilite le traitement asynchrone des enregistrements en plusieurs lots ou fragments et est simple à mettre en œuvre pour un développeur.

Implémentation d’Apex par lots

Batch Apex implémente le Database.batchable interface. L’interface a les méthodes Start(), Execute() et Finish() qui doivent être implémentées dans la classe Batch Apex.

, Introduction à Batch Apex dans Salesforce + Exemples<span class="wtr-time-wrap after-title"><span class="wtr-time-number">7</span> minutes de lecture</span>
  1. Méthode de démarrage : la méthode de démarrage est un point de collecte pour les enregistrements à traiter dans la méthode d’exécution de l’apex du lot
  2. Méthode d’exécution : Le traitement effectif des enregistrements a lieu dans la méthode d’exécution.
  3. Méthode de finition : les méthodes de finition peuvent avoir des actions de traitement après le travail, telles que l’envoi d’e-mails, ou peuvent également être utilisées pour enchaîner une autre classe de traitement par lots.

Planification du lot Apex

Méthode 1 : Utilisation de la fonctionnalité OOTB Schedule Apex

Pas:

  1. Cliquez sur Configuration et recherchez Classes Apex dans la zone de recherche rapide.
  2. Cliquez sur le bouton Planifier Apex dans le panneau supérieur.
, Introduction à Batch Apex dans Salesforce + Exemples<span class="wtr-time-wrap after-title"><span class="wtr-time-number">7</span> minutes de lecture</span>

3. Remplissez les informations sur la page d’enregistrement Planifier Apex et enregistrez. La classe apex doit être la classe Scheduler implémentant le exécuterbatch(lot) méthode.

Extrait de code pour la classe Scheduler :

global class AccBatchScheduleClass implements Schedulable {
global void execute(SchedulableContext ctx) {
AccBatchApex batch = new AccBatchApex();
database.executebatch(batch);
}
}
, Introduction à Batch Apex dans Salesforce + Exemples<span class="wtr-time-wrap after-title"><span class="wtr-time-number">7</span> minutes de lecture</span>

Méthode 2 : Appel de la classe Batch via Apex planifiable :

La classe Apex doit être créée pour implémenter l’apex Schedulable. L’apex planifiable doit implémenter System.Schedule() pour mettre en file d’attente le sommet du lot dans la file d’attente d’exécution. Le System.Schedule() La méthode attend trois arguments, à savoir le nom du travail, l’expression Cron pour la planification du lot et le nom de la classe du lot.

Exemple d’Apex planifiable :

global class AccBatchScheduleClass implements Schedulable {
global void execute(SchedulableContext ctx) {
AccBatchApex accCls = new AccBatchApex();
String cronStr = '20 30 8 10 2 ?';
String jobID = System.schedule('Process Acc Records', cronStr, accCls);
}
}

Chaînage Apex par lots

Avec l’apparition de l’API version 29.0 et ultérieure, une classe de lots peut être enchaînée à une autre classe de lots. Le chaînage de l’apex batch démarre l’exécution de la classe batch chaînée une fois l’exécution de la classe batch de base terminée. Au maximum, seules 5 tâches Batch peuvent être enchaînées les unes aux autres. Un exemple d’extrait de code pour le chaînage du lot Apex est illustré ci-dessous :

global database.querylocator start(Database.BatchableContext BC)
{
//start method logic here
}
global void execute(Database.BatchableContext BC, List&amp;lt;sObject&amp;gt; scope)
{
//start method logic here
}
global void finish(Database.BatchableContext BC)
{
//Batch Chaining Step Starts here
AccountBatch accBatch = new AccountBatch ();
Id batchProcessId = Database.executeBatch(accBatch);
//finish method logic here
}

Exemple de lot Apex

Cas d’utilisation: Renseignez l’État de facturation en tant que Californie pour tous les comptes avec le pays en tant que États-Unis et aucune information sur l’État de facturation.

Conception de solutions : L’organisation possède plus de 50 000 enregistrements qui doivent être écumés pour les informations manquantes sur l’état de facturation. L’écriture du lot Apex est donc la solution optimale. De plus, les déclencheurs, les flux de travail, les générateurs de processus, etc. auront besoin d’une opération DML pour se déclencher, de sorte que ces solutions ne correspondent pas aux besoins de l’entreprise.

global class UpdateAccountBillingState implements Database.Batchable&amp;lt;sObject&amp;gt;, Database.Stateful {
global Database.QueryLocator start(Database.BatchableContext bc) {
return Database.getQueryLocator(
'SELECT ID,BillingState,BillingCountry FROM Account Where BillingCountry ='USA' AND BillingState ='''
);
}
global void execute(Database.BatchableContext bc, List&amp;lt;Account&amp;gt; scope){
// process each batch of record
List&amp;lt;Account&amp;gt; lstAccount = new List&amp;lt;Account&amp;gt;();
for (Account acc : scope) {
acc.BillingState = 'California';
lstAccount.add(acc);
}
update lstAccount;
}
global void finish(Database.BatchableContext bc){
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
// Use the
AsyncApexJob a = [Select a.TotalJobItems, a.Status, a.NumberOfErrors,
a.JobType, a.JobItemsProcessed, a.ExtendedStatus, a.CreatedById,
a.CompletedDate From AsyncApexJob a WHERE id = :BC.getJobId()];
// below code will send an email to User about the status
String[] email = new String[]{'.com'};
mail.setToAddresses(email);
mail.setReplyTo('[email protected]'); // Add here your email address
mail.setSenderDisplayName('Apex Batch Processing Module');
mail.setSubject('Batch Processing '+a.Status);
mail.setPlainTextBody('The Batch Apex job processed '+ a.TotalJobItems+'batches with '+a.NumberOfErrors+'failures '+'Job Itemprocessed are '+a.JobItemsProcessed);
Messaging.sendEmail(new Messaging.Singleemailmessage [] {mail});
}    
}

Choses à retenir

  • Jusqu’à 5 tâches par lots peuvent être mises en file d’attente ou actives simultanément.
  • Le nombre maximal d’exécutions de méthode Apex par lot par période de 24 heures est de 250 000, ou le nombre de licences utilisateur dans votre organisation multiplié par 200, selon le plus élevé des deux.
  • Un maximum de 50 millions d’enregistrements peuvent être renvoyés dans le QueryLocator objet. Si plus de 50 millions d’enregistrements sont renvoyés, le traitement par lots est immédiatement terminé et marqué comme Échec.
  • Si la méthode start de la classe batch renvoie un QueryLocator, le paramètre de portée facultatif de exécuterBatch peut avoir une valeur maximale de 2 000.
  • Si la méthode de démarrage de la classe batch renvoie un itérable, la valeur du paramètre de portée n’a pas de limite supérieure.
  • Les méthodes de démarrage, d’exécution et de fin peuvent implémenter jusqu’à 100 accroches chacune. Mettre en œuvre Autorise les légendes pour activer les légendes à partir de l’apex Batch.
  • Les méthodes déclarées comme futures ne peuvent pas être appelées à partir d’une classe Apex par lot.
  • Toutes les méthodes de la classe doivent être définies comme globales ou publiques.

Optimiser votre mise en œuvre

  • Les tâches Apex par lots s’exécutent plus rapidement lorsque la méthode de démarrage renvoie un QueryLocator objet qui n’inclut pas les enregistrements liés via une sous-requête. Éviter les sous-requêtes de relation dans un QueryLocator permet aux tâches par lots de s’exécuter à l’aide d’une implémentation fragmentée plus rapide.
  • Pour garantir une exécution rapide des tâches par lots, réduisez les temps d’appel des services Web et ajustez les requêtes utilisées dans votre code Apex par lots.
  • Pour chaque 10 000 AsyncApexJobenregistrements, Apex crée un AsyncApexJob enregistrement de type BatchApexWorker pour usage interne. Lors de la requête pour tous AsyncApexJob enregistrements, nous vous recommandons de filtrer les enregistrements de type BatchApexWorker en utilisant le Type d’emploi
  • Pour un recalcul du partage, nous recommandons que la méthode d’exécution supprime, puis recrée tous les partages gérés Apex pour les enregistrements du lot. Ce processus garantit que le partage est exact et complet.
  • Utiliser les méthodes de test startTest et stopTest autour du exécuterBatch méthode pour vous assurer qu’il se termine avant de continuer votre test.



Source de l’article traduit automatiquement en Français

Besoin d'aide ?
Vous utilisez Pardot depuis un certain temps mais vous n'êtes pas sûr d'en
exploiter tout le potentiel

Notre analyse de votre Pardot offerte dès aujourd'hui
Merci, vous pouvez compléter notre questionnaire
Nous allons revenir vers vous rapidement !

Fermer