Puncak - Pemicu
Pemicu puncak seperti prosedur tersimpan yang dijalankan saat peristiwa tertentu terjadi. Pemicu dijalankan sebelum dan setelah peristiwa terjadi pada catatan.
Sintaksis
trigger triggerName on ObjectName (trigger_events) { Trigger_code_block }
Menjalankan Pemicu
Berikut adalah peristiwa di mana kita dapat mengaktifkan pemicunya -
- insert
- update
- delete
- merge
- upsert
- undelete
Contoh Pemicu 1
Misalkan kita menerima persyaratan bisnis bahwa kita perlu membuat Catatan Faktur ketika bidang 'Status Pelanggan' Pelanggan berubah menjadi Aktif dari Tidak Aktif. Untuk ini, kami akan membuat pemicu pada objek APEX_Customer__c dengan mengikuti langkah-langkah ini -
Step 1 - Pergi ke sObject
Step 2 - Klik Pelanggan
Step 3 - Klik tombol 'Baru' di daftar terkait Pemicu dan tambahkan kode pemicu seperti yang diberikan di bawah ini.
// 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;
}
Penjelasan
Trigger.new- Ini adalah variabel konteks yang menyimpan catatan saat ini dalam konteks pemicu, baik yang sedang disisipkan atau diperbarui. Dalam kasus ini, variabel ini memiliki catatan objek Pelanggan yang telah diperbarui.
Ada variabel konteks lain yang tersedia dalam konteks - trigger.old, trigger.newMap, trigger.OldMap.
Contoh Pemicu 2
Pemicu di atas akan dijalankan ketika ada operasi pembaruan pada catatan Pelanggan. Misalkan, catatan faktur perlu disisipkan hanya ketika Status Pelanggan berubah dari Tidak Aktif menjadi Aktif dan tidak setiap saat; untuk ini, kita dapat menggunakan variabel konteks laintrigger.oldMap yang akan menyimpan kunci sebagai id record dan nilainya sebagai nilai record lama.
// 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;
}
Penjelasan
Kami telah menggunakan variabel Trigger.oldMap yang seperti dijelaskan sebelumnya, adalah variabel konteks yang menyimpan Id dan nilai lama dari catatan yang sedang diperbarui.