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.