SalesforceにおけるWebサービスコールアウトのテスト完全ガイド

Salesforceの親オブジェクトの値をsObject.get()で取得する方法


Salesforceで`sObject.get()`を使用して関連親オブジェクトのフィールド値を取得する方法

概要

Salesforceでは、親オブジェクトのフィールド値を取得する際に、`sObject.get()`メソッドを利用できます。この方法は、子オブジェクトから直接親オブジェクトの情報にアクセスする際に便利です。本記事では、実際のコード例とともにその使用方法を説明します。


基本概念

`get()`メソッドは、任意の`sObject`インスタンスからフィールド値を動的に取得するために使用されます。親オブジェクトの値を取得するには、関連フィールドを含むクエリを実行し、ドット表記または関係名をキーとして利用します。

例:

  • 親オブジェクトの値: `Account.Name`(商談から取引先の名前を取得)

使用例コード

以下の例では、`Opportunity`(商談)オブジェクトから関連する`Account`(取引先)の`Name`フィールドを取得します。

public class ParentFieldFetcher {

    public static void fetchParentFieldValues() {
        // 商談オブジェクトをクエリ
        List<Opportunity> opportunities = [
            SELECT Id, Name, Account.Name 
            FROM Opportunity 
            WHERE AccountId != null 
            LIMIT 5
        ];

        // 親オブジェクトのフィールド値を動的に取得
        for (Opportunity opp : opportunities) {
            // get()メソッドで親オブジェクトの値を取得
            String accountName = (String) opp.getSObject('Account').get('Name');
            
            // デバッグ出力
            System.debug('Opportunity: ' + opp.Name + ', Account Name: ' + accountName);
        }
    }
}

コードの解説

  1. クエリ:

    • 子オブジェクト(`Opportunity`)から親オブジェクト(`Account`)のフィールド(`Name`)を取得するために、`SELECT`文で関連フィールドを指定します。
    • `Account.Name`は関連フィールドを示します。
  2. `get()`:

    • 親オブジェクトの特定のフィールド(`Name`)を動的に取得します。
  3. 型変換:

    • `get()`メソッドは`Object`型を返すため、明示的に`String`型にキャストします。

注意点

  1. 関連フィールドの指定:

    • クエリで親オブジェクトのフィールドを明示的に指定する必要があります(例: `Account.Name`)。
    • フィールドがクエリに含まれていない場合、`get()`は`null`を返します。
  2. リレーションシップ名の確認:

    • `get()`のキーとして使用するリレーションシップ名は、オブジェクト構造によって異なります。カスタムリレーションシップの場合、`__r`が付加されます(例: `CustomObject__r`)。

実行例の出力

デバッグログには次のような情報が出力されます:

Opportunity: Big Deal, Account Name: Acme Corp
Opportunity: Small Deal, Account Name: Tech Innovators

ユースケース

  • 子オブジェクトから関連する親オブジェクトの情報を取得する必要がある場合。
  • 動的に取得するフィールド名を変更する必要がある場合。

コメント