【Salesforce 認定Platformデベロッパー】試験対策:第140問

問題

開発者は、リードオブジェクトにbefore insertトリガーを使用して、Territory__c.PostalCode__cがLead.PostalCodeと一致するTerritory__cオブジェクトを取得します。しかし、開発者がデータローダーを使用して10,000のリードレコードを挿入すると、コードが失敗します。

for (Lead l : Trigger.new) {
    if (l.PostalCode != null) {
        List<Territory__c> terrList = [SELECT Id FROM Territory__c WHERE PostalCode__c = :l.PostalCode];
        if(terrList.size() > 0) {
            l.Territory__c = terrList[0].Id;
        }
    }
}

どのコード行がコードブロックの失敗の原因となっていますか。

  • 3行目:SOQLクエリがforループコードの内部に配置されてるため
  • 1行目:before insertトリガーではTrigger:newは無効なため
  • 2行目:PostalCodeがnullの場合、NullPointer例外がスローされるため
  • 5行目:before insertトリガー内のLeadは更新できないため

正解

  • 3行目:SOQLクエリがforループコードの内部に配置されてるため
  • 1行目:before insertトリガーではTrigger:newは無効なため
  • 2行目:PostalCodeがnullの場合、NullPointer例外がスローされるため
  • 5行目:before insertトリガー内のLeadは更新できないため

解説

それぞれの選択肢の理由について説明します。

□ 3行目:SOQLクエリがforループコードの内部に配置されてるため
これは正解です。大量のレコードを処理する際、ループの中でSOQLクエリを実行すると、すぐにSOQLクエリの制限に達してしまいます。このような設計は、大量のデータを処理する際に効率的ではありません。

□ 1行目:before insertトリガーではTrigger:newは無効なため
これは不正解です。Trigger.newはbefore insertトリガーで有効です。これは新しく挿入されるレコードのリストを参照します。

□ 2行目:PostalCodeがnullの場合、NullPointer例外がスローされるため
これは不正解です。コードはl.PostalCodeがnullでない場合のみSOQLクエリを実行するようになっているため、NullPointer例外は発生しません。

□ 5行目:before insertトリガー内のLeadは更新できないため
これは不正解です。before insertトリガー内では、Trigger.newのレコードの項目を変更することができます。そのため、この行は問題を引き起こすものではありません。

次の問題へ

前の問題へ

1問目から復習する

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

この記事を書いた人

雇われのシステムエンジニアです。
普段は車載ECUのセキュリティー分野に従事しております。

コメント

コメントする

目次