【Apex練習問題】第8問

問題

「Account」オブジェクトには、取引先の評価(Rating)フィールドがあります。Apexを使用して、評価が「Hot」の取引先の名前をコンソールに出力するクラスを作成してください。さらに、その取引先に関連する「Opportunity」オブジェクトの名前も出力してください。

この問題を解決することで、Apexでのデータの取得方法、関連オブジェクトのデータの取得方法、およびコンソールへの出力方法を練習することができます。

問題解決のフレームワーク

  • 目的の確認:
    • 問題文から、評価が「Hot」の取引先と、それに関連する「Opportunity」オブジェクトの名前をコンソールに出力することが目的であることを理解する。
  • 必要なデータの特定:
    • 取引先の名前(「Account」オブジェクトの「Name」項目)
    • 取引先の評価(「Account」オブジェクトの「Rating」項目)
    • 関連する「Opportunity」オブジェクトの名前
  • データの取得方法の検討:
    • SalesforceのSOQLを使用してデータを取得する。
    • 「Account」オブジェクトからデータを取得する際に、評価が「Hot」である条件をWHERE句で指定する。さらに、関連する「Opportunity」オブジェクトのデータもサブクエリを使用して取得する。
  • コードの構築:
    • 適切なクラスとメソッドの定義を行う。
    • SOQLクエリを使用して、必要なデータを取得するコードを書く。
  • データの処理:
    • 取得した「Account」オブジェクトのリストをfor文でループ処理する。
    • 各取引先の名前と、それに関連する「Opportunity」オブジェクトの名前をコンソールに出力する。
  • コードの最終形:
    • 全ての処理を組み合わせて、最終的なコードを完成させる。

解答例

public class HotRatingAccountLogger {
    public static void logHotRatingAccounts(){
        List<Account> hotAccounts = [SELECT Name, (SELECT Name FROM Opportunities) FROM Account WHERE Rating = 'Hot'];
        for(Account acc : hotAccounts){
            System.debug('Account Name: ' + acc.Name);
            for(Opportunity opp : acc.Opportunities){
                System.debug('Related Opportunity: ' + opp.Name);
            }
        }
    }
}

このクラスは、Salesforceの標準オブジェクト「Account」から評価が「Hot」の取引先を取得し、それらの取引先と関連する「Opportunity」オブジェクトの名前をコンソールに出力する目的で作成されています。

解説

  • クラスとメソッドの定義:
    • HotRatingAccountLoggerという名前のクラスが定義されています。
    • このクラス内に、logHotRatingAccountsという静的メソッドが定義されています。
  • データの取得:
    • 下記の行は、評価が「Hot」の取引先と、それに関連する「Opportunity」オブジェクトの名前を取得するSOQLクエリを実行しています。
    • 取得したデータは、hotAccountsという名前のリストに格納されます。
List<Account> hotAccounts = [SELECT Name, (SELECT Name FROM Opportunities) FROM Account WHERE Rating = 'Hot'];
  1. データの出力:
    • 外部のforループは、取得した評価が「Hot」の取引先を1つずつ処理するためのものです。
    • 内部のforループは、現在の取引先に関連する「Opportunity」オブジェクトを1つずつ処理するためのものです。
for(Account acc : hotAccounts){
    System.debug('Account Name: ' + acc.Name);
    for(Opportunity opp : acc.Opportunities){
        System.debug('Related Opportunity: ' + opp.Name);
    }
}

解答例(解説付き)

public class HotRatingAccountLogger {
    // 関数 logHotRatingAccounts: 評価が「Hot」の取引先と、それに関連する「Opportunity」の名前をコンソールに出力する
    public static void logHotRatingAccounts(){
        // 評価が「Hot」の取引先と、それに関連する「Opportunity」を取得
        List<Account> hotAccounts = [SELECT Name, (SELECT Name FROM Opportunities) FROM Account WHERE Rating = 'Hot'];
        
        // 取得した評価が「Hot」の取引先を1つずつ処理
        for(Account acc : hotAccounts){
            System.debug('Account Name: ' + acc.Name); // 取引先の名前を出力
            
            // 現在の取引先に関連する「Opportunity」を1つずつ処理
            for(Opportunity opp : acc.Opportunities){
                System.debug('Related Opportunity: ' + opp.Name); // 関連する「Opportunity」の名前を出力
            }
        }
    }
}

次の問題へ

前の問題へ

1問目から復習する

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

この記事を書いた人

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

■保有資格
Salesforce 認定 アドミニストレーター
Salesforce 認定 Platform アプリケーションビルダー
Salesforce 認定 Platform デベロッパー

コメント

コメントする

目次