如前所述,Task 上的 WhoId 和 WhatId 字段是多态的(这意味着它们可以指向多个目标对象。除非您启用了SOQL 多态功能,正如@eyescream 所描述的那样,您可以查询的唯一“相关”字段是那些在“名称”API 对象上的,但也有例外,这些都记录在本文档中。
示例 1:select Who.FirstName, Who.LastName, Who.Email from Task
如果 Contact/Lead 填充了这些字段,这将返回 FirstName 和 LastName 的数据,但是,正如上面的文档所述,它永远不会返回 Who.Email 的结果,因为该Who
字段的两个可能的目标对象(Contact、铅)是User
对象。
示例 2:select Owner.Name, Owner.Email from Case
如果您将队列与案例对象一起使用,则案例的所有者可以是用户或组(队列是其中的一种)记录。因为Name
和Email
都在Name
对象上,所以上述查询将始终返回 Name 的数据,如果目标对象是 User,它将返回 Owner.Email 的数据。
示例 3:select What.Name, WhatId from Task where What.Type in ('Case','Account','Solution')
这是一个非常有趣的例子,因为 Case 对象的“名称”字段实际上是CaseNumber
,而不是名称 --- 还有一些其他标准对象具有“非标准”(讽刺)名称字段,例如 SolutionTitle,然后还有其他的甚至没有名称字段,例如CampaignMember
. 然而,Salesforce 的多态字段在技术上指向Name
对象的一大优点是上述查询将返回案例的结果!如果案例的 CaseNumber 为 00001234,则上述查询中的 What.Name 将返回 00001234,而对于帐户,它将返回帐户的名称,对于解决方案,它将返回解决方案标题。
在这里观察到您可以通过过滤“类型”字段来限制返回哪些目标对象也很有帮助,“类型”字段是Name
对象上的一个特殊字段。