MENU
Abo
某SIer勤務。
新卒文系からエンジニア就職。
日々の学びをつらつらと書いています。
保有資格:
Salesforce認定アドミニストレーター  
Salesforce認定Platformデベロッパー
Salesforce認定上級Platformデベロッパー
カテゴリー
アーカイブ

【Apex】trigger.newで関連レコードの項目は取得できない件

トリガの中でtrigger.newをfor文で回して、レコードの項目の値を取得することは頻繁にあると思います。

そしてその処理の中で、取得した項目値がnullとなってしまうケースが存在します。

それがtrigger.newから関連レコードの項目値を取得しようとした時です。

目次

trigger.newでの関連レコードの項目取得

以下のContactトリガでは、取引先責任者が新規作成された際にtrigger.newをfor文で回し、その取引先責任者に紐づく取引先の名前を参照しようとしています。

trigger ContactTrigger on Contact (before insert) {

    for(Contact con : trigger.new){      
        system.debug(con.LastName);
        system.debug(con.Account.Name);
    }    
    
}

デバッグログの結果を見ると、以下のようになりました。

USER_DEBUG [4]|DEBUG|取引先責任者01
USER_DEBUG [5]|DEBUG|null

取引先責任者の氏名は取得できていますが、紐づく取引先の取引先名はnullとなってしまいます。

このようにtrigger.newからtrigger.newの項目値はもちろん取得できますが、そのレコードに関連するレコードの項目値は取得できません。

対応策

では、関連レコードの値はどのように取得するかというと、以下のように一度SOQLを発行して取得する必要があります。

trigger ContactTrigger on Contact (before insert) {
    
    Set<Id> accIdSet = new Set<Id>();

    for(Contact con : trigger.new){      
        accIdSet.add(con.AccountId);
    }    
    //取引先情報を取得
    for(Account acc : [Select Name From Account Where Id IN: accIdSet]){
        system.debug(acc.Name);
    }
    
}
USER_DEBUG [11]|DEBUG|取引先01

これは割と忘れがちな内容ですね。

後続の処理でNullPointerExceptionが発生し、ようやく気付くこともしばしば。

trigger.newから関連レコードの項目値を取得する際は、お気を付けください~

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

某SIer勤務。
新卒文系からエンジニア就職。
日々の学びをつらつらと書いています。
保有資格:Salesforce認定アドミニストレーター
     Salesforce認定Platformデベロッパー
     Salesforce認定上級Platformデベロッパー

コメント

コメントする

CAPTCHA


目次