この記事では、多態的なリレーション項目を SOQL で取得する際の TYPEOF
の使い方を紹介します。
SOQL は Salesforce を利用する上では必須レベルのクエリです。
しかし、行動や TODO のクエリを行う際に、いくつかのオブジェクトと関連する WhoId
や What
といった多態的なリレーション項目を取得する方法はあまり馴染みがないと思います。
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) に基づいて Name
と Phone
または Email
を取得します。
参考
おわりに
SOQL は SQL と似ていますが、色々な制約や変わった構文があるので、備忘録として覚えておきたいですね。
コメント