Apex-triggers
提供:Dev Guides
Apex-トリガー
Apexトリガーは、特定のイベントが発生したときに実行されるストアドプロシージャのようなものです。 トリガーは、イベントが記録上で発生する前後に実行されます。
構文
trigger triggerName on ObjectName (trigger_events) { Trigger_code_block }
トリガーの実行
以下は、トリガーをモミできるイベントです-
- インサート
- 更新
- 削除する
- マージ
- アップサート
- 元に戻す
トリガーの例1
顧客の[顧客ステータス]フィールドが非アクティブからアクティブに変更されたときに請求書レコードを作成する必要があるというビジネス要件を受け取ったとします。 このため、次の手順に従って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* -これは、現在挿入または更新されているトリガーコンテキストにあるレコードを格納するコンテキスト変数です。 この場合、この変数には、更新されたCustomerオブジェクトのレコードがあります。
コンテキストで利用できる他のコンテキスト変数があります-trigger.old、trigger.newMap、trigger.OldMap。
トリガーの例2
上記のトリガーは、顧客レコードに更新操作があるときに実行されます。 毎回ではなく、顧客ステータスが非アクティブからアクティブに変更された場合にのみ、請求書レコードを挿入する必要があるとします。このために、キーをレコードIDとして、値を古いレコード値として保存する別のコンテキスト変数 trigger.oldMap を使用できます。
//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と古い値を格納するコンテキスト変数です。