Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

SOQLでの多態的なリレーションについて

公開日: Nov 29, 2022
説明
SOQLで多態的なリレーションを持つオブジェクトへのアクセスについて説明します。
解決策
多態的リレーションとは、オブジェクトが複数のオブジェクトのレコードを親に持つことが出来る場合のリレーションを示します。
このリレーションの管理には、内部的に保持している Name オブジェクトで行われます。
 * 例えば、行動(Event)オブジェクトの WhoId には、リード や 取引先責任者といった複数のオブジェクトのレコードを設定でき、このようなリレーションが多態的リレーションとなります。

 
多態的リレーションに対してのリレーションクエリを実施する場合には、以下を注意する必要があります。

例えば以下SOQLクエリは、取引先責任者(子)から取引先(親)レコードのデータを参照するリレーションクエリです。
 
-----------------------------
SOQL> select Id,Name,AccountId,Account.sfdcText__c from Contact
-----------------------------
取引先責任者における取引先項目(Account)は、多態的リレーションを取らないためリレーションの取引先オブジェクトを参照することから、取引先のカスタム項目の値を取得することができます。



以下SOQLクエリは、行動(子) から 取引先責任者(親)レコードのデータを参照するリレーションクエリです。
 
-------------------------------
SOQL> select subject, who.sfdcText__c from Event
No such column 'sfdcText__c' on entity 'Name'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. 
Please reference your WSDL or the describe call for the appropriate names.
-------------------------------
行動における名前項目(Who)は、多態的リレーションとなるため Name オブジェクトを参照しますが Name オブジェクトにはカスタム項目を保持しないため、上記リレーションクエリはエラーとなります。
 


多態的リレーションであるかは、DescribeSObjectResult の NamePointing 項目で確認することができます。
 
-------------------------------
System.debug(Event.WhoId.getDescribe().isNamePointing());
|USER_DEBUG|[1]|DEBUG|true

System.debug(Contact.AccountId.getDescribe().isNamePointing());
|USER_DEBUG|[1]|DEBUG|false
-------------------------------
true の場合には、多態的リレーションであることを示します。
ナレッジ記事番号

000386992

 
読み込み中
Salesforce Help | Article