Salesforce-Apex-基于活动历史记录查询帐户
嘿,销售人员专家们 我有一个关于如何高效查询帐户信息的问题。我想根据activityHistory对象中的更新查询帐户。我遇到的问题是,无论是否有完整的activeHistory,都会检索所有帐户。那么,有没有一种方法可以编写此查询,以便仅检索具有activeHistory且状态为complete的帐户,并键入_for_reporting='QRC'Salesforce-Apex-基于活动历史记录查询帐户,salesforce,subquery,soql,apex,Salesforce,Subquery,Soql,Apex,嘿,销售人员专家们 我有一个关于如何高效查询帐户信息的问题。我想根据activityHistory对象中的更新查询帐户。我遇到的问题是,无论是否有完整的activeHistory,都会检索所有帐户。那么,有没有一种方法可以编写此查询,以便仅检索具有activeHistory且状态为complete的帐户,并键入_for_reporting='QRC' List<Account> AccountsWithActivityHistories = [ SELECT
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
];
您在历史记录上有一个WHERE子句,但在帐户级别上仍然缺少一个WHERE子句 例如,这将只返回具有联系人的帐户:
SELECT Id, Name
FROM Account
WHERE Id IN (SELECT AccountId FROM Contact) // try with NOT IN too
对于活动来说,这更为棘手,因为他们不喜欢以这种方式被用在任何地方
子查询中当前不支持以下对象:
活动历史
附件
事件
活动参与者
笔记
开放活动
标记AccountTag、ContactTag和所有其他标记对象
任务
此外,定义底部的细字也有点令人沮丧
对没有“查看所有数据”权限的用户的以下限制有助于防止性能问题:
在关系查询的main子句中,只能引用
一张唱片。例如,您不能筛选
账户名称以“A”开头;相反,您必须引用单个
账户记录。
不能使用WHERE子句。
必须为列表中返回的行数指定499或更少的限制。
您必须在ActivityDate上按升序排序,在LastModifiedDate上按降序排序;最后可以显示空值。对于
示例:ORDER BY ActivityDate ASC最后为空,LastModifiedDate DESC。
看起来您需要多个查询。转到任务或事件(取决于哪个自定义字段可见),组成一组AccountID,然后查询帐户
或者,您可以手动筛选原始查询中的列表,将帐户复制到帮助者列表:
List<Account> finalResults = new List<Account>();
for(Account a : [SELECT...]){
if(!a.ActivityHistories.isEmpty()){
finalResults.add(a);
}
}