У меня проблемы с получением нужных результатов из запроса Salesforce / Apex / SOQL.
Я хочу: Список объектов Контактов, содержащий только контакты, которые являются CampaignMembers набора кампаний; и они должны иметь доступ к данным от этого члена Кампании.
(моей конечной целью является страница VF со списком всех контактов, подключенных к любой из этих кампаний, с сеткой, указывающей их статус для каждой кампании.)
Эти работы:
Campaign[] cams = [SELECT id, name
FROM Campaign
WHERE parentid = '70170000000LRIe'];
System.debug(cams);
// returns ~4 Campaign objects
CampaignMember[] cmembers = [SELECT id, status, contactid, campaignid
FROM CampaignMember
WHERE campaignid in :cams];
System.debug(cmembers);
// returns about 40 CampaignMember objects.
Вот моя проблема:
Contact[] members = [SELECT id, firstname, lastname,
(SELECT id, status, comment__c, campaignid
FROM Contact.CampaignMembers
WHERE campaignid in :cams)
FROM Contact];
System.debug(members);
// contains ALL Contacts in the DB, but I wanted filtered results.
System.debug(members[x].CampaignMembers);
// this is a contact I've verified has a qualifying CampaignMember, but the list is empty.
// UPDATE: CampaignMembers are now being returned, not sure what changed...
Почему никакие объекты CampaignMember не возвращаются из подзапроса?
- Почему список контактов не фильтруется? (ну, очевидно, b / c, в нем нет предложения WHERE, но что предложение WHERE дает то, что я хочу?)
Я знаю, что мог бы сделать это, выполнив запрос CampaignMember сам по себе и пройдя по нему циклически, чтобы подготовить запрос Контакта, но это кажется большой дополнительной обработкой, когда подзапрос должен работать.
Спасибо!
Обновление
Объекты CampaignMember теперь отображаются - как ни странно - я, должно быть, исправил небольшую опечатку, не замечая этого (и да, они возвращают несколько столбцов, и это нормально).
Я все еще не могу понять, как отфильтровать запрос Контакта, хотя ...