Salesforce - Apex - Запрос Счета на основе истории деятельности
-
23-12-2019 - |
Вопрос
Эй, эксперты Salesforce,
У меня есть вопрос о информации о учетной записи запроса эффективно.Я хотел бы запросить счета на основе обновлений в объекте действий.Проблема, которую я получаю, это то, что все аккаунты извлекаются независимо от того, есть ли «полное» активность или нет.Итак, есть ли способ, которым я могу написать этот запрос для получения только учетных записей с ActiveHistory, который имеет статус= «Complete» и Type_For_Reporting= 'qrc'?
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
];
. Решение
У вас есть предложение, где на истории, но вы все еще пропускаете один на уровне аккаунта.
Например, это вернет только учетные записи, которые имеют контакты:
SELECT Id, Name
FROM Account
WHERE Id IN (SELECT AccountId FROM Contact) // try with NOT IN too
.
с деятельностью, которые это сложно, потому что они не любят использовать где таким образом использоваться.
Следующие объекты в данный момент не поддерживаются в подзапрониках:
.
- Деректи о деятельностиГистория
- Вложения
- событие
- eventathendeee
- Примечание
- openactivity
- Теги (AccountTag, contactTag, и все остальные объекты тега)
- задача
Дополнительно тонкая печать внизу > Определение также немного обескураживает.
.
- в главном предложении запроса отношений, вы можете ссылаться только только Одна запись. Например, вы не можете фильтровать во всех записях, где Имя учетной записи начинается с «A»; Вместо этого вы должны ссылаться на один запись учетной записи.
- Вы не можете использовать, где пункты.
- Вы должны указать предел 499 или меньше на количество строк, возвращенных в списке.
- Вы должны отсортировать на Activitydate в порядке возрастания и простоверсифицироваться в порядке убывания; Вы можете отображать Nulls Last. Для Пример: Заказ с помощью Activitydate ASC Nulls Last, LastModiDedDate Desc.
Похоже, вам понадобится несколько запросов. Перейти к задаче (или событию, в зависимости от того, для чего видно на заказ поле), составляйте набор учетных записей, а затем запросить учетные записи?
Или вы можете вручную фильтровать список из своего исходного запроса, копирование учетных записей в списке HELPER:
List<Account> finalResults = new List<Account>();
for(Account a : [SELECT...]){
if(!a.ActivityHistories.isEmpty()){
finalResults.add(a);
}
}
.