SalesforceのTYPEOFとは?概要や使い方をご紹介
IT・技術関連
更新日:2024.09.05


TYPEOFとは?
SalesforceのTYPEOFとは、オブジェクト種別を確認するために使用する命令です。
TYPEOFは、SalesforceのSOQLクエリのSELECTステートメントにて使用することができ、多態的なリレーションが含まれているオブジェクト種別を確認することができます。
TYPEOFは、APIバージョンの46.0以降または、SOQLのPolymorphism機能の開発者プレビューで使用可能です。
TYPEOFには、多態的なランタイム型に一致する選択項目を指定します。複数の多態的な項目を確認する場合は、一つのSELECTステートメントに複数のTYPEOFを使用します。
サンプルコード
以下は、SalesforceのTYPEOFのサンプルコードです。 TYPEOFは、オブジェクト種別ごとに1つのWHEN句を必要な分だけ指定することができます。ELSE句は、多態的なリレーション項目のオブジェクト種別が、WHEN句で指定したオブジェクト種別と一致しない場合の処理です。ELSE句は省略することも可能です。SELECT [fieldList,]
[TYPEOF typeOfField
{WHEN whenObjectType THEN whenFieldList}[...]
[ELSE elseFieldList]
END][...]
FROM objectType
TYPEOFの構文
サンプルコードに出てきたSalesforceのTYPEOF固有の構文は、次のものがあります。 1.fieldList 2.typeOfField 3.whenObjectType 4.whenFieldList 5.elseFieldList 6.objectTypefieldList
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 Name FROM Account
WHERE CreatedById IN
(
SELECT
TYPEOF Owner
WHEN User THEN Id
WHEN Group THEN CreatedById
END
FROM CASE
)
ただし、以下のサンプルコードのように外側のSELECT句でTYPEOFが使用されている場合は、TYPEOFは有効になります。
SELECT
TYPEOF What
WHEN Account THEN Phone
ELSE Name
END
FROM Event
WHERE CreatedById IN
(
SELECT CreatedById
FROM Case
)
関数を含むクエリのサンプルコード
SalesforceのTYPEOFは、SELECT句で関数を含むクエリでは使用することができません。 以下のサンプルコードは、TYPEOFの中にFORMAT関数が含まれているので、TYPEOFは無効になります。SELECT
TYPEOF What
WHEN Account THEN Id, FORMAT(LastModifiedDate) LastModifiedDate__f
WHEN Oppty THEN Id
END
FROM Task
ただし、以下のように2つの処理に分ければ、TYPEOFを有効にできます。まず、FORMAT関数を使用せずにIDのリストを取得します。
SELECT
TYPEOF What
WHEN Account THEN Id, LastModifiedDate
WHEN Opportunity THEN Id
END
FROM Task
次に、IDリストに対してFORMAT関数を使用します。
SELECT
FORMAT(LastModifiedDate) LastModifiedDate__f
FROM Account
WHERE Id in RetrievedIdList
TYPEOFの応用

SELECT
TYPEOF What
WHEN Account THEN Phone, NumberOfEmployees
WHEN Opportunity THEN Amount, CloseDate
ELSE Name, Email
END
FROM Event
SalesforceのTYPEOFを活用しよう!

この記事の監修者・著者

- AWSパートナー/Salesforce認定コンサルティングパートナー 認定企業
-
ITエンジニア派遣サービス事業を行っています。AWSやSalesforceなど専門領域に特化したITエンジニアが4,715名在籍し、常時100名以上のITエンジニアの即日派遣が可能です。
・2021年:AWS Japan Certification Award 2020 ライジングスター of the Year 受賞
・2022年3月:人材サービス型 AWSパートナー認定
・AWS認定資格保有者数1,154名(2024年6月現在)
・Salesforce認定コンサルティングパートナー
・Salesforce認定資格者276名在籍(2024年5月現在)
・LPIC+CCNA 認定資格者:472 名(2024年6月時点)
最新の投稿
- 2024-12-27営業インタビュー情報共有の活性化の中心に。SP企画部の新たな取り組み
- 2024-07-01営業インタビュー最短で当日にご提案可能。 OPE営業の対応が早い3つの理由
- 2024-07-01営業インタビュー研修見学ツアーが高評価!「お客様のOPEに対する期待を高め、継続に貢献できればと思います。」
- 2024-07-01営業インタビュー信頼関係を構築し、エンジニアの長期就業へ
ITエンジニアの派遣を利用したい企業様へ

- 求人・転職サイトや自社採用サイトを使っているが、自社に合ったITエンジニアが応募してこない…
- すぐに採用したいが、応募がぜんぜん集まらない
こんな悩みをお持ちの採用・人事担当者の方は、
オープンアップITエンジニアをご検討ください!
オープンアップITエンジニアをご検討ください!
当社のITエンジニア派遣サービスは
- 派遣スピードが速い!(最短即日)
- 4,500名のエンジニアから貴社にマッチした人材を派遣
- 正社員雇用も可能
こんな特長があり、貴社の事業やプロジェクトに合った最適なITエンジニアを派遣可能です。
まずは下記ボタンから無料でご相談ください。