Apex-トリガー

Apexトリガーは、特定のイベントが発生したときに実行されるストアドプロシージャのようなものです。トリガーは、レコードでイベントが発生する前後に実行されます。

構文

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 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

上記のトリガーは、顧客レコードに更新操作がある場合に実行されます。請求書レコードを挿入する必要があるのは、顧客ステータスが非アクティブからアクティブに変わるときだけであり、毎回ではないとします。このために、別のコンテキスト変数を使用できます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と古い値を格納するコンテキスト変数です。