📜  Apex-触发器

📅  最后修改于: 2020-11-05 03:17:59             🧑  作者: Mango


Apex触发器类似于在发生特定事件时执行的存储过程。在记录的事件发生之前和之后执行触发器。

句法

trigger triggerName on ObjectName (trigger_events) { Trigger_code_block }

执行触发器

以下是我们可以触发触发器的事件-

  • 插入
  • 更新
  • 删除
  • 合并
  • 上升
  • 取消删除

触发范例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 InvoiceList = new List();
   
   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和旧值。