Einführung in Batch Apex + Beispiele

Teilen Sie diesen Artikel…

Einführung

Für Geschäftsszenarien, in denen die Plattform mehr als 50000 Datensätze verarbeiten muss, kommt Batch Apex zur Rettung. Batch Apex erleichtert die asynchrone Verarbeitung der Datensätze in mehreren Stapeln oder Blöcken und ist für einen Entwickler einfach zu implementieren.

Implementieren von Batch Apex

Batch Apex implementiert die Datenbank.stapelbare Schnittstelle. Die Schnittstelle verfügt über die Methoden Start(), Execute() und Finish(), die in der Batch-Apex-Klasse implementiert werden sollten.

  1. Startmethode: Die Startmethode ist ein Sammelpunkt für die zu verarbeitenden Datensätze in der execute-Methode des Batch-Apex
  2. Execute-Methode: Die eigentliche Verarbeitung der Datensätze erfolgt in der execute-Methode.
  3. Methode beenden: Finish-Methoden können Post-Job-Verarbeitungsaktionen wie das Senden der E-Mails haben oder es kann auch verwendet werden, um eine andere Batch-Klasse zu verketten.

Planen des Batch-Apex

Methode 1: Verwenden der OOTB Schedule Apex-Funktionalität

Schritte:

  1. Klicken Sie auf Setup und suchen Sie im Feld Schnellsuche nach Apex-Klassen.
  2. Klicken Sie oben auf die Schaltfläche Apex planen.

3. Geben Sie die Informationen auf der Seite Zeitplan / Datensatz ein und speichern Sie sie. Die Apex-Klasse sollte die Scheduler-Klasse sein, die die executebatch (Batch) -Methode implementiert.

Codeausschnitt für die Scheduler-Klasse:

global class AccBatchScheduleClass implements Schedulable { global void execute(SchedulableContext ctx) { AccBatchApex batch = new AccBatchApex(); database.executebatch(batch); }}

Methode 2: Aufrufen der Batch-Klasse über Schedulable Apex:

Die Apex-Klasse sollte erstellt werden, die den Schedulable Apex implementieren soll. Der Schedulable Apex muss System implementieren.Schedule() -Methode, um den Batch-Apex in der Ausführungswarteschlange in die Warteschlange einzureihen. System.Die Methode Schedule () erwartet drei Argumente, nämlich den Jobnamen, den Cron-Ausdruck für den Stapelzeitplan und den Stapelklassennamen.

Beispiel Schedulable Apex:

Batch Apex Verkettung

Mit dem Beginn der API-Version 29.0 und danach kann eine Batch-Klasse mit einer anderen Batch-Klasse verkettet werden. Die Verkettung von Batch-Klassen startet die Ausführung der verketteten Batch-Klasse, sobald die Ausführung der Basis-Batch-Klasse abgeschlossen ist. Maximal können nur 5 Batch-Jobs miteinander verkettet werden. Ein Beispielcode-Snippet zum Verketten des Batch-Apex ist unten dargestellt:

Batch-Apex-Beispiel

Anwendungsfall: Füllen Sie den Abrechnungsstatus als Kalifornien für alle Konten mit Land als USA und ohne Abrechnungsstatusinformationen.

Lösungsdesign: Die Organisation verfügt über mehr als 50K Datensätze, die auf die fehlenden Abrechnungsstatusinformationen überflogen werden müssen, sodass das Schreiben des Batch-Apex die optimale Lösung ist. Auch Trigger, Workflows, Process Builder etc. zum Auslösen ist eine DML-Operation erforderlich, damit diese Lösungen nicht den Geschäftsanforderungen entsprechen.

Wichtige Informationen

  • Bis zu 5 Batch-Jobs können gleichzeitig in die Warteschlange gestellt oder aktiv sein.
  • Die maximale Anzahl von Batch-Apex-Methodenausführungen pro 24-Stunden-Zeitraum beträgt 250.000 oder die Anzahl der Benutzerlizenzen in Ihrer Organisation multipliziert mit 200 — je nachdem, welcher Wert größer ist.
  • Im QueryLocator-Objekt können maximal 50 Millionen Datensätze zurückgegeben werden. Wenn mehr als 50 Millionen Datensätze zurückgegeben werden, wird der Stapelauftrag sofort beendet und als fehlgeschlagen markiert.
  • Wenn die Startmethode der Batch-Klasse einen QueryLocator zurückgibt, kann der optionale Bereichsparameter von executeBatch einen Maximalwert von 2.000 haben.
  • Wenn die Startmethode der Batch-Klasse ein iterable zurückgibt, hat der Wert des Bereichsparameters keine Obergrenze.
  • Die Methoden start, execute und finish können jeweils bis zu 100 Callouts implementieren. Implementieren Sie AllowsCallouts zum Aktivieren von Callouts aus dem Batch-Apex.
  • Als future deklarierte Methoden können nicht von einer Batch-Apex-Klasse aufgerufen werden.
  • Alle Methoden in der Klasse müssen als global oder public definiert sein.

Optimieren Ihrer Implementierung

  • Batch-Apex-Jobs werden schneller ausgeführt, wenn die Startmethode ein QueryLocator-Objekt zurückgibt, das keine zugehörigen Datensätze über eine Unterabfrage enthält. Durch das Vermeiden von Beziehungsunterabfragen in einem QueryLocator können Stapelaufträge mit einer schnelleren Chunk-Implementierung ausgeführt werden.
  • Um eine schnelle Ausführung von Batch-Jobs zu gewährleisten, minimieren Sie die Webdienst-Callout-Zeiten und optimieren Sie Abfragen, die in Ihrem Batch-Apex-Code verwendet werden.
  • Für jeweils 10.000 AsyncApexJobrecords erstellt Apex einen AsyncApexJob-Datensatz vom Typ BatchApexWorker zur internen Verwendung. Bei der Abfrage aller AsyncApexJob-Datensätze wird empfohlen, Datensätze vom Typ BatchApexWorker mithilfe des JobTyps
  • herauszufiltern. Dieser Prozess stellt sicher, dass die Freigabe korrekt und vollständig ist.
  • Verwenden Sie die Testmethoden startTest und stopTest um die executeBatch-Methode, um sicherzustellen, dass sie beendet wird, bevor Sie mit dem Test fortfahren.

You might also like

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.