Apexa Trigger.isBefore や Trigger.isDelete のサンプルコード

環境
Apex Salesforce

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

old
古いバージョンの sObject レコードのリストを返します。
この sObject リストは update トリガーと delete トリガーでのみ使用できます。

isBefore
レコードが保存される前にこのトリガーが実行された場合に、true を返します。

isInsert
挿入操作により、Salesforce ユーザーインターフェース、Apex、または API からこのトリガーが実行された場合に、true を返します。

使用例
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('この記録は削除できません!');
            } 
        }
    } else {

    // before insert トリガーまたは before update トリガーでは、トリガーは新しいレコードにアクセスする
    //Trigger.new リストを使用.
        for (Account a : Trigger.new) {
            if (a.name == 'bad') {
                a.name.addError('Bad name');
            }
    }
    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;
    }
  }
}}}

 

Apex

Posted by arkgame