Я использую запрос soql для получения задач. Мое требование - получить все задачи, связанные с учетной записью или контактным объектом. Также несколько других полей внутри Account или контактного объекта, в зависимости от того, к чему относится объект. Есть ли простой способ вместо написания нескольких запросов.
Как запросить все задачи, связанные с (whatId) как с аккаунтом или контактом
Ответы (3)
Пожалуйста, предоставьте более конкретную информацию в следующий раз. Вообще говоря, вы можете ссылаться на родительский объект по имени ссылки, за которым следует точка. Вот пример
Select Account.Name, AccountId From Task Where Account.Name = 'John'
Здесь Account - это имя ссылки (из задачи), а AccountId - это поле ссылки.
Ваш вопрос немного неясен. Вы ищете все ЗАДАЧИ, относящиеся к любой УЧЕТНОЙ ЗАПИСИ или КОНТАКТУ или относящиеся к конкретным АККАУНТАМ или КОНТАКТАМ?
Если первое, попробуйте
SELECT Id, Subject, FROM TASK WHERE What.Type = 'Account' OR Who.Type = 'Contact'
в последнем случае используйте синтаксис IN :list
, уже предложенный Моти. What.Type
полезен в отличие от AccountId!=null
, потому что он не будет возвращать ЗАДАЧИ, связанные, например, с ВОЗМОЖНОСТЬЮ (если вы хотите такое поведение, используйте AccountId!=null
и, возможно, отбросьте Who.Type
, если вы связываете все КОНТАКТЫ с ВОЗМОЖНОСТЯМИ, так как это было бы избыточным ).
В любом случае ваша проблема будет извлекать определенные данные из CONTACT whos, поскольку полиморфные поля разрешают доступ только к ограниченному количеству полей. Кажется, сейчас не могу найти этот список. Я не верю, что старый SOQL поддерживает такой синтаксис, чтобы сделать это в одном запросе - вот почему полиморфизм SOQL произвел такой фурор, хотя я могу ошибаться.
Теперь, если у вас есть SOQL TYPEOF доступно для вас, вы сможете заняться чем-нибудь более интересным, например:
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'
Как насчет
выберите {список столбцов] из задачи, в которую входит (выберите идентификатор из учетной записи, где ...) или в качестве родительской (выберите идентификатор из контакта, где ...)
В качестве альтернативы, если вы находитесь внутри Apex и уже имеете идентификаторы контактов или учетных записей в списке (мы будем использовать idList), вы можете использовать:
выберите {список столбцов] из задачи, в которой содержится: idList