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