APEX-Tutorial: Apex-Programmierkurs und Codierungsbeispiele

Was ist Apex in Salesforce?

Apex ist eine objektorientierte und stark typisierte Programmiersprache, die von Salesforce für die Entwicklung von Software as a Service (SaaS) und Customer Relationship Management (CRM) entwickelt wurde. Apex unterstützt Entwickler bei der Erstellung von SaaS-Anwendungen für Drittanbieter und beim Hinzufügen von Geschäftslogik zu Systemereignissen, indem es Back-End-Datenbankunterstützung und Client-Server-Schnittstellen bereitstellt.

Apex hilft Entwicklern, Geschäftslogik zu Systemereignissen wie Schaltflächenklicks, zugehörigen Datensatzaktualisierungen und Visualforce-Seiten hinzuzufügen. Apex hat eine ähnliche Syntax wie Java. Registrieren Sie sich für Salesforce um zu erfahren, wie das CRM funktioniert

Funktionen der Apex-Programmiersprache

Hier sind die wichtigen Funktionen von Salesforce Apex:

  • Apex ist eine Sprache, bei der die Groß- und Kleinschreibung nicht beachtet wird.
  • Sie können mit Apex DML-Operationen wie INSERT, UPDATE, UPSERT und DELETE an sObject-Datensätzen durchführen.
  • Sie können sObject-Datensätze mit SOQL (Salesforce Object Query Language) und SOSL (Salesforce Object Search Language) in Apex abfragen.
  • Ermöglicht das Erstellen eines Gerätetest und führen Sie sie aus, um das zu überprüfen Codeabdeckung und Effizienz des Codes in Apex.
  • Apex wird in einer Umgebung mit mehreren Mandanten ausgeführt Salesforce hat einige Governor-Grenzwerte definiert, die einen Benutzer daran hindern, die gemeinsam genutzten Ressourcen zu kontrollieren. Jeder Code, der den Salesforce Governor-Grenzwert überschreitet, schlägt fehl und es wird ein Fehler angezeigt.
  • Salesforce-Objekte können als Datentyp in Apex verwendet werden. Zum Beispiel -
    Account acc = new Account();

    Hier ist „Konto“ ein Standard-Salesforce-Objekt.

  • Apex wird mit jeder Salesforce-Version automatisch aktualisiert.

Wann sollten sich Entwickler für Apex entscheiden?

Apex-Code sollte nur geschrieben werden, wenn ein Geschäftsszenario zu komplex ist und nicht mit der vorgefertigten Funktionalität von Salesforce implementiert werden kann.

Im Folgenden sind einige Szenarien aufgeführt, in denen wir Apex-Code schreiben müssen:

  • So erstellen Sie Webdienste, die Salesforce mit anderen Anwendungen integrieren.
  • Um eine benutzerdefinierte Validierung für Objekte zu implementieren.
  • Zum Ausführen einer benutzerdefinierten Apex-Logik, wenn ein DML-Vorgang durchgeführt wird.
  • Um Funktionen zu implementieren, die mit vorhandenen Workflows, Abläufen und Prozess-Builder-Funktionen nicht implementiert werden können.
  • Zum Einrichten E-Mail-Dienstemüssen Sie die Verarbeitung der Inhalte, Kopfzeilen und Anhänge von E-Mails mithilfe von Apex-Code einbeziehen.

Arbeitsstruktur von Apex

In diesem Apex-Tutorial lernen wir nun die Arbeitsstruktur von Apex kennen:

Nachfolgend ist der Aktionsablauf für einen Apex-Code aufgeführt:

  • Entwickleraktion: Der gesamte von einem Entwickler geschriebene Apex-Code wird in eine Reihe von Anweisungen kompiliert, die vom Apex-Laufzeitinterpreter verstanden werden können, wenn der Entwickler den Code auf der Plattform speichert, und diese Anweisungen werden dann als Metadaten auf der Plattform gespeichert.
  • Endbenutzeraktion: Wenn das Benutzerereignis einen Apex-Code ausführt, ruft der Plattformserver die kompilierten Anweisungen aus den Metadaten ab und führt sie durch den Apex-Interpreter aus, bevor er das Ergebnis zurückgibt.
Arbeitsstruktur von Apex
Arbeitsstruktur von Apex

Apex-Syntax

Variable Aussage

Da Apex eine stark typisierte Sprache ist, muss in Apex eine Variable mit Datentyp deklariert werden.

Beispielsweise:

contact con = new contact(); 

hier wird die Variable con mit contact als Datentyp deklariert.

SOQL-Abfrage

SOQL steht für Salesforce Object Query Language. SOQL wird zum Abrufen von sObject-Datensätzen aus der Salesforce-Datenbank verwendet. Zum Beispiel-

Account acc = [select id, name from Account Limit 1]; 

Die obige Abfrage ruft den Kontodatensatz aus der Salesforce-Datenbank ab.

Loop-Anweisung

Eine Schleifenanweisung wird verwendet, um die Datensätze in einer Liste zu durchlaufen. Die Anzahl der Iterationen entspricht der Anzahl der Datensätze in der Liste. Zum Beispiel:

list<Account>listOfAccounts = [select id, name from account limit 100];
// iteration over the list of accounts
for(Account acc : listOfAccounts){
	//your logic
}

Im obigen Codeausschnitt ist listOfAccounts eine Variable vom Datentyp list.

Flusskontrollerklärung

Die Flusskontrollanweisung ist nützlich, wenn Sie einige Zeilen des Codes basierend auf bestimmten Bedingungen ausführen möchten.

Beispielsweise:

list<Account>listOfAccounts = [select id, name from account limit 100];
// execute the logic if the size of the account list is greater than zero
if(listOfAccounts.size() >0){
	//your logic
}

Der obige Codeausschnitt fragt Kontodatensätze aus der Datenbank ab und überprüft die Listengröße.

DML-Anweisung

DML steht für Data Manipulation Language. DML-Anweisungen werden zum Bearbeiten von Daten in der Salesforce-Datenbank verwendet. Zum Beispiel -

Account acc = new Account(Name = ‘ Test Account’);
Insert acc; //DML statement to create account record.

Apex-Entwicklungsumgebung

In diesem Tutorial zur Apex-Programmierung lernen wir nun die Apex-Entwicklungsumgebung kennen:

Apex-Code kann entweder in der Sandbox- oder in der Entwickleredition von Salesforce entwickelt werden.

Es empfiehlt sich, den Code in der Sandbox-Umgebung zu entwickeln und ihn dann in der Produktionsumgebung bereitzustellen.

Apex-Entwicklungsumgebung

Tools zur Apex-Code-Entwicklung: Im Folgenden sind die drei Tools aufgeführt, die zum Entwickeln von Apex-Code in allen Editionen von Salesforce verfügbar sind.

  • Force.com-Entwicklerkonsole
  • Force.com-IDE
  • Code-Editor in der Salesforce-BenutzeroberflächeSie

Datentyp in Apex

Folgende Datentypen werden von Apex unterstützt:

Primitive

Ganze Zahl, Double, Long, Date, Date Time, String, ID und Boolean werden als primitive Datentypen betrachtet. Alle primitiven Datentypen werden als Wert und nicht als Referenz übergeben.

Kollektionen

In Apex stehen drei Arten der Sammlung zur Verfügung

  • Liste: Es handelt sich um eine geordnete Sammlung von Primitiven, sObjects, Sammlungen oder Apex-Objekten basierend auf Indizes.
  • Set: Eine ungeordnete Sammlung einzigartiger Grundelemente.
  • Karte: Es handelt sich um eine Sammlung eindeutiger, primitiver Schlüssel, die einzelnen Werten zugeordnet werden können, bei denen es sich um Primitive, sObjects, Sammlungen oder Apex-Objekte handeln kann.

sObjekt

Dies ist ein spezieller Datentyp in Salesforce. Es ähnelt einer Tabelle in SQL und enthält Felder, die Spalten in SQL ähneln.

Enums

Enum ist ein abstrakter Datentyp, der einen Wert einer endlichen Menge angegebener Bezeichner speichert

Klassen

Objekte

Es bezieht sich auf jeden Datentyp, der in Apex unterstützt wird.

Schnittstellen

Apex-Zugriffsspezifizierer

Im Folgenden sind die von Apex unterstützten Zugriffsspezifizierer aufgeführt:

Öffentliche

Dieser Zugriffsspezifizierer ermöglicht den Zugriff auf eine Klasse, Methode oder Variable, die von einem Apex innerhalb eines Namespace verwendet werden soll.

Privat

Dieser Zugriffsspezifizierer ermöglicht den Zugriff auf eine Klasse, Methode oder Variable, die lokal oder innerhalb des Codeabschnitts verwendet werden soll, in dem sie definiert ist. Bei allen Techniken haben Variablen, für die kein Zugriffsspezifizierer definiert ist, den Standardzugriffsspezifizierer „private“.

Geschützt

Dieser Zugriffsspezifizierer ermöglicht den Zugriff auf eine Methode oder Variable, die von allen inneren Klassen innerhalb der definierenden Apex-Klasse verwendet werden soll.

Global

Dieser Zugriffsspezifizierer ermöglicht den Zugriff auf eine Klasse, Methode oder Variable, die von einem Apex innerhalb eines Namespace sowie außerhalb des Namespace verwendet werden soll. Es ist eine bewährte Vorgehensweise, globale Schlüsselwörter erst zu verwenden, wenn dies erforderlich ist.

Schlüsselwörter in Apex

Mit Teilen

Wenn eine Klasse mit diesem Schlüsselwort definiert wird, gelten alle Freigaberegeln für den aktuellen Benutzer und werden erzwungen. Fehlt dieses Schlüsselwort, wird der Code im Systemkontext ausgeführt.

Zum Beispiel:

public with sharing class MyApexClass{
// sharing rules enforced when code in this class execute
}

Ohne zu teilen

Wenn eine Klasse mit diesem Schlüsselwort definiert wird, gelten alle Freigaberegeln für den aktuellen Benutzer und werden nicht erzwungen.

Zum Beispiel:

public without sharing class MyApexClass{
// sharing rules is not enforced when code in this class execute
}

Statisch

Eine Variable, Methode, wird mit dem Schlüsselwort static definiert, einmal initialisiert und der Klasse zugeordnet. Statische Variablen und Methoden können direkt über den Klassennamen aufgerufen werden, ohne dass eine Instanz einer Klasse erstellt werden muss.

Ende

Eine Konstante, Methode, wird mit dem Schlüsselwort final definiert und kann nicht überschrieben werden. Zum Beispiel:

public class myCls {
static final Integer INT_CONST = 10;
}

Wenn Sie versuchen, den Wert für diese INT_CONST-Variable zu überschreiben, erhalten Sie eine Ausnahme – System.FinalException: Die letzte Variable wurde bereits initialisiert.

Return

Dieses Schlüsselwort gibt einen Wert von einer Methode zurück. Zum Beispiel:

public String getName() {
return  'Test' ;
}

Null

Es definiert eine Nullkonstante und kann einer Variablen zugewiesen werden. Zum Beispiel

 Boolean b = null;

Assistent

Wenn eine Klasse mit einem virtuellen Schlüsselwort definiert ist, kann sie erweitert und überschrieben werden.

Abstrakt

Wenn eine Klasse mit dem Schlüsselwort „abstract“ definiert ist, muss sie mindestens eine Methode mit dem Schlüsselwort „abstract“ enthalten, und diese Methode sollte nur eine Signatur haben.

Zum Beispiel

public abstract class MyAbstrtactClass {
abstract Integer myAbstractMethod1();
}

Apex-Saite

Eine Zeichenfolge ist eine Reihe von Zeichen ohne Zeichenbeschränkung. Zum Beispiel:

String name = 'Test';

Es gibt mehrere integrierte Methoden, die von der String-Klasse in Salesforce bereitgestellt werden. Im Folgenden sind einige häufig und meist verwendete Funktionen aufgeführt:

abkürzen(maxWidth)

Diese Methode kürzt einen String auf die angegebene Länge und gibt ihn zurück, wenn die Länge des angegebenen Strings größer als die angegebene Länge ist; andernfalls gibt sie den ursprünglichen String zurück. Wenn der Wert für die Variable maxWidth kleiner als 4 ist, gibt diese Methode eine Laufzeitausnahme zurück – System.StringException: Die Mindestabkürzungsbreite beträgt 4

Beispielsweise:

String s = 'Hello World';
String s2 = s.abbreviate(8);
System.debug('s2'+s2); //Hello...

profitieren()

Diese Methode wandelt den ersten Buchstaben einer Zeichenfolge in die Groß-/Kleinschreibung des Titels um und gibt ihn zurück.

Beispielsweise:

String s = 'hello;
String s2 = s.capitalize();
System.assertEquals('Hello', s2);

enthält(Teilzeichenfolge)

Diese Methode gibt „true“ zurück, wenn der String, der die Methode aufruft, den angegebenen Teilstring enthält.

String name1 = 'test1';
String name2 = 'test2';
Boolean flag = name.contains(name2);
System.debug('flag::',+flag); //true

equal(stringOrId)

Diese Methode gibt „true“ zurück, wenn der übergebene Parameter nicht null ist und dieselbe binäre Zeichenfolge angibt wie die Zeichenfolge, die die Methode aufruft.

Beim Vergleich von ID-Werten ist die Länge der IDs möglicherweise nicht gleich. Beispiel: Wenn eine Zeichenfolge, die eine 15-stellige ID darstellt, mit einem Objekt verglichen wird, das eine 18-stellige ID darstellt, gibt diese Methode „true“ zurück. Zum Beispiel:

Id idValue15 = '001D000000Ju1zH';
Id idValue18 = '001D000000Ju1zHIAR';
Boolean result4 = stringValue15.equals(IdValue18);
System.debug('result4', +result4); //true

Im obigen Beispiel vergleicht die Methode „equals“ eine 15-stellige Objekt-ID mit einer 18-stelligen Objekt-ID. Wenn beide IDs dieselbe Binärsequenz darstellen, wird „true“ zurückgegeben.

Verwenden Sie diese Methode, um Vergleiche unter Berücksichtigung der Groß- und Kleinschreibung durchzuführen.

escapeSingleQuotes(stringToEscape)

Diese Methode fügt vor jedem einzelnen Anführungszeichen in einer Zeichenfolge ein Escape-Zeichen (\) hinzu und gibt es zurück. Diese Methode verhindert die SOQL-Injection beim Erstellen einer dynamischen SOQL-Abfrage. Diese Methode stellt sicher, dass alle einfachen Anführungszeichen als einschließende Zeichenfolgen und nicht als Datenbankbefehle betrachtet werden.

Beispielsweise:

String s = 'Hello Tom';
system.debug(s); // Outputs 'Hello Tom'
String escapedStr = String.escapeSingleQuotes(s);
// Outputs \'Hello Tom\'

entfernen(Teilzeichenfolge)

Diese Methode entfernt alle Vorkommen des genannten Teilstrings aus dem String, der die Methode aufruft, und gibt den resultierenden String zurück.

Zum Beispiel

String s1 = 'Salesforce and force.com';
String s2 = s1.remove('force');
System.debug( 's2'+ s2);// 'Sales and .com'

Teilzeichenfolge (StartIndex)

Diese Methode gibt eine Teilzeichenfolge zurück, die mit dem Zeichen bei startIndex beginnt und sich bis zum letzten Teil der Zeichenfolge erstreckt.

Zum Beispiel:

String s1 = 'hamburger';
String s2 = s1.substring(3);
System.debug('s2'+s2); //burger

umkehren()

Diese Methode kehrt alle Zeichen einer Zeichenfolge um und gibt sie zurück. Zum Beispiel:

String s = 'Hello';
String s2 = s.reverse();
System.debug('s2::::'+s2);// olleH  // Hello

trim(): Diese Methode entfernt alle führenden Leerzeichen aus einer Zeichenfolge und gibt sie zurück.

valueOf(toConvert)

Diese Methode gibt die Zeichenfolgendarstellung des übergebenen Objekts zurück.

Apex-Gouverneur-Grenzwerte

Apex-Governor-Limits sind die von der Apex-Runtime-Engine erzwungenen Limits, um sicherzustellen, dass Runway-Apex-Code und -Prozesse die gemeinsam genutzten Ressourcen nicht steuern und die Verarbeitung für andere Benutzer in der Multitenant-Umgebung nicht beeinträchtigen. Diese Limits werden für jede Apex-Transaktion überprüft. Im Folgenden sind die von Salesforce für jede Apex-Transaktion definierten Governor-Limits aufgeführt:

Beschreibung Begrenzen
SOQL-Abfragen, die in einer synchronen Transaktion ausgeführt werden können 100
SOQL-Abfragen, die in einer asynchronen Transaktion durchgeführt werden können 200
Datensätze, die durch eine SOQL-Abfrage abgerufen werden können 50000
Datensätze, die von Database.getQueryLocator abgerufen werden können 10000
SOSL-Abfragen, die in einer Apex-Transaktion durchgeführt werden können 20
Datensätze, die durch eine SOSL-Abfrage abgerufen werden können 2000
DML-Anweisungen, die in einer Apex-Transaktion ausgeführt werden können 150
Datensätze, die als Ergebnis einer DML-Anweisung, Approval.process oder Database.emptyRecycleBin verarbeitet werden können 10000
Callouts, die in einer Apex-Transaktion durchgeführt werden können. 100
Kumulatives Timeout-Limit für alle Callouts, die in einer Apex-Transaktion ausgeführt werden 120 Sekunden
Beschränkung der Apex-Jobs, die mit System.enqueueJob zur Warteschlange hinzugefügt werden können 50
Ausführungszeitlimit für jede Apex-Transaktion 10 Мinuten
Beschränken Sie die Zeichen, die in einer Apex-Klasse und einem Auslöser verwendet werden können 1 Millionen
CPU-Zeitlimit für synchrone Transaktionen 10,000 Millisekunden
CPU-Zeitlimit für asynchrone Transaktionen 60,000 Millisekunden

Apex-Getter und -Setter

Die Apex-Eigenschaft ähnelt der Apex-Variable. Für eine Apex-Eigenschaft sind Getter und Setter erforderlich. Getter und Setter können verwendet werden, um Code auszuführen, bevor auf den Eigenschaftswert zugegriffen oder dieser geändert wird. Der Code im Get-Accessor wird ausgeführt, wenn ein Eigenschaftswert gelesen wird. Der Code im Set-Accessor wird ausgeführt, wenn ein Eigenschaftswert geändert wird. Jede Eigenschaft mit einem Get-Accessor gilt als schreibgeschützt, jede Eigenschaft mit einem Set-Accessor gilt als schreibgeschützt. Jede Eigenschaft mit einem Get- und einem Set-Accessor gilt als schreibgeschützt. Syntax einer Apex-Eigenschaft:

public class myApexClass {
// Property declaration
	access_modifierreturn_typeproperty_name {
	get {
			//code  
		}
		set{
			//code
		}
	}

Hier ist access_modifier der Zugriffsmodifikator der Eigenschaft. return_type ist der Datentyp der Eigenschaft. property_name ist der Name der Eigenschaft.

Unten finden Sie ein Beispiel für eine Apex-Eigenschaft mit Get- und Set-Accessor.

public class myApex{
	public String name{
		get{ return name;}
		set{ name = 'Test';}
	}
}

Hier lautet der Eigenschaftsname name, es handelt sich um eine öffentliche Eigenschaft und es wird ein String dataType zurückgegeben.

Es ist nicht zwingend erforderlich, Code im Get- und Set-Block zu haben. Dieser Block kann leer gelassen werden, um eine automatische Eigenschaft zu definieren. Zum Beispiel:

public double MyReadWriteProp{ get; set; } 

Get- und Set-Accessoren können auch mit ihrem Zugriffsmodifikator definiert werden. Wenn ein Accessor mit einem Modifikator definiert ist, überschreibt er den Zugriffsmodifikator für die Eigenschaft. Zum Beispiel:

public String name{private get; set;}// name is private for read and public to write.

Apex-Klasse

Eine Apex-Klasse ist ein Entwurf oder eine Vorlage, aus der Objekte erstellt werden. Ein Objekt ist die Instanz einer Klasse.

Es gibt drei Möglichkeiten, Apex-Klassen in Salesforce zu erstellen:

Entwicklerkonsole

Force.com-IDE

Detailseite der Apex-Klasse.

In Apex können Sie eine äußere Klasse definieren, die auch als Top-Level-Klasse bezeichnet wird, und Sie können auch Klassen innerhalb einer äußeren Klasse definieren, die als innere Klassen bezeichnet werden.

Es ist zwingend erforderlich, in der Deklaration der äußeren Klasse Zugriffsmodifizierer wie global oder public zu verwenden.

Es ist nicht erforderlich, bei der Deklaration innerer Klassen einen Zugriffsmodifikator zu verwenden.

Eine Apex-Klasse wird mit dem Schlüsselwort „class“ gefolgt vom Klassennamen definiert.

Das Schlüsselwort „Extends“ wird verwendet, um eine vorhandene Klasse um eine Apex-Klasse zu erweitern, und das Schlüsselwort „implements“ wird verwendet, um eine Schnittstelle durch eine Apex-Klasse zu implementieren.

Salesforce Apex unterstützt keine Mehrfachvererbungen. Eine Apex-Klasse kann nur eine vorhandene Apex-Klasse erweitern, aber mehrere Schnittstellen implementieren.

Eine Apex-Klasse kann einen benutzerdefinierten Konstruktor enthalten. Wenn kein benutzerdefinierter Konstruktor verfügbar ist, wird ein Standardkonstruktor verwendet. Der Code in einem Konstruktor wird ausgeführt, wenn eine Instanz einer Klasse erstellt wird.

Syntax des Beispiels der Apex-Klasse:

public class myApexClass{
// variable declaration
//constructor
	public myApexClass{
	}
//methods declaration
}

Das Schlüsselwort new wird verwendet, um eine Instanz einer Apex-Klasse zu erstellen. Nachfolgend finden Sie die Syntax zum Erstellen einer Instanz einer Apex-Klasse.

myApexClass obj = new myApexClass();

Apex-Trigger

Mit Apex-Triggern können Sie vor und nach der Durchführung einer DML-Operation benutzerdefinierte Apex-Trigger ausführen.

Apex unterstützt die folgenden zwei Arten von Auslösern:

Vor Triggern: Diese Trigger werden verwendet, um den Feldwert zu validieren und zu aktualisieren, bevor der Datensatz in der Datenbank gespeichert wird.

Nach Triggern: Diese Trigger werden verwendet, um auf die Felder (Datensatz-ID, LastModifiedDate-Feld) zuzugreifen, die vom System festgelegt werden, nachdem ein Datensatz in die Datenbank übertragen wurde. Der Wert dieser Felder kann zum Ändern anderer Datensätze verwendet werden. Datensätze, die nach Auslösern ausgelöst werden, sind schreibgeschützt.

Es ist eine bewährte Methode, umfangreiche Trigger zu schreiben. Ein umfangreicher Trigger kann sowohl einen einzelnen Datensatz als auch mehrere Datensätze gleichzeitig verarbeiten.

Syntax eines Apex-Triggers:

trigger TriggerName on ObjectName (trigger_events) {
	//Code_block
 }

Hier ist TriggerName der Name des Triggers, ObjectName der Name des Objekts, auf das der Trigger geschrieben werden soll, und trigger_events ist die durch Kommas getrennte Liste von Ereignissen.

Folgende Ereignisse werden von den Apex-Triggern unterstützt: vor dem Einfügen, vor der Aktualisierung, vor dem Löschen, nach dem Einfügen, nach einer Aktualisierung, nach dem Löschen, nach der Wiederherstellung.

Statische Schlüsselwörter können in einem Apex-Trigger nicht verwendet werden. Alle auf innere Klassen anwendbaren Schlüsselwörter können in einem Apex-Trigger verwendet werden.

Es gibt implizite Variablen, die von jedem Trigger definiert werden, der den Laufzeitkontext zurückgibt. Diese Variablen werden im System definiert. Trigger-Klasse. Diese Variablen werden Kontextvariablen genannt. Der folgende Screenshot zeigt die vom Apex-Trigger unterstützte Kontextvariable.

Apex-Trigger

Apex-Trigger

Im Folgenden finden Sie die Berücksichtigung der Kontextvariable im Apex-Trigger:

  • Verwenden Sie trigger.new und trigger.old nicht in DML-Operationen.
  • Trigger.new kann nicht gelöscht werden.
  • Trigger.new ist schreibgeschützt.
  • Trigger.new kann nur zum Ändern der Werte der Felder desselben Objekts vor dem Trigger verwendet werden.

In den folgenden Screenshots sind die Überlegungen zu bestimmten Aktionen bei verschiedenen Auslöseereignissen aufgeführt.

Apex-Trigger

Apex-Trigger

Batch-Klasse in Apex

Die Batch-Klasse in Salesforce wird verwendet, um eine große Anzahl von Datensätzen zu verarbeiten, die bei normaler Verarbeitung die Apex-Governor-Grenzen überschreiten würden. Die Batch-Klasse führt den Code asynchron aus.

Im Folgenden sind die Vorteile der Batch-Klasse aufgeführt:

  • Die Batch-Klasse verarbeitet die Daten in Blöcken. Wenn ein Block nicht erfolgreich verarbeitet werden kann, werden alle erfolgreich verarbeiteten Blöcke nicht zurückgesetzt.
  • Jeder Datenblock in einer Batch-Klasse wird mit einem neuen Satz von Governor-Limits verarbeitet, die sicherstellen, dass der Code innerhalb der Governor-Ausführungslimits ausgeführt wird.
  • Datenbank. Die stapelbare Schnittstelle muss von einer Apex-Klasse implementiert werden, um als Stapelklasse verwendet zu werden. Es stellt drei Methoden bereit, die von der Batch-Klasse implementiert werden müssen.

Im Folgenden sind die drei von der Datenbank bereitgestellten Methoden aufgeführt. Batchfähige Schnittstelle:

1.start()

Diese Methode generiert den Umfang der Datensätze oder Objekte, die von der Schnittstellenmethode „execute“ verarbeitet werden sollen. Während der Batch-Ausführung wird sie nur einmal aufgerufen. Diese Methode gibt entweder ein Database.QueryLocator-Objekt oder ein Iterable zurück. Die Anzahl der Datensätze, die durch eine SQL-Abfrage mit dem Database.QueryLocator-Objekt abgerufen werden, beträgt 50 Millionen Datensätze, aber bei Verwendung eines Iterable beträgt die Gesamtzahl der Datensätze, die durch die SQL-Abfrage abgerufen werden können, nur 50000. Iterable wird verwendet, um einen komplexen Umfang für die Batch-Klasse zu generieren.

Syntax der Startmethode:

global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {}

2.execute()

Diese Methode wird für die Verarbeitung jedes Datenblocks verwendet. Für jeden Datensatzblock wird die Ausführungsmethode aufgerufen. Die Standardstapelgröße für die Ausführung beträgt 200 Datensätze. Die Execute-Methode benötigt zwei Argumente:

Ein Verweis auf das Database.BatchableContext-Objekt,

Eine Liste von sObjects, z. B. List oder eine Liste parametrisierter Typen. Syntax der Ausführungsmethode:

global void execute(Database.BatchableContext BC, list<P>){}

3.finish()

Die Finish-Methode wird einmal während der Ausführung der Batch-Klasse aufgerufen. In der Finish-Methode können Nachbearbeitungsvorgänge ausgeführt werden. Beispiel: Senden der Bestätigungs-E-Mail. Diese Methode wird aufgerufen, wenn alle Batches verarbeitet wurden. Syntax der Finish-Methode:

global void finish(Database.BatchableContext BC){}

Database.BatchableContext-Objekt

Jede Methode der Datenbank. Die Batchable-Schnittstelle verfügt über einen Verweis auf das Database.BatchableContext-Objekt.

Dieses Objekt wird verwendet, um den Fortschritt des Batch-Jobs zu verfolgen.

Im Folgenden sind die von BatchableContext bereitgestellten Instanzmethoden aufgeführt:

  • getChildJobId(): Diese Methode gibt die ID eines Batch-Jobs zurück, der aktuell verarbeitet wird.
  • getJobId(): Diese Methode gibt die ID des Batch-Jobs zurück.

Nachfolgend finden Sie die Syntax einer Batch-Klasse:

global class MyBatchClass implements Database.Batchable<sObject> {
	global (Database.QueryLocator | Iterable<sObject>) start(Database.BatchableContextbc) {
// collect the batches of records or objects to be passed to execute
}
global void execute(Database.BatchableContextbc, List<P> records){
// process each batch of records
}
global void finish(Database.BatchableContextbc){
// execute any post-processing operations
}
}

Database.executeBatch-Methode

Die Methode Database.executeBatch wird zum Ausführen einer Batch-Klasse verwendet.

Diese Methode benötigt zwei Parameter: Instanz der zu verarbeitenden Batch-Klasse, Optionsparameter zur Angabe der Batch-Größe. Wenn nicht angegeben, wird die Standardgröße von 200 verwendet.

Syntax von Database.executeBatch:

Database.executeBatch(myBatchObject,scope)

Ausführen einer Batch-Klasse mit dem Namen MyBatchClass:

MyBatchClassmyBatchObject = new MyBatchClass(); 
Id batchId = Database.executeBatch(myBatchObject,100);

Datenbank.stateful

Die Batch-Klasse ist standardmäßig zustandslos. Jedes Mal, wenn die Methode „execute“ aufgerufen wird, wird eine neue Kopie eines Objekts empfangen und alle Variablen der Klasse initialisiert.

Database.stateful wird implementiert, um eine Batch-Klasse zustandsbehaftet zu machen.

Wenn Ihre Batch-Klasse das implementiert hat Database Bei einer zustandsbehafteten Schnittstelle behalten alle Instanzvariablen ihre Werte bei, aber die statischen Variablen werden zwischen den Transaktionen zurückgesetzt.

Zusammenfassung

  • Apex ist ein stark typisiertes, objektorientiertes Programmiersprache das auf der Force.com-Plattform kompiliert und ausgeführt wird
  • Bei der Apex-Programmiersprache wird die Groß-/Kleinschreibung nicht beachtet
  • Zwei Arten von Aktionsabläufen in Apex sind 1) Entwickleraktion 2) Endbenutzeraktion
  • Apex unterstützt Sie bei der Erstellung von Webdiensten, die Salesforce mit anderen Anwendungen integrieren.
  • Von Apex unterstützte Datentypen sind: 1).Primitive 2) Sammlungen 3) sObject, Enums, 4) Klassen, 5) Objekte und Schnittstellen
  • Öffentlich, privat, geschützt und global werden von Apex unterstützt
  • Schlüsselwörter, die in Apex verwendet werden, sind: 1) Mit Teilen, 2) Ohne Teilen, 3) Statisch, 4) Endgültig, 5) Zurück, 6) Null, 7) Virtuell, 8) Abstrakt
  • Eine Zeichenfolge ist eine Reihe von Zeichen ohne Zeichenbeschränkung
  • Apex-Governor-Grenzwerte sind die Grenzwerte, die von der Apex-Laufzeit-Engine erzwungen werden, um sicherzustellen, dass alle Runway-Apex-Codes und -Prozesse ausgeführt werden
  • Getter und Setter können verwendet werden, um Code auszuführen, bevor auf den Eigenschaftswert zugegriffen oder dieser geändert wird
  • Es gibt drei Möglichkeiten, Apex-Klassen in Salesforce zu erstellen: 1) Entwicklerkonsole, 2) Force.com-IDE und 3) Apex-Klassendetailseite.
  • Mit Apex-Triggern können Sie vor und nach der Durchführung einer DML-Operation benutzerdefinierte Apex-Trigger ausführen.
  • Die Batch-Klasse in Salesforce wird zum Verarbeiten einer großen Anzahl von Datensätzen verwendet, die bei normaler Verarbeitung die Apex-Governor-Grenzwerte überschreiten würden.