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