📅  最后修改于: 2020-11-05 03:17:59             🧑  作者: Mango
Apex触发器类似于在发生特定事件时执行的存储过程。在记录的事件发生之前和之后执行触发器。
trigger triggerName on ObjectName (trigger_events) { Trigger_code_block }
以下是我们可以触发触发器的事件-
假设我们收到一个业务需求,即当客户的“客户状态”字段从非活动状态更改为活动状态时,我们需要创建发票记录。为此,我们将按照以下步骤在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。
当对客户记录进行更新操作时,将执行上述触发器。假设仅当客户状态从非活动变为活动时才插入发票记录,而不是每次都插入;为此,我们可以使用另一个上下文变量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和旧值。