如何使用SOQL从Task对象记录中获取电子邮件

时间:2013-02-04 18:07:30

标签: salesforce soql

我正在尝试使用SOQL从Task对象获取Contact / Lead电子邮件(我在PHP中创建一个接口以备份具有特定主题的消息)。这是我现在的询问:

SELECT Subject,Who.FirstName,Who.LastName,Who.Email,Who.Phone,Description FROM Task

这有效/不会产生错误并给我结果,但Who.Email总是空的(同时,Who.Phone也是如此,但这对此并不重要)。如果我尝试使用Email,我会收到该字段不存在的错误,这很奇怪,因为Email在任务字段下作为标准字段。

我也尝试了几次谷歌搜索,没有找到任何帮助。

4 个答案:

答案 0 :(得分:2)

因为Task的WhoId和WhatId字段是多态的(即可以指向许多不同类型的对象),所以不能像通常相关的对象一样通过它们查询关系。相反,您必须执行2次SOQL查询,第一次获取任务信息,第二次获取Who指向的联系人或潜在客户的信息。

答案 1 :(得分:2)

要求Salesforce支持人员在您的组织中启用“Polymorphic SOQL”,然后您就可以确定它是Lead还是Contact。它目前在开发者预览版中,但它非常整洁。以下是示例用法:

http://blogs.developerforce.com/tech-pubs/2012/09/soql-polymorphism-or-how-i-learned-to-love-the-polymorphic-relationship.html

或至少在代码中留下“TODO:重写此”评论;)

答案 2 :(得分:2)

如前所述,Task上的WhoId和WhatId字段是多态的(意味着它们可以指向多个目标对象。除非启用了SOQL Polymorphism功能,否则正如@eyescream所描述的那样,唯一的“相关”字段您可以查询的是'Name' API object上的那些,但有一些例外情况,这些情况在本文档中有记录。

示例1:select Who.FirstName, Who.LastName, Who.Email from Task

如果Contact / Lead填充了这些字段,这将返回FirstName和LastName的数据,但是,正如上面的文档所述,它将永远不会返回Who.Email的结果,因为{两个可能的目标对象都没有{1}}字段(联系人,潜在客户)是Who对象。

示例2:User

如果您正在使用带有Case对象的队列,则Case的所有者可以是用户或组(其中Queue是一种类型)记录。由于select Owner.Name, Owner.Email from CaseName都在Email对象上,因此上述查询将始终返回Name的数据,如果目标对象是User,则它将返回Owner.Email的数据。

示例3:Name

这是一个非常有趣的例子,因为Case对象的“Name”字段实际上是select What.Name, WhatId from Task where What.Type in ('Case','Account','Solution'),而不是Name ---还有一些其他标准对象带有“非标准”(具有讽刺意味)的Name字段,例如: SolutionTitle,然后还有其他甚至没有名称字段的人,比如CaseNumber。但是,具有多态字段的Salesforce在技术上指向CampaignMember对象的一个​​好处是上面的查询将返回Cases的结果!如果Case的CaseNumber是00001234,则上述查询中的What.Name将返回00001234,而对于Account,它将返回Account的名称,对于Solution,它将返回SolutionTitle。

在此处观察,您可以通过过滤“类型”字段来限制返回哪些目标对象,这是Name对象上的特殊字段。

答案 3 :(得分:0)

在Console中尝试获取任务/事件的值

  

列表e1 =新列表(); e1 = [选择Id,whoId from event   WHERE id =' 00U9xxxxxxxxxxx']; System.debug(' @@@@@&#39 + E1);

     

设置whoId = new Set(); for(event e2:e1){   whoId.add(e2.whoId); } list c = [选择姓名,电话,电子邮件来自   联系哪里Id IN:whoId]; System.debug(' @@@@@&#39 + C);

---------------- END -------------

由于