我无法从 Salesforce/Apex/SOQL 查询中获取我想要的结果。
我想要:一个联系人对象列表,其中仅包含作为一组活动的 CampaignMembers 的联系人;他们应该可以轻松访问来自该 Campaign 成员的数据。(我的最终目标是一个 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 对象现在出现了 - 奇怪的是 - 我必须在没有注意到的情况下修复了一些小错字(是的,它们返回了多个列,这似乎很好)。
不过,我仍然不知道如何过滤联系人查询......