Apex - 触发器
Apex 触发器就像存储过程,在特定事件发生时执行。 触发器在记录的事件发生之前和之后执行。
语法
trigger triggerName on ObjectName (trigger_events) { Trigger_code_block }
执行触发器
以下是我们可以触发触发器的事件 −
- insert
- update
- delete
- merge
- upsert
- undelete
触发示例1
假设我们收到了一个业务要求,即当客户的"Customer Status"字段变为非活动活动时,我们需要创建账单记录。 为此,我们将按照以下步骤在apex_customer__c对象上创建一个触发器 −
步骤 1− 转到sObject
步骤2 − 单击""Customer"
步骤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); } } // 在 SFDC 中插入账单列表的 DML insert InvoiceList; }
说明
Trigger.new − 这是上下文变量,用于存储当前在触发器上下文中插入或更新的记录。 在本例中,该变量具有已更新的 Customer 对象的记录。
上下文中还有其他可用的上下文变量——trigger.old、trigger.newMap、trigger.OldMap。
触发示例 2
当对客户记录进行更新操作时,将执行上述触发器。 假设只有当客户状态从 Inactive 变为 Active 时才需要插入账单记录,而不是每次都需要插入; 为此,我们可以使用另一个上下文变量 trigger.oldMap 它将键存储为记录 id,将值存储为旧记录值。
// 修改触发代码 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) { // 检查旧值和新值的条件 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); } } // 在 SFDC 中插入账单列表的 DML insert InvoiceList; }
说明
我们使用了 Trigger.oldMap 变量,如前所述,它是一个上下文变量,用于存储正在更新的记录的 Id 和旧值。