【Apex練習問題】第6問

問題

「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」オブジェクトから、各取引先とその取引先に関連する取引先責任者の数を取得し、それをコンソールに出力する目的で作成されています。

  1. クラスとメソッドの定義:
    • AccountContactLoggerという名前のクラスが定義されています。このクラス内に、logAccountsWithContactCountという静的メソッドが定義されています。
  2. データの取得:
    • この行は、Salesforceの標準オブジェクト「Account」から取引先の名前と、それに関連する「Contact」オブジェクトの数を取得するSOQLクエリを実行しています。集計関数COUNT(Id)を使用して、各取引先に関連する取引先責任者の数をカウントしています。
List<AggregateResult> results = [SELECT Account.Name, COUNT(Id) contactCount FROM Contact GROUP BY Account.Name];

ここで、AggregateResultという型を使用しています。これは、SOQLクエリで集計関数(この場合はCOUNT)を使用するときに返される特殊な結果の型です。通常のオブジェクトのリストとは異なり、集計結果を格納するためのものです。このため、取得したデータにアクセスするにはgetメソッドを使用する必要があります。

  1. データの処理と出力:
    • 取得した結果を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'));
        }
    }
}

次の問題へ

前の問題へ

1問目から復習する

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

この記事を書いた人

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

コメント

コメントする

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約が適用されます。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次