問題
「Account」オブジェクトに関連する「Contact」オブジェクトがあります。Apexを使用して、取引先の名前と、その取引先に関連する取引先責任者の数をコンソールに出力するクラスを作成してください。
この問題を解決することで、Apexでの関連オブジェクトのデータの取得方法、集計関数の使用方法、およびコンソールへの出力方法を練習することができます。
問題解決のフレームワーク
- 目的の確認:
- 問題文から、取引先の名前と、その取引先に関連する取引先責任者の数をコンソールに出力することが目的であることを理解する。
- 必要なデータの特定:
- 取引先の名前(「Account」オブジェクトの「Name」項目)
- 取引先に関連する取引先責任者の数(「Contact」オブジェクト)
- データの取得方法の検討:
- SalesforceのSOQLを使用してデータを取得する。
- 「Contact」オブジェクトからデータを取得する際に、関連する「Account」の名前と、その「Account」に関連する「Contact」の数を集計関数を使用して取得する。
- コードの構築:
- 必要なクラスとメソッドの定義を行う。
- SOQLクエリを使用して、必要なデータを取得するコードを書く。
- データの処理:
- 取得した集計結果をfor文でループ処理する。
- 各取引先の名前と、関連する取引先責任者の数をコンソールに出力する。
- コードの最終形:
- 全ての処理を組み合わせて、最終的なコードを完成させる。
解答例
public class AccountContactLogger {
public static void logAccountsWithContactCount(){
List<AggregateResult> results = [SELECT Account.Name, COUNT(Id) contactCount FROM Contact GROUP BY Account.Name];
for(AggregateResult result : results){
System.debug('Account Name: ' + result.get('Name') + ', Number of Contacts: ' + result.get('contactCount'));
}
}
}
解説
このクラスは、Salesforceの標準オブジェクト「Account」とそれに関連する「Contact」オブジェクトから、各取引先とその取引先に関連する取引先責任者の数を取得し、それをコンソールに出力する目的で作成されています。
- クラスとメソッドの定義:
AccountContactLogger
という名前のクラスが定義されています。このクラス内に、logAccountsWithContactCount
という静的メソッドが定義されています。
- データの取得:
- この行は、Salesforceの標準オブジェクト「Account」から取引先の名前と、それに関連する「Contact」オブジェクトの数を取得するSOQLクエリを実行しています。集計関数
COUNT(Id)
を使用して、各取引先に関連する取引先責任者の数をカウントしています。
- この行は、Salesforceの標準オブジェクト「Account」から取引先の名前と、それに関連する「Contact」オブジェクトの数を取得するSOQLクエリを実行しています。集計関数
List<AggregateResult> results = [SELECT Account.Name, COUNT(Id) contactCount FROM Contact GROUP BY Account.Name];
ここで、AggregateResult
という型を使用しています。これは、SOQLクエリで集計関数(この場合はCOUNT
)を使用するときに返される特殊な結果の型です。通常のオブジェクトのリストとは異なり、集計結果を格納するためのものです。このため、取得したデータにアクセスするにはget
メソッドを使用する必要があります。
- データの処理と出力:
- 取得した結果をforループを使用して1つずつ処理します。各取引先の名前と、その取引先に関連する取引先責任者の数をコンソールに出力しています。
for(AggregateResult result : results){
System.debug('Account Name: ' + result.get('Name') + ', Number of Contacts: ' + result.get('contactCount'));
}
解答例(解説付き)
public class AccountContactLogger {
public static void logAccountsWithContactCount(){
// SOQLクエリで取引先の名前と、それに関連する取引先責任者の数を取得
// AggregateResultは集計関数の結果を格納するための特殊な型
List<AggregateResult> results = [SELECT Account.Name, COUNT(Id) contactCount FROM Contact GROUP BY Account.Name];
// 取得した結果をループで処理
for(AggregateResult result : results){
// 各取引先の名前と、関連する取引先責任者の数をコンソールに出力
System.debug('Account Name: ' + result.get('Name') + ', Number of Contacts: ' + result.get('contactCount'));
}
}
}
次の問題へ
【Apex練習問題】第7問
問題 Apexを使用して、取引先の名前と年間売上をコンソールに出力するクラスを作成してください。ただし、年間売上の高い順に5つの取引先のみを出力してください。 この…
前の問題へ
【Apex練習問題】第5問
問題 「Account」オブジェクトには、取引先の業種(Industry)フィールドがあります。Apexを使用して、業種が「Technology」の取引先の名前と年間売上をコンソールに出力…
1問目から復習する
【Apex練習問題】第1問
問題 Salesforceには、取引先の情報を管理する標準オブジェクト「Account」があります。このオブジェクトには、取引先の名前(Name)フィールドがあります。Apexを使用し…
コメント