Apex - 觸發器



Apex觸發器類似於儲存過程,在特定事件發生時執行。觸發器在記錄上發生事件之前和之後執行。

語法

trigger triggerName on ObjectName (trigger_events) { Trigger_code_block }

執行觸發器

以下是我們可以觸發觸發器的事件:

  • 插入
  • 更新
  • 刪除
  • 合併
  • Upsert
  • 取消刪除

觸發器示例1

假設我們收到一個業務需求,需要在客戶的“客戶狀態”欄位從“非活動”更改為“活動”時建立一個發票記錄。為此,我們將按照以下步驟在APEX_Customer__c物件上建立一個觸發器:

步驟1 - 轉到sObject

步驟2 - 點選客戶

步驟3 - 點選觸發器相關列表中的“新建”按鈕,並新增如下所示的觸發器程式碼。

// 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;
}

說明

Trigger.new - 這是一個上下文變數,它儲存當前在觸發器上下文中的記錄,無論是插入還是更新。在本例中,此變數包含已更新的客戶物件的記錄。

上下文中還有其他可用的上下文變數 – trigger.old、trigger.newMap、trigger.OldMap。

觸發器示例2

當對客戶記錄進行更新操作時,上述觸發器將執行。假設,只有當客戶狀態從“非活動”更改為“活動”時才需要插入發票記錄,而不是每次都插入;為此,我們可以使用另一個上下文變數trigger.oldMap,它將儲存鍵作為記錄 ID,並將值作為舊記錄值。

// 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;
}

說明

我們使用了Trigger.oldMap變數,如前所述,這是一個上下文變數,它儲存正在更新的記錄的ID和舊值。

廣告