PR

【Salesforce】 SOQL の TYPEOF で多態的なリレーション項目を取得する

salesforce-soql Salesforce
この記事は約3分で読めます。
記事内に広告が含まれています。

この記事では、多態的なリレーション項目を SOQL で取得する際の TYPEOF の使い方を紹介します。

SOQL は Salesforce を利用する上では必須レベルのクエリです。

しかし、行動や TODO のクエリを行う際に、いくつかのオブジェクトと関連する WhoIdWhat といった多態的なリレーション項目を取得する方法はあまり馴染みがないと思います。

TYPEOF について

Salesforce の SOQL における TYPEOF 構文は、ポリモーフィック関係にあるオブジェクトから異なるオブジェクトタイプに基づいて特定のフィールドを選択するために使用されます。

標準またはカスタムのポリモーフィック関係フィールドに対して異なるオブジェクトのフィールドに動的にアクセスする場合に便利です。

TYPEOF を使用すると、クエリの中で条件分岐を使って、返されるフィールドセットをオブジェクトタイプごとにカスタマイズできます。

スポンサーリンク

TYPEOF の基本的な構文

SELECT 
  TYPEOF <relationshipField>
    WHEN <objectType1> THEN <field1>, <field2>, ...
    WHEN <objectType2> THEN <field1>, <field2>, ...
    ELSE <field1>, <field2>, ...
  END,
  <otherField1>, <otherField2>, ...
FROM <object>
  • <relationshipField>: ポリモーフィック関係フィールドを指定します。
  • <objectType1>, <objectType2>: 異なるオブジェクトタイプを指定します。
  • <field1>, <field2>: 取得したいフィールドを指定します。
  • <object>: クエリの対象となるオブジェクトを指定します。
スポンサーリンク

TYPEOF の使用例

例えば、WhoId フィールドが Task (TODO) オブジェクトにポリモーフィック関係を持つとします。

このフィールドは Contact または Lead オブジェクトと参照関係にあります。 TYPEOF を使用して、これらの異なるオブジェクトタイプに基づいて異なる情報を取得してみます。

SELECT 
  Subject, 
  TYPEOF Who
    WHEN Contact THEN Name, Phone
    WHEN Lead THEN Name, Email
  END 
FROM Task

このクエリでは、Task オブジェクトから Subject フィールドを選択し、関連付けられた Who (Contact または Lead) に基づいて NamePhone または Email を取得します。

スポンサーリンク

参考

おわりに

SOQL は SQL と似ていますが、色々な制約や変わった構文があるので、備忘録として覚えておきたいですね。

コメント

タイトルとURLをコピーしました