【问题标题】:Salesforce - Apex - query accounts based on Activity HistorySalesforce - Apex - 根据活动历史查询帐户
【发布时间】:2014-01-11 07:03:22
【问题描述】:

您好 Salesforce 专家,

我有一个关于高效查询帐户信息的问题。我想根据 activityHistory 对象中的更新查询帐户。我遇到的问题是,无论是否有“完整的”activeHistory,所有帐户都被检索到。那么,有没有办法我可以编写此查询来仅检索具有 status="complete" 和 Type_for_reporting='QRC' 的 activeHistory 帐户?

List<Account> AccountsWithActivityHistories = [    
    SELECT
         Id
        ,Name
        ,( SELECT
                ActivityDate
               ,ActivityType
               ,Type_for_Reporting__c
               ,Description
               ,CreatedBy.Name
               ,Status
               ,WhatId
            FROM ActivityHistories
            WHERE Status ='complete'  and Type_for_Reporting__c = 'QRC'
        )
    FROM Account
];

【问题讨论】:

    标签: salesforce subquery soql apex


    【解决方案1】:

    您在历史记录上有一个 WHERE 子句,但在帐户级别仍然缺少一个。

    例如,这将仅返回具有联系人的帐户:

    SELECT Id, Name
    FROM Account
    WHERE Id IN (SELECT AccountId FROM Contact) // try with NOT IN too
    

    对于活动来说,它更棘手,因为它们不喜欢以这种方式在 WHERE 中使用。

    http://www.salesforce.com/us/developer/docs/officetoolkit/Content/sforce_api_calls_soql_select.htm

    子查询目前不支持以下对象:

    • 活动历史记录
    • 附件
    • 事件
    • 活动参加者
    • 注意
    • OpenActivity
    • 标签(AccountTag、ContactTag 和所有其他标签对象)
    • 任务

    另外,ActivityHistory 定义底部的细则也有点令人沮丧。

    对没有“查看所有数据”权限的用户的以下限制有助于防止出现性能问题:

    • 在关系查询的主子句中,只能引用 一个记录。例如,您不能过滤所有记录 账户名以“A”开头;相反,您必须引用一个 帐户记录。
    • 您不能使用 WHERE 子句。
    • 您必须将列表中返回的行数指定为 499 或更少。
    • 您必须按 ActivityDate 升序排序,LastModifiedDate 降序排序;您可以最后显示空值。为了 例如:ORDER BY ActivityDate ASC NULLS LAST, LastModifiedDate DESC。

    看起来您将需要多个查询。选择任务(或事件,取决于自定义字段对其可见),组成一组 AccountId,然后查询 Accounts?

    或者您可以从原始查询中手动过滤列表,将帐户复制到帮助列表:

    List<Account> finalResults = new List<Account>();
    for(Account a : [SELECT...]){
        if(!a.ActivityHistories.isEmpty()){
            finalResults.add(a);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      相关资源
      最近更新 更多