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.

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.
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.
Privatperson
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.
Globalen
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.
Abstract
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 | Einschrรคnkung |
|---|---|
| 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.
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.
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 Datenbank 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.





