2021/06/28

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

 
  

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.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 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ステートメントでは、What項目で参照するオブジェクト種別によって処理を分岐しています。オブジェクト種別がAccountの場合は、Phone項目とNumberOfEmployees項目を返し、オブジェクト種別がOpportunityの場合は、Amount項目とCloseDate項目を返します。 ELSE句が無いので、オブジェクト種別がAccountでもOpportunityでもない場合、nullを返します。
SELECT
  TYPEOF What
    WHEN Account THEN Phone, NumberOfEmployees
    WHEN Opportunity THEN Amount, CloseDate
    ELSE Name, Email
  END
FROM Event

SalesforceのTYPEOFを活用しよう!

今回は、SalesforceのTYPEOFについて、概要と使い方を説明しました。 TYPEOFは、多態的なリレーションのオブジェクト種別を確認する場合に使用する命令です。オブジェクト種別ごとに処理を分けたり、指定したオブジェクト種別に当てはまらない場合の処理を追加したりすることが可能です。 ぜひこの機会に使用できるように理解しておきましょう。]]>

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】