前述のように、タスクのWhoIdフィールドとWhatIdフィールドはポリモーフィックです(つまり、複数のターゲットオブジェクトを指すことができます。@ eyescreamで説明されているように、SOQLポリモーフィズム機能を有効にしていない限り、クエリできる「関連」フィールドは次のとおりです。 'Name' APIオブジェクトにあるものですが、このドキュメントに記載されている例外があります。
例1:select Who.FirstName, Who.LastName, Who.Email from Task
Contact / Leadにこれらのフィールドが入力されている場合、これはFirstNameとLastNameのデータを返しますが、上記のドキュメントにあるように、Who
フィールドの2つの可能なターゲットオブジェクト(Contact、リード)がUser
オブジェクトです。
例2:select Owner.Name, Owner.Email from Case
Caseオブジェクトでキューを使用している場合、Caseの所有者はユーザーまたはグループ(キューはタイプ)レコードのいずれかです。Name
とEmail
は両方ともName
オブジェクト上にあるため、上記のクエリは常にNameのデータを返し、ターゲットオブジェクトがUserの場合は、Owner.Emailのデータを返します。
例3:select What.Name, WhatId from Task where What.Type in ('Case','Account','Solution')
これは非常に興味深い例です。Caseオブジェクトの「Name」フィールドは実際CaseNumber
にはNameではなく、「non-standard」(ironic)Nameフィールドを持つ他の標準オブジェクトがいくつかあります(SolutionTitleなど)。のような名前フィールドすらありませんCampaignMember
。ただし、ポリモーフィックフィールドが技術的にName
オブジェクトを指しているSalesforceの優れた点の1つは、上記のクエリがCasesの結果を返すことです。ケースのCaseNumberが00001234の場合、上記のクエリのWhat.Nameは00001234を返しますが、アカウントの場合はアカウントの名前を返し、ソリューションの場合はSolutionTitleを返します。
ここで、オブジェクトの特別なフィールドである「タイプ」フィールドでフィルタリングすることにより、返されるターゲットオブジェクトを制限できることにも注意してくださいName
。