Как запросить все задачи, связанные с (whatId) как с аккаунтом или контактом

Я использую запрос soql для получения задач. Мое требование - получить все задачи, связанные с учетной записью или контактным объектом. Также несколько других полей внутри Account или контактного объекта, в зависимости от того, к чему относится объект. Есть ли простой способ вместо написания нескольких запросов.


person Shebin Mathew    schedule 05.11.2013    source источник


Ответы (3)


Пожалуйста, предоставьте более конкретную информацию в следующий раз. Вообще говоря, вы можете ссылаться на родительский объект по имени ссылки, за которым следует точка. Вот пример

Select Account.Name, AccountId From Task Where Account.Name = 'John'

Здесь Account - это имя ссылки (из задачи), а AccountId - это поле ссылки.

person Moti Korets    schedule 05.11.2013
comment
[Выберите t.subject, t.Description, t.Id, t.WhatId From Task t] - это мой запрос, но мне требуются только те задачи, которые связаны с учетной записью или другим способом, какое поле должно содержать идентификатор учетной записи или контакта - person Shebin Mathew; 06.11.2013
comment
Значит, должно быть Где AccountId! = Null или WhatId! = Null - person Moti Korets; 06.11.2013

Ваш вопрос немного неясен. Вы ищете все ЗАДАЧИ, относящиеся к любой УЧЕТНОЙ ЗАПИСИ или КОНТАКТУ или относящиеся к конкретным АККАУНТАМ или КОНТАКТАМ?

Если первое, попробуйте

    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'
person offbyone    schedule 06.11.2013

Как насчет

выберите {список столбцов] из задачи, в которую входит (выберите идентификатор из учетной записи, где ...) или в качестве родительской (выберите идентификатор из контакта, где ...)

В качестве альтернативы, если вы находитесь внутри Apex и уже имеете идентификаторы контактов или учетных записей в списке (мы будем использовать idList), вы можете использовать:

выберите {список столбцов] из задачи, в которой содержится: idList

person tggagne    schedule 06.11.2013
comment
Извините, я не могу использовать учетные записи или идентификаторы контактов для фильтрации запроса. Мне просто нужны все задачи, в которых поле содержит идентификаторы учетной записи или контакта. Простые задачи, относящиеся к объекту Account или Contact - person Shebin Mathew; 06.11.2013