top of page
TrueLines_grandient_1_4x_edited.png
  • Photo du rédacteurCéline Désile

Le batch APEX, indispensable pour traiter un grand nombre d'enregistrements Salesforce

Dernière mise à jour : 24 janv.

Les limites Salesforce sont nombreuses et le volume des données à traiter n'y échappe pas. Plusieurs méthodes s'offrent à vous pour exécuter votre code, mais la plus adaptée lorsque vous avez beaucoup d'enregistrements à traiter est sans doute le batch Apex.


Son fonctionnement est assez simple. Vous avez trois méthodes à implémenter :


La méthode start() vous permet de collecter les enregistrements à traiter. Elle n'est exécutée qu'une seule fois et elle est généralement constituée d’une requête SOQL pour récupérer les enregistrements.


public Database.QueryLocator start(Database.BatchableContext BC) {
       
        String query = 'SELECT Id, Name FROM Account';
        
        return Database.getQueryLocator(query);
}

La méthode execute() vous permet de traiter les enregistrements. Elle peut être exécutée plusieurs fois. Si ce n'est pas le cas, vous n'avez probablement pas d'intérêt à utiliser le batch Apex.

Par défaut, les méthodes execute() vont traiter les enregistrements par 200, mais vous pouvez aussi définir la taille du batch que vous souhaitez. Par exemple, si 50 000 enregistrements sont récupérés dans la méthode start(), la méthode execute() sera exécutée 250 fois si la taille des lots est 200.


public void execute(Database.BatchableContext BC, List<sObject> importList) {

        //Le code a exécuter

}

La méthode finish() est également exécutée une seule fois lorsque tous les lots ont été traités. Vous pouvez par exemple l'utiliser pour envoyer un mail afin de notifier la fin de traitement des enregistrements.


public void finish(Database.BatchableContext BC){

        System.debug('L'exécution du batch est terminée');

}

Le gros avantage de cette méthode est que les limites sont remises à zéro pour chaque lot, ce qui vous permet de faire vos opérations DML ou autres requêtes SOQL en toute sérénité. Vous pouvez ainsi traiter jusqu'à 50 millions d'enregistrements !


Selon l'utilisation que vous en avez, vous pouvez lancer le batch de différentes manières.

Si vous prévoyez de le lancer suite à la modification d'un objet dans Salesforce, ou suite à l'action d'un utilisateur (ex : bouton), vous pouvez l'invoquer avec une classe simple :


public with sharing class batchClass {
    
    @InvocableMethod(label='name' description='description' category='')
    public static void execute() {    
    	myBatch batch = new myBatch();
    	Database.executeBatch(batch, 50);
    }
}

La méthode executeBatch peut prendre deux paramètres, le deuxième (optionnel) vous permet de définir le nombre d'enregistrements à traiter par lot.


Si vous prévoyez de lancer le batch de façon périodique mais sans l'intervention d'un tiers, alors programmer l'exécution du batch sera votre meilleur option. C'est là qu'intervient le Schedulable Batch, voici comment l'implémenter :


global class SchedulableBatch implements Schedulable {

    global void execute(SchedulableContext SC) {

        myBatch batch = new myBatch();
	    Database.executeBatch(batch);
   }

Vous aurez ensuite besoin de la developer console, ou d'un script, pour lancer votre Schedulable Batch :


String scheduledBatchName = 'ScheduledBatch';
String CRON_EXP = '0 40 * ? * * *';
myScheduledBatch scheduledBatch = new myScheduledBatch();

System.schedule(scheduledBatchName, CRON_EXP, scheduledBatch); 


----

Vous vous demandez si vous pouvez vos logiciels d'entreprise en eux ? Ou vous avez besoin d'aide pour le faire ?

22 vues
bottom of page