У меня есть условие, когда мне нужно получить список контактов на основе многих условий, которые я могу сделать, но теперь мне нужно ограничить количество контактов на учетную запись.

Для нового сценария мне нужно вернуться к внутренним запросам, поэтому в этом случае мне нужно переключиться на внутренние запросы. Теперь, когда я использую внутренние запросы для контактов, размер моего пакета слишком велик, я хочу ограничить количество контактов на учетную запись без использования внутренних запросов.

SOQL без внутреннего запроса:

'Select Id,Name FROM Contacts WHERE '+ where_cond+ '

SOQL с внутренним запросом:

'SELECT Id,(Select Id,Name FROM Contacts WHERE '+ where_cond+ ' LIMIT : numberOfContacts) FROM Account'
-2
sfdc 10 Июл 2019 в 22:08
3
Какой у Вас вопрос?
 – 
Sebastian Kessel
10 Июл 2019 в 22:23

1 ответ

Лучший ответ

Вы не можете изменить свой прямой контактный запрос

Select Id, Name FROM Contacts WHERE '+ where_cond+ '

Для выбора определенного количества контактов для каждой учетной записи. Вместо этого ограничьте внешний запрос фильтрами в учетной записи:

SELECT Id,
       (Select Id,Name FROM Contacts WHERE '+ where_cond+ ' LIMIT : numberOfContacts) 
FROM Account
WHERE <some condition> 

Чтобы уменьшить общий объем данных и общее количество обрабатываемых строк до приемлемого уровня или использовать пакетный класс, ориентированный на учетную запись, работающий с меньшим размером пакета.

В качестве альтернативы можно выполнить постобработку результатов запроса контактов в Apex, чтобы изолировать ограниченную группу контактов для каждой учетной записи. Добавление ORDER BY AccountId, [some other field] может оказаться полезным.

1
David Reed 10 Июл 2019 в 22:55