触发器
优质
小牛编辑
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和旧值。