Apex - Trigger
Apex-Trigger sind wie gespeicherte Prozeduren, die ausgeführt werden, wenn ein bestimmtes Ereignis auftritt. Ein Trigger wird ausgeführt, bevor und nachdem ein Ereignis aufgezeichnet wurde.
Syntax
trigger triggerName on ObjectName (trigger_events) { Trigger_code_block }
Auslösen des Triggers
Es folgen die Ereignisse, bei denen wir den Auslöser auslösen können -
- insert
- update
- delete
- merge
- upsert
- undelete
Trigger Beispiel 1
Angenommen, wir haben eine Geschäftsanforderung erhalten, dass wir einen Rechnungsdatensatz erstellen müssen, wenn das Feld "Kundenstatus" des Kunden von "Inaktiv" in "Aktiv" geändert wird. Dazu erstellen wir einen Trigger für das Objekt APEX_Customer__c, indem wir die folgenden Schritte ausführen:
Step 1 - Gehen Sie zu sObject
Step 2 - Klicken Sie auf Kunde
Step 3 - Klicken Sie in der Trigger-Themenliste auf die Schaltfläche 'Neu' und fügen Sie den Triggercode wie unten angegeben hinzu.
// Trigger Code
trigger Customer_After_Insert on APEX_Customer__c (after update) {
List InvoiceList = new List();
for (APEX_Customer__c objCustomer: Trigger.new) {
if (objCustomer.APEX_Customer_Status__c == 'Active') {
APEX_Invoice__c objInvoice = new APEX_Invoice__c();
objInvoice.APEX_Status__c = 'Pending';
InvoiceList.add(objInvoice);
}
}
// DML to insert the Invoice List in SFDC
insert InvoiceList;
}
Erläuterung
Trigger.new- Dies ist die Kontextvariable, in der die aktuell im Triggerkontext befindlichen Datensätze gespeichert werden, die entweder eingefügt oder aktualisiert werden. In diesem Fall enthält diese Variable die Datensätze des Kundenobjekts, die aktualisiert wurden.
Es gibt andere Kontextvariablen, die im Kontext verfügbar sind - trigger.old, trigger.newMap, trigger.OldMap.
Trigger Beispiel 2
Der obige Trigger wird ausgeführt, wenn die Kundendatensätze aktualisiert werden. Angenommen, der Rechnungsdatensatz muss nur eingefügt werden, wenn sich der Kundenstatus von Inaktiv in Aktiv ändert, und nicht jedes Mal. Hierfür können wir eine andere Kontextvariable verwendentrigger.oldMap Dadurch wird der Schlüssel als Datensatz-ID und der Wert als alte Datensatzwerte gespeichert.
// Modified Trigger Code
trigger Customer_After_Insert on APEX_Customer__c (after update) {
List<apex_invoice__c> InvoiceList = new List<apex_invoice__c>();
for (APEX_Customer__c objCustomer: Trigger.new) {
// condition to check the old value and new value
if (objCustomer.APEX_Customer_Status__c == 'Active' &&
trigger.oldMap.get(objCustomer.id).APEX_Customer_Status__c == 'Inactive') {
APEX_Invoice__c objInvoice = new APEX_Invoice__c();
objInvoice.APEX_Status__c = 'Pending';
InvoiceList.add(objInvoice);
}
}
// DML to insert the Invoice List in SFDC
insert InvoiceList;
}
Erläuterung
Wir haben die Variable Trigger.oldMap verwendet, bei der es sich, wie bereits erläutert, um eine Kontextvariable handelt, in der die ID und der alte Wert der Datensätze gespeichert werden, die aktualisiert werden.