Batch -Apex in Salesforce

Batch -Apex in Salesforce
In Salesforce ist Batch Apex ein asynchroner Prozess, in dem jeder Prozess auf einem anderen Thread ausgeführt wird. Deshalb ist es ein asynchroner Prozess. Mit diesem können wir die Datensätze gleichzeitig massen und löschen. Im Vergleich zum synchronen Prozess sind die Governor -Grenzen für diesen asynchronen Prozess mehr (da jeder Prozess auf seinem eigenen Thread ausgeführt wird). Im Rahmen dieses Tutorials werden wir diskutieren, wie Sie die Aufzeichnungen aus einem Salesforce -Objekt mit Beispielen einsetzen, Massenaktualisierungen und Massen löschen können. Wir führen jeweils szenariobasierte Diskussionen weiter. Lassen Sie uns in unser Tutorial eintauchen.

Szenario:

Sravan leitet ein Unternehmen und nutzt Salesforce Org, um die Gehälter seiner Mitarbeiter zu verfolgen. Es gibt nur 200 Mitarbeiter. Er hat alle Daten in einem „Konto“ -Objekt in der Salesforce -Datenbank gespeichert und ein benutzerdefiniertes Feld erstellt, das in einem Kontrollkästchen -Typ „gutgeschrieben“ wird und es auf True aktualisiert wird, wenn das Gehalt ihnen gutgeschrieben wird. Nach 2 Jahren stieg seine Angestellte auf 2 lakh an. Es ist nicht in der Lage, dieses Feld bei einer Transaktion zu aktualisieren. Also bat er den Salesforce -Entwickler, ihm dabei zu helfen. Dann schlug der Entwickler vor, dass der Batch Apex 2 Lakh -Datensätze gleichzeitig aktualisiert (Batch by Batch).

Batch -Apex:

Wie wir bereits diskutiert haben, ist Batch Apex ein asynchroner Prozess, in dem jeder Prozess auf einem anderen Thread ausgeführt wird. Es verarbeitet die Data -Stapel nach Stapel und hat bei diesem Betrieb 3 Schritte. Standardmäßig beträgt die Chargengröße 200, aber wir können bis zu 2000 ausdehnen. Die Mindestgröße beträgt 1.

Phase I:

Dies ist die „Start“ -Phase, in der die Datensätze aus der zu verarbeitenden Salesforce erfasst werden. Wir können die SOQL -Abfrage verwenden, um die Datensätze in dieser Phase zurückzugeben. Grundsätzlich implementiert die "Batch" -Klasse die "Datenbank".Batchierbar “.

Wir können die Start () -Methode anhand des QueryLocators (es zur Abfrage zurückkehren) aus der "Datenbank" -Klasse definieren. Es ist sehr wichtig, den Parameter batchableContext aus der Klasse „Datenbank“ zu übergeben. Innerhalb dieser Methode können wir die SOQL in der Datenbank angeben.GetQueryRocator () -Methode und geben Sie sie zurück.

Siehe die folgende Methodenstruktur:

Phase II:

Dies ist die Phase „Execute“, in der die Aufzeichnungsstapel aus der Startphase erfasst wird, die von der SOQL -Abfrage zurückgegeben wird. Es verarbeitet diese Datensätze und erhält die Datensätze erneut aus der Abfrage, bis alle Datensätze abgeschlossen sind.

Wir können die methode execute () definieren, indem wir als void (leer) zurückkehren. Es ist sehr wichtig, den BatchableContext als erster Parameter aus der "Datenbank" -Klasse zu übergeben, die der Start () -Methode ähnelt. Der zweite Parameter ist das Sobject (Salesforce Standard/Custom Object) in einer „Liste“.

Siehe die folgende Methodenstruktur:

Phase III:

Dies ist die Phase „Finish“, in der die Post -Operationen wie das Senden von E -Mails, das Anzeigen von Nachrichten usw., werden in dieser Phase genommen.

Wir können die Methode finde () definieren, indem wir als leer zurückkehren (leer). Es ist sehr wichtig, den BatchableContext als erster Parameter aus der "Datenbank" -Klasse zu übergeben, die der Start () -Methode ähnelt.

Siehe die folgende Methodenstruktur:

Gesamtstruktur:

Umgebungsaufbau

1. Gehen Sie zur "Developer Console" und gehen Sie zur Datei "Neue" aus. Wählen Sie dann "Apex -Klasse" (Apex -Klasse wird mit gespeichert .APXC -Erweiterung).

2. Sie können den Klassennamen nach dem Klicken auf "Apex -Klasse" angeben. Klicken Sie dann auf "OK".

3. Nach dem Schreiben der Klasse können Sie sie ausführen, indem Sie eine Instanz davon erstellen. Wir können es in das "anonyme Fenster" schreiben.

Anwendung 1: Aktualisierung

Schreiben wir eine "Batch -Klasse" in die Salesforce Standard -Objektkampagne, um den "Kampagnennamen" auf "LinuxHint Camp1" zu aktualisieren, wenn der Status "geplant" ist.

Globale Klasse batchExample1 implementiert die Datenbank.Batchierbar
Globale Datenbank.Querylocator -Start (Datenbank.BatchableContext BC)

// Schreiben Sie die SOQL -Abfrage auf das Kampagnenobjekt
// Um ​​die Datensätze mit Status zu erhalten - 'geplant'
Datenbank zurückgeben.GetQueryLocator ('Name, Name, Status aus der Kampagne, wobei Status = \' geplant \ 'order mit Namen');

globale Leere (Datenbank.BatchableContext BC, Liste Kamplistin)

// die Kampagnenaufzeichnungen iterieren
für (Kampagnencamp_OBJ: Camplist)
if (camp_obj.Status == 'geplant')
// den Kampagnennamen aktualisieren
Camp_OBJ.Name = 'LinuxHint Camp1';


versuchen
// Verwenden Sie Update - DML, um den Kampagnennamen zu aktualisieren
Camplist aktualisieren;
catch (Ausnahme e)
System.Debug (e);


Globales Leerlauf (Datenbank.BatchableContext BC)

// Hier wird nichts benötigt

Führen Sie die Klasse durch, indem Sie eine Instanz erstellen.

BatchExample1 firstExample_1 = new batchExample1 ();
Datenbank.executeBatch (firstExample_1);

Erläuterung:

  1. Wir schreiben eine SOQL.
  2. Verwenden Sie für die Schleife in der Methode execute () das Objekt „Kampagnen“ und geben die Bedingung „If“ an, um zu überprüfen, ob der Status „geplant“ ist oder nicht. Wenn es geplant ist, aktualisieren wir den "Kampagnennamen" auf "LinuxHint Camp1". Wir verwenden das DML "Update", um die Datensätze unter dem Try -Block zu aktualisieren.

Überprüfen:

Wir können überprüfen, ob die Charge ohne Fehler unter den „Apex -Jobs“ verarbeitet wird. Suchen Sie danach in "Schnellfind".

2. Um nach Ihrer "Batch" -Kasse zu überprüfen, können wir sehen, dass die „verarbeiteten Stapel“ 1 und „Fehler“ 0 sind.

3. Gehen Sie zur Registerkarte "Kampagne" und überprüfen Sie, ob der "Kampagnenname" aktualisiert wird oder nicht.

Es gibt nur einen Datensatz mit einem „geplanten“ Status. Der „Kampagnenname“ wird auf "LinuxHint Camp1" aktualisiert.

Anwendung 2: Löschen

Schreiben wir eine "Stapelklasse" über das Salesforce -Standardobjekt, das "Kampagne" zum Löschen eines Datensatzes ist.

Globale Klasse batchePample2 implementiert die Datenbank.batchierbar
Globale Datenbank.Querylocator -Start (Datenbank.BatchableContext bc)
// Soql Abfrage, um einen Datensatz aus dem Kampagnenobjekt zurückzugeben
Datenbank zurückgeben.GetQueryLocator ('ID aus Kampagnenlimit 1 auswählen');

globale Leere (Datenbank.BatchableContext BC, Liste Umfang)
// DML löschen
Umfang löschen;

Globales Leerlauf (Datenbank.BatchableContext bc)
// keine Notwendigkeit, hier etwas zu tun.

Führen Sie die Klasse durch, indem Sie eine Instanz erstellen.

BatchExample2 example_2 = new batchExample2 ();
Datenbank.executeBatch (Beispiel_2);

Erläuterung:

  1. Wir schreiben eine SoQL.
  2. Wir verwenden die DML "Löschen" in der Methode execute (), um diesen Datensatz zu löschen. Sie können auch einen Versuchsblock um die DML -Löschung anwenden.

Überprüfen:

Wir können die gelöschten Datensätze unter dem "Recycle Bin" überprüfen. Gehen Sie zum "App Launcher" und überprüfen Sie danach.

Sie können eine sehen, die die Aufzeichnung aus dem Objekt "Kampagne" gelöscht wird.

Anwendung 3: Einfügung

Schreiben wir eine "Stapelklasse" in das Salesforce -Standardobjekt, das "Konto" zum Einfügen eines Datensatzes ist.

Global Class BatchePample3 implementiert die Datenbank.Batchierbar
Globale Datenbank.Querylocator -Start (Datenbank.BatchableContext bc)
// Soql Abfrage, nur einen Datensatz aus dem Kontoobjekt zurückzugeben
Datenbank zurückgeben.GetQueryLocator ('ID, Name aus dem Kontolimit 1');

globale Leere (Datenbank.BatchableContext BC, Liste Umfang)
// Liste des Typs erstellen - Konto - Konto
Aufführen Alist = neue Liste();
// Objekt für das Konto erstellen
Konto neu = neuer Konto ();
// Setzen Sie das Feld mit Wert
ein neuer.Name = 'LinuxHint -Datensatz';
// Fügen Sie das Objekt (Instanz) der Liste hinzu
eine Liste.hinzufügen (neu);
// DML einfügen
Alist einfügen;

Globales Leerlauf (Datenbank.BatchableContext bc)
// hier nicht nötig zu tun

Führen Sie die Klasse durch, indem Sie eine Instanz erstellen.

BatchExample3 example_3 = new batchExample3 ();
Datenbank.executeBatch (Beispiel_3);

Erläuterung:

  1. Wir schreiben eine SOQL.
  2. Wir erstellen eine Liste von "Kontotyp" und erstellen eine "Kontoinstanz" in der Methode Execute (). Danach weisen wir den „Kontonamen“ dem „LinuxHint -Datensatz“ zu und fügen die Instanz der Apex -Listeerfassung hinzu. Schließlich verwenden wir das DML "Einfügen", um diesen Datensatz in das Konto einzulegen.

Überprüfen:

Gehen Sie zu "Konto" und suchen Sie nach dem Datensatz. Sie können es dort finden.

Klicken Sie auf "Kontoname", um den Datensatz mit Details zu öffnen.

Abschluss

Wir haben jetzt gelernt, wie man die Massen -DML -Operationen wie Einfügen, Aktualisieren und Löschen mit Batch Apex in Salesforce durchführt. Batch Apex ist ein asynchroner Prozess, bei dem jeder Prozess auf einem anderen Faden ausgeführt wird. Es verarbeitet die Data -Stapel nach Stapel und hat bei diesem Betrieb 3 Schritte. Standardmäßig beträgt die Chargengröße 200, aber wir können sie auf 2000 erweitern, in denen die Mindestgröße 1 beträgt. Wir haben die Standardobjekte „Kampagne“ und „Konto“ verwendet, um die DML -Operationen durchzuführen.