問題
Apexを使用して、取引先の名前と関連する「Opportunity」オブジェクトのフェーズ(StageName)をコンソールに出力するクラスを作成してください。ただし、フェーズが「Closed Won」のもののみを出力してください。
この問題を解決することで、Apexでのデータの取得方法、関連オブジェクトのデータの取得方法、文字列フィールドのフィルタリング、およびコンソールへの出力方法を練習することができます。
問題解決のフレームワーク
- 目的の確認:
- 問題文から、取引先の名前と関連する「Opportunity」オブジェクトのフェーズ(StageName)をコンソールに出力することが目的であることを理解する。さらに、フェーズが「Closed Won」のもののみを出力するという条件も確認する。
- 必要なデータの特定:
- 取引先の名前(「Account」オブジェクトの「Name」項目)
- 関連する「Opportunity」オブジェクトのフェーズ名(「Opportunity」オブジェクトの「StageName」項目)
- データの取得方法の検討:
- SalesforceのSOQLを使用してデータを取得する。
- 「Account」オブジェクトからデータを取得する際に、関連する「Opportunity」オブジェクトもサブクエリを使用して同時に取得する。さらに、「Opportunity」のフェーズが「Closed Won」である条件をWHERE句で指定する。
- コードの構築:
- 適切なクラスとメソッドの定義を行う。
- SOQLクエリを使用して、必要なデータを取得するコードを書く。
- データの処理:
- 取得した「Account」オブジェクトのリストをfor文でループ処理する。
- 各「Account」に関連する「Opportunity」オブジェクトもfor文でループ処理する。条件に合致するデータをコンソールに出力する。
- コードの最終形:
- 全ての処理を組み合わせて、最終的なコードを完成させる。
解答例
public class AccountOpportunityLogger {
public static void logClosedWonOpportunities(){
List<Account> accounts = [SELECT Name, (SELECT StageName FROM Opportunities WHERE StageName = 'Closed Won') FROM Account];
for(Account acc : accounts){
for(Opportunity opp : acc.Opportunities){
System.debug('Account Name: ' + acc.Name + ', Opportunity Stage: ' + opp.StageName);
}
}
}
}
解説
このクラスAccountOpportunityLoggerは、Salesforceの標準オブジェクト「Account」から取引先の名前と、それに関連する「Opportunity」オブジェクトのフェーズ名を取得し、特定の条件(フェーズ名が「Closed Won」のもののみ)を満たすデータをコンソールに出力する目的で作成されています。
- クラスとメソッドの定義:
AccountOpportunityLogger
という名前のクラスが定義されています。このクラス内に、logClosedWonOpportunities
という静的メソッドが定義されています。 - データの取得:
この行は、Salesforceの標準オブジェクト「Account」から取引先の名前と、それに関連する「Opportunity」オブジェクトのフェーズ名を取得するSOQLクエリを実行しています。ただし、フェーズ名が「Closed Won」のもののみを取得しています。
List<Account> accounts = [SELECT Name, (SELECT StageName FROM Opportunities WHERE StageName = 'Closed Won') FROM Account];
- データの処理と出力:
外部のforループは、取得した取引先を1つずつ処理するためのものです。内部のforループは、現在の取引先に関連する「Opportunity」オブジェクトを1つずつ処理するためのものです。
for(Account acc : accounts){
for(Opportunity opp : acc.Opportunities){
System.debug('Account Name: ' + acc.Name + ', Opportunity Stage: ' + opp.StageName);
}
}
解答例(コメント付き)
public class AccountOpportunityLogger {
// 静的メソッドを定義: 取引先の名前と関連する「Opportunity」のフェーズ名をコンソールに出力
public static void logClosedWonOpportunities(){
// Salesforceの「Account」オブジェクトから取引先の名前と関連する「Opportunity」のフェーズ名を取得
// ただし、フェーズ名が「Closed Won」のもののみを取得
List<Account> accounts = [SELECT Name, (SELECT StageName FROM Opportunities WHERE StageName = 'Closed Won') FROM Account];
// 取得した取引先を1つずつ処理
for(Account acc : accounts){
// 現在の取引先に関連する「Opportunity」オブジェクトを1つずつ処理
for(Opportunity opp : acc.Opportunities){
// 取引先の名前と「Opportunity」のフェーズ名をコンソールに出力
System.debug('Account Name: ' + acc.Name + ', Opportunity Stage: ' + opp.StageName);
}
}
}
}
次の問題へ
前の問題へ
【Apex練習問題】第9問
問題 Apexを使用して、取引先の名前と請求先住所をコンソールに出力するクラスを作成してください。ただし、請求先住所が未入力の場合は、「住所不明」として出力してく…
1問目から復習する
【Apex練習問題】第1問
問題 Salesforceには、取引先の情報を管理する標準オブジェクト「Account」があります。このオブジェクトには、取引先の名前(Name)フィールドがあります。Apexを使用し…
コメント