Apex - Kích hoạt

Trình kích hoạt Apex giống như các thủ tục được lưu trữ thực thi khi một sự kiện cụ thể xảy ra. Một trình kích hoạt thực thi trước và sau khi một sự kiện xảy ra trên hồ sơ.

Cú pháp

trigger triggerName on ObjectName (trigger_events) { Trigger_code_block }

Thực thi trình kích hoạt

Sau đây là các sự kiện mà chúng ta có thể xác nhận kích hoạt -

  • insert
  • update
  • delete
  • merge
  • upsert
  • undelete

Ví dụ về kích hoạt 1

Giả sử chúng tôi nhận được yêu cầu kinh doanh rằng chúng tôi cần tạo Bản ghi hóa đơn khi trường 'Trạng thái khách hàng' của Khách hàng chuyển thành Hoạt động từ Không hoạt động. Đối với điều này, chúng tôi sẽ tạo một trình kích hoạt trên đối tượng APEX_Customer__c bằng cách làm theo các bước sau:

Step 1 - Đi tới sObject

Step 2 - Nhấp vào Khách hàng

Step 3 - Nhấp vào nút 'Mới' trong danh sách liên quan đến Trình kích hoạt và thêm mã kích hoạt như cung cấp bên dưới.

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

Giải trình

Trigger.new- Đây là biến ngữ cảnh lưu trữ các bản ghi hiện tại trong ngữ cảnh kích hoạt, đang được chèn hoặc cập nhật. Trong trường hợp này, biến này có các bản ghi của đối tượng Khách hàng đã được cập nhật.

Có các biến ngữ cảnh khác có sẵn trong ngữ cảnh - trigger.old, trigger.newMap, trigger.OldMap.

Ví dụ về trình kích hoạt 2

Trình kích hoạt trên sẽ thực thi khi có thao tác cập nhật trên hồ sơ Khách hàng. Giả sử, bản ghi hóa đơn chỉ cần được chèn khi Trạng thái khách hàng thay đổi từ Không hoạt động sang Hoạt động chứ không phải mọi lúc; đối với điều này, chúng ta có thể sử dụng một biến ngữ cảnh kháctrigger.oldMap sẽ lưu trữ khóa dưới dạng id bản ghi và giá trị dưới dạng các giá trị bản ghi cũ.

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

Giải trình

Chúng tôi đã sử dụng biến Trigger.oldMap mà như đã giải thích trước đó, là một biến ngữ cảnh lưu trữ Id và giá trị cũ của các bản ghi đang được cập nhật.