Salesforce/Apex/SOQL クエリから必要な結果を取得できません。
欲しいもの:一連のキャンペーンの CampaignMembers である連絡先のみを含む Contact オブジェクトのリスト。また、そのキャンペーン メンバーのデータに簡単にアクセスできる必要があります。(私の最終的な目標は、これらのキャンペーンのいずれかに接続されているすべての連絡先のリストと、各キャンペーンのステータスを示すグリッドを含む 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 オブジェクトが返されないのはなぜですか?- 連絡先リストがフィルター処理されないのはなぜですか? (まあ、明らかに WHERE 句はありませんが、どの WHERE 句が私が望むものを提供しますか?)
CampaignMember クエリを単独で実行し、それをループして Contact クエリを準備することでこれを実行できることはわかっていますが、サブクエリが機能する必要がある場合、それは多くの余分な処理のように思えます。
ありがとう!
アップデート
CampaignMember オブジェクトが表示されるようになりました - 奇妙なことに - 私は気づかずにいくつかの小さなタイプミスを修正したに違いありません (はい、それらは複数の列を返しているので問題ないようです)。
ただし、連絡先クエリをフィルタリングする方法はまだわかりません...