Salesforceコラム
Salesforceに特化した情報をお届けします

SalesforceのTYPEOFとは?概要や使い方をご紹介

2021年06月28日

TYPEOFとは?


SalesforceのTYPEOFとは、オブジェクト種別を確認するために使用する命令です。

TYPEOFは、SalesforceのSOQLクエリのSELECTステートメントにて使用することができ、多態的なリレーションが含まれているオブジェクト種別を確認することができます。

TYPEOFは、APIバージョンの46.0以降または、SOQLのPolymorphism機能の開発者プレビューで使用可能です。

TYPEOFには、多態的なランタイム型に一致する選択項目を指定します。複数の多態的な項目を確認する場合は、一つのSELECTステートメントに複数のTYPEOFを使用します。

サンプルコード

以下は、SalesforceのTYPEOFのサンプルコードです。

TYPEOFは、オブジェクト種別ごとに1つのWHEN句を必要な分だけ指定することができます。ELSE句は、多態的なリレーション項目のオブジェクト種別が、WHEN句で指定したオブジェクト種別と一致しない場合の処理です。ELSE句は省略することも可能です。

TYPEOFの構文

サンプルコードに出てきたSalesforceのTYPEOF固有の構文は、次のものがあります。

1.fieldList
2.typeOfField
3.whenObjectType
4.whenFieldList
5.elseFieldList
6.objectType

fieldList

fieldListには、objectTypeから取得する項目を指定します。

取得する項目が複数ある場合はカンマ区切りのリストで指定します。fieldListは、SELECTステートメントで使用できる標準リストで、多態的なオブジェクト種別に関係なく使用可能です。

もし、多態的なリレーションのオブジェクト項目のみが必要な場合、SELECTステートメントからこのリストを除外することができます。

typeOfField

typeOfFieldには、複数のオブジェクト種別を参照できる多態的なリレーション項目を指定します。

または、objectTypeの親の多態的なリレーション項目を指定することも可能です。例えば、Whoリレーション項目は、ContactかLeadを使用することができます。

whenObjectType

whenObjectTypeには、指定したWHEN句のオブジェクト種別を指定します。

SELECTステートメント実行時、typeOfFieldに指定した多態的なリレーションのオブジェクト種別が、WHEN句のオブジェクト種別と一致するか判定されます。

whenFieldList

whenFieldListには、whenObjectTypeから取得するリストを指定します。

リストは1つ以上の項目をカンマで区切ります。このリストは参照されるオブジェクト種別または、関連オブジェクト項目へのパスです。SELECTステートメントのオブジェクト種別ではありません。

elseFieldList

elseFieldListには、指定した多態的なリレーション項目に一致しない場合のリストを指定します。

リストは1つ以上の項目をカンマで区切ります。このリストは、Nameオブジェクト種別で有効な項目か、Name関連オブジェクトへのパスが含まれる可能性があります。

objectType

objectTypeには、照会するオブジェクト種別を指定します。

照会する対象のオブジェクト種別は、SELECTステートメントでは必ず指定する標準のオブジェクト種別です。

TYPEOFの注意点

SalesforceのTYPEOFを使用する場合、次の注意点があります。

1.namePointing属性がfalseになっているリレーションでは使用することができません。
2.relationshipName属性がfalseになっているリレーションでは使用することができません。
3.クエリのSELECT句のみ使用することができます。
4.オブジェクトを返さないクエリで使用することはできません。例えば、COUNTなどの集計クエリです。
5.ストリーミングAPI PushTopicベースのSOQLクエリで使用することはできません。
6.Bulk APIのSOQLクエリで使用することはできません。
7.ネストができません。つまり、TYPEOFのWHEN句の中で別のTYPEOFは使用できません。
8.準結合クエリのSELECT句では使用することはできません。

準結合クエリのサンプルコード

準結合クエリのSELECT句のサンプルコードです。

この場合、TYPEOFは無効になります。

ただし、以下のサンプルコードのように外側のSELECT句でTYPEOFが使用されている場合は、TYPEOFは有効になります。

関数を含むクエリのサンプルコード

SalesforceのTYPEOFは、SELECT句で関数を含むクエリでは使用することができません。

以下のサンプルコードは、TYPEOFの中にFORMAT関数が含まれているので、TYPEOFは無効になります。

ただし、以下のように2つの処理に分ければ、TYPEOFを有効にできます。まず、FORMAT関数を使用せずにIDのリストを取得します。

次に、IDリストに対してFORMAT関数を使用します。

TYPEOFの応用


多態的なリレーションのオブジェクト種別に応じて、処理を分けるサンプルコードです。

このSELECTステートメントでは、What項目で参照するオブジェクト種別によって処理を分岐しています。オブジェクト種別がAccountの場合は、Phone項目とNumberOfEmployees項目を返し、オブジェクト種別がOpportunityの場合は、Amount項目とCloseDate項目を返します。

ELSE句が無いので、オブジェクト種別がAccountでもOpportunityでもない場合、nullを返します。

SalesforceのTYPEOFを活用しよう!


今回は、SalesforceのTYPEOFについて、概要と使い方を説明しました。

TYPEOFは、多態的なリレーションのオブジェクト種別を確認する場合に使用する命令です。オブジェクト種別ごとに処理を分けたり、指定したオブジェクト種別に当てはまらない場合の処理を追加したりすることが可能です。

ぜひこの機会に使用できるように理解しておきましょう。


Salesforceでのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)