Salesforce Trigger.newコンテキスト変数のサンプル

環境
Salesforce

構文
トリガーコンテキスト変数 new
新しいバージョンの sObject レコードのリストを返します。
この sObject リストは insert トリガー、update トリガー、および
undelete トリガーでのみ使用でき、レコードは before トリガーでのみ変更できます。

使用例
単純なトリガーの場合、Trigger.new は sObject のリストであり、for ループで繰り返し実行できます。
また、SOQL クエリの IN 句でバインド変数として使用できます。

サンプルコード

Trigger simpleTrigger on Account (after insert) {
    for (Account a : Trigger.new) {
        // 各 sObject を反復処理する
    }

   /*
   この 1 つのクエリにより、トリガーとなるアカウントのいずれかに関連付けられている
   すべての連絡先が検索されます。 Trigger.new はレコードのコレクションですが、
   SOQL クエリでバインド変数として使用すると、Apex はレコードのリストを対応する ID のリストに
   自動的に変換することに注意してください。
   */
    Contact[] cons = [SELECT LastName FROM Contact
                      WHERE AccountId IN :Trigger.new];
}

使用例
このトリガーでは、Trigger.isBefore や Trigger.isDelete のような Boolean コンテキスト変数を使用して、特定のトリガー条件でのみ実行するコードを定義します。
サンプルコード

trigger myAccountTrigger on Account(before delete, before insert, before update, 
                                    after delete, after insert, after update) {
if (Trigger.isBefore) {
    if (Trigger.isDelete) {

        /*Before delete トリガーでは、トリガーは Trigger.old リストを使用して削除される
         レコードにアクセス*/
        for (Account a : Trigger.old) {
            if (a.name != 'okToDelete') {
                a.addError('You can\'t delete this record!');
            } 
        }
    } else {

    /*before insert トリガーまたは before update トリガーでは、
       トリガーは Trigger.new リストを使用して新しいレコードにアクセス*/
        for (Account a : Trigger.new) {
            if (a.name == 'bad') {
                a.name.addError('名前がエラー');
            }
    }
    if (Trigger.isInsert) {
        for (Account a : Trigger.new) {
            System.assertEquals('xxx', a.accountNumber); 
            System.assertEquals('industry', a.industry); 
            System.assertEquals(100, a.numberofemployees);
            System.assertEquals(100.0, a.annualrevenue);
            a.accountNumber = 'yyy';
        }

// トリガーが before トリガーでない場合は、after トリガーである必要
} else {
    if (Trigger.isInsert) {
        List<Contact> contacts = new List<Contact>();
        for (Account a : Trigger.new) {        
            if(a.Name == 'makeContact') {
                contacts.add(new Contact (LastName = a.Name,
                                          AccountId = a.Id));
            }
        } 
      insert contacts;
    }
  }
}}}

 

IT

Posted by arkgame