Introduction
Pour les scénarios métier qui nécessitent que la plate-forme traite plus de 50000 enregistrements, Batch Apex vient à la rescousse. Batch Apex facilite le traitement asynchrone des enregistrements en plusieurs lots ou morceaux et est simple à mettre en œuvre pour un développeur.
Implémentation de Batch Apex
Batch Apex implémente la base de données.interface batchable. L’interface a des méthodes Start(), Execute() et Finish() qui doivent être implémentées dans la classe Batch Apex.
- Méthode de démarrage: La méthode de démarrage est un point de collecte des enregistrements à traiter dans la méthode d’exécution du lot apex
- Méthode d’exécution: Le traitement réel des enregistrements a lieu dans la méthode d’exécution.
- Méthode de finition: Les méthodes de finition peuvent avoir des actions de traitement post-travail comme l’envoi des e-mails ou elles peuvent également être utilisées pour enchaîner une autre classe de lot.
Planification du lot Apex
Méthode 1: Utilisation de la fonctionnalité OOTB Schedule Apex
Étapes:
- Cliquez sur Configuration et recherchez les classes Apex dans la zone de recherche rapide.
- Cliquez sur le bouton Planifier Apex dans le panneau supérieur.
3. Remplissez les informations sur la page d’enregistrement Planifier Apex et enregistrez. La classe apex doit être la classe de planificateur implémentant la méthode executebatch (batch).
Extrait de code pour la classe de planificateur:
global class AccBatchScheduleClass implements Schedulable { global void execute(SchedulableContext ctx) { AccBatchApex batch = new AccBatchApex(); database.executebatch(batch); }}
Méthode 2: Appel de la classe Batch via l’Apex programmable:
La classe Apex doit être créée pour implémenter l’apex programmable. L’apex programmable doit implémenter le système.Méthode Schedule() pour mettre en file d’attente l’apex du lot dans la file d’attente d’exécution. système.La méthode Schedule() 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 programmable :
Chaînage d’Apex par lots
Avec l’apparition de la version API 29.0 et après, une classe de lot peut être enchaînée à une autre classe de lot. Le chaînage de batch apex lance l’exécution de la classe de lot chaînée une fois l’exécution de la classe de lot de base terminée. Au maximum, seuls 5 travaux par lots peuvent être enchaînés les uns aux autres. Un exemple d’extrait de code pour chaîner le lot Apex est illustré ci-dessous:
Exemple de lot Apex
Cas d’utilisation: Renseignez l’État de facturation en 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 a plus de 50 000 enregistrements qui doivent être analysés pour trouver les informations d’état de facturation manquantes, donc l’écriture du lot Apex est la solution optimale. Déclencheurs, Workflows, Constructeurs de processus, etc. aura besoin d’une opération DML pour se déclencher afin que ces solutions ne répondent pas aux exigences métier.
Choses à retenir
- Jusqu’à 5 tâches par lots peuvent être mises en file d’attente ou actives simultanément.
- Le nombre maximum d’exécutions de méthodes 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 l’objet QueryLocator. Si plus de 50 millions d’enregistrements sont renvoyés, le travail par lots est immédiatement terminé et marqué comme ayant échoué.
- Si la méthode startmethod de la classe batch renvoie un QueryLocator, le paramètre de portée optionnel d’executeBatch peut avoir une valeur maximale de 2 000.
- Si la méthode start de la classe batch renvoie une itérable, la valeur du paramètre scope n’a pas de limite supérieure.
- Les méthodes start, execute et fin peuvent implémenter jusqu’à 100 légendes chacune. Implémentez AllowsCallouts pour activer les légendes à partir de l’apex du lot.
- Les méthodes déclarées comme futures ne peuvent pas être appelées à partir d’une classe Apex batch.
- Toutes les méthodes de la classe doivent être définies comme globales ou publiques.
Optimisation de votre implémentation
- Les tâches Apex Batch s’exécutent plus rapidement lorsque startmethod renvoie un objet QueryLocator qui n’inclut pas les enregistrements associés via une sous-requête. Éviter les sous-requêtes relationnelles dans un QueryLocator permet aux travaux par lots de s’exécuter à l’aide d’une implémentation plus rapide et fragmentée.
- Pour assurer une exécution rapide des tâches par lots, minimisez les temps de légende du service Web et ajustez les requêtes utilisées dans le code Apex de votre lot.
- Pour chaque 10 000 enregistrements Asyncapexjob, Apex crée un enregistrement AsyncApexJob de type BatchApexWorker pour un usage interne. Lors de l’interrogation de tous les enregistrements AsyncApexJob, nous vous recommandons de filtrer les enregistrements de type BatchApexWorker à l’aide du JobType
- Pour un recalcul de partage, nous recommandons que la méthode execute supprime puis recrée tous les partages gérés par Apex pour les enregistrements du lot. Ce processus garantit que le partage est exact et complet.
- Utilisez les méthodes de test startTest et stopTest autour de la méthode executeBatch pour vous assurer qu’elle se termine avant de poursuivre votre test.