SOQL查询遍历Task上的几个级别

时间:2010-08-09 22:31:16

标签: salesforce soql apex-code

我正在尝试使用此查询编写一些顶级代码,而不是在任何地方:

List<Task> tasks = [SELECT id, whatid, who.account.parent.name FROM task WHERE who.account.parent.name LIKE 'Procter%'];

我并不感到惊讶,这不起作用,但似乎无法在任何地方找到解释如何解决这个问题的文档。有谁有想法吗?我正在尝试将所有任务链接到一个联系人,该联系人链接到一个帐户,其帐户的父母帐户为“过滤器和赌博”......

4 个答案:

答案 0 :(得分:4)

看起来在混合字段中“上升”的选项(Lookup转到多个对象,例如WhatId去Account或Opportunity)的选项非常有限。我能够写出“WHERE what.name LIKE'Procter%'但不是”WHERE what.parent.name LIKE'Procter%'“。

顺便说一下,我认为它应该是WhatId而不是WhoId(查看任务的验证规则编辑器,尝试插入字段“Contact / Lead ID”和“Opportunity / Account ID”)。你还会看到你不能在这些字段上“上升”(或者在这个编辑器的情况下 - “右转”),而对于其他一些字段,你可以探索像“CreatedBy.UserRole.Name”这样的关系。 / p>

您可以尝试使用此子查询吗?

[SELECT id, whatid FROM task WHERE whatid IN (SELECT Id FROM Account WHERE Parent.Name LIKE 'United%')]

答案 1 :(得分:1)

WhatId和WhoID是多态字段,因此这些字段不支持遍历多个级别。

答案 2 :(得分:0)

我对分层遍历有类似的要求,在我的情况下,我必须选择与任务相关的潜在客户信息。我必须做的是首先查询任务列表,然后根据这些任务查询潜在客户列表,然后使用包装类将两个列表组合成一个自定义对象,并使用visualforce相应地显示对象。包装类肯定是我对等式的回答,因为事实上你似乎无法使用Who.Id直接查询。

希望这有帮助!

答案 3 :(得分:0)

“任务”上的“帐户ID”字段将自动为“联系人”填充SF。显然,Leads是空白。因此,如果您想获取帐户数据,您可以执行以下操作:

SELECT ID,Who.FirstName,Who.LastName,Account.Parent.Name FROM Task WHERE WhoID ='00Q12SDFUUALDLKJF'

显然,对于潜在客户,Account.Parent.Name为空。