Apex - 觸發(fā)器

2019-10-26 16:26 更新

Apex觸發(fā)器類似于當(dāng)特定事件發(fā)生時執(zhí)行的存儲過程。 它在記錄事件發(fā)生之前和之后執(zhí)行。

語法

trigger triggerName on ObjectName (trigger_events) { Trigger_code_block }

執(zhí)行觸發(fā)器

以下是我們可以觸發(fā)觸發(fā)器的事件:

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


觸發(fā)器示例1

假設(shè)我們收到業(yè)務(wù)要求,當(dāng)客戶的“客戶狀態(tài)”字段從非活動狀態(tài)更改為活動狀態(tài)時,我們需要創(chuàng)建發(fā)票記錄。 為此,我們將通過以下步驟在APEX_Customer__c對象上創(chuàng)建觸發(fā)器:


第1步:進入sObject


第2步:點擊客戶


第3步:點擊觸發(fā)器相關(guān)列表中的“新建”按鈕,添加如下所示的觸發(fā)代碼。

//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:這這是上下文變量,用于存儲當(dāng)前正在插入或更新的觸發(fā)器上下文中的記錄。 在這種情況下,此變量具有已更新的Customer對象的記錄。


還有上下文中可用的其他上下文變量:trigger.old,trigger.newMap,trigger.OldMap。

觸發(fā)器示例2

當(dāng)對客戶記錄進行更新操作時,將執(zhí)行上述觸發(fā)器。 但是,假設(shè)我們希望僅在客戶狀態(tài)從非活動更改為活動而不是每次都更改時插入發(fā)票記錄。

為此,我們可以使用另一個上下文變量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;
}

示例:

我們使用Trigger.oldMap變量,如前所述,它是一個上下文變量,用于存儲正在更新的記錄的Id和舊值。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號