如何查询与(whatId)相关的所有任务为Account或Contact

时间:2013-11-05 03:03:01

标签: salesforce apex-code soql apex

我正在使用soql查询来获取任务。我的要求是获得所有相关帐户或联系对象的任务。在Account或联系对象中的其他几个字段,无论对象相关。有一种简单的方法,而不是编写多个查询。

3 个答案:

答案 0 :(得分:2)

请在下次提供更具体的信息。一般来说,您可以通过引用名称后跟一个点来引用父对象。这是一个例子

Select Account.Name, AccountId From Task Where Account.Name = 'John'

此处Account是引用的名称(来自任务),AccountId是引用字段。

答案 1 :(得分:1)

你的问题有点不清楚。您是否正在寻找与任何帐户或联系人相关或与特定帐户或联系人相关的所有任务?

如果是前者,请尝试

    SELECT Id, Subject,
    FROM TASK
    WHERE
        What.Type = 'Account' OR
        Who.Type = 'Contact'

如果是后者,请使用Moti已经建议的IN :list语法。与What.Type相反,AccountId!=null非常有用,因为它不会返回与OPPORTUNITIES相关联的TASKS(如果您想要这种行为,请使用AccountId!=null并删除Who.Type 1}}如果你将所有联系人与OPPORTUNITIES关联起来,因为这将是多余的。)

在任何一种情况下,您的问题都是从CONTACT whos中提取特定数据,因为多态字段只允许访问有限数量的字段。现在似乎无法找到该列表。我不相信旧的SOQL支持在一个查询中执行此操作的语法 - 这就是为什么SOQL多态性如此爆炸 - 尽管我可能是错的。

现在,如果你有SOQL TYPEOF available to you,你应该可以做一些更有趣的事情,如:

    SELECT Id, Subject,
    TYPEOF What
        WHEN Account THEN AccountNumber
    END,
    TYPEOF Who
        WHEN Contact THEN FirstName
    END
    FROM Task
    WHERE
        What.Type = 'Account' OR
        Who.Type = 'Contact'

答案 2 :(得分:0)

怎么样

从任务中选择{列表列表',其中包含parentid(从帐户中选择id ...)或parentid in(从联系人中选择id ...)

或者,如果您在Apex内部且已在列表中拥有联系人或帐户ID(我们将使用idList),您可以使用:

从parentid in:idList

中的任务中选择{column list]