SOQL クエリの多態的なリレーションの処理
多態的なリレーションは、参照されるオブジェクトに複数の異なる種別を使用できるオブジェクト間のリレーションです。たとえば、Task の Who リレーション項目には、Contact または Lead のいずれかを使用できます。
Apex で多態的なリレーションの SOQL クエリを使用する方法についての説明を次に示します。多態的なリレーションについてのより一般的な情報は、『SOQL および SOSL リファレンス』の「リレーション項目および多態的な項目について」を参照してください。
Apex で多態的な項目を参照する SOQL クエリを使用して、多態的な項目によって参照されるオブジェクト種別に依存する結果を取得できます。1 つのアプローチとして、Type 修飾子を使用して結果を絞り込むという方法があります。次の例では、What 項目を使用して Account または Opportunity に関連する Event を照会します。
別のアプローチとして、SOQL の SELECT ステートメントで TYPEOF 句を使用する方法があります。この例でも、What 項目を使用して Account または Opportunity に関連する Event を照会します。
これらのクエリは、リレーション項目が目的のオブジェクト種別を参照する sObject のリストを返します。
多態的なリレーションで参照されるオブジェクトにアクセスする必要がある場合は、オブジェクト種別を判断するために instanceof キーワードを使用できます。次の例では、instanceof を使用して、Account または Opportunity が Event に関連しているかどうかを判断します。
別のメソッドに渡す前に、クエリが返す参照される sObject を適切な種別の変数に割り当てる必要があります。この例では次の処理が行われます。
- TYPEOF 句で SOQL クエリを使用して、Merchandise__c カスタムオブジェクトの User または Group 所有者を照会する。
- instanceof を使用して、所有者の種別を判断する。
- 所有者オブジェクトを User または Group 種別の変数に割り当ててから、ユーティリティメソッドに渡す。