問題
「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'];
- データの出力:
- 外部の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」の名前を出力
}
}
}
}
次の問題へ
【Apex練習問題】第9問
問題 Apexを使用して、取引先の名前と請求先住所をコンソールに出力するクラスを作成してください。ただし、請求先住所が未入力の場合は、「住所不明」として出力してく…
前の問題へ
【Apex練習問題】第7問
問題 Apexを使用して、取引先の名前と年間売上をコンソールに出力するクラスを作成してください。ただし、年間売上の高い順に5つの取引先のみを出力してください。 この…
1問目から復習する
【Apex練習問題】第1問
問題 Salesforceには、取引先の情報を管理する標準オブジェクト「Account」があります。このオブジェクトには、取引先の名前(Name)フィールドがあります。Apexを使用し…
コメント