当前位置: 首页 > 文档资料 > Apex 中文教程 >

触发器

优质
小牛编辑
133浏览
2023-12-01

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

语法 (Syntax)

trigger triggerName on ObjectName (trigger_events) { Trigger_code_block }

执行触发器

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

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

触发示例1

假设我们收到业务要求,当客户的“客户状态”字段从“非活动”更改为“活动”时,我们需要创建发票记录。 为此,我们将按照以下步骤在APEX_Customer__c对象上创建一个触发器 -

Step 1 - 转到sObject

Step 2 - 点击客户

Step 3 - 单击Trigger相关列表中的'New'按钮,并添加触发器代码,如下所示。

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

说明 (Explanation)

Trigger.new - 这是一个上下文变量,用于存储当前在触发器上下文中的记录,无论是插入还是更新。 在这种情况下,此变量具有已更新的Customer对象的记录。

上下文中还有其他上下文变量 - 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;
}

说明 (Explanation)

我们使用了Trigger.oldMap变量,如前所述,它是一个上下文变量,它存储正在更新的记录的Id和旧值。