9

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...

  1. サブクエリから CampaignMember オブジェクトが返されないのはなぜですか?
  2. 連絡先リストがフィルター処理されないのはなぜですか? (まあ、明らかに WHERE 句はありませんが、どの WHERE 句が私が望むものを提供しますか?)

CampaignMember クエリを単独で実行し、それをループして Contact クエリを準備することでこれを実行できることはわかっていますが、サブクエリが機能する必要がある場合、それは多くの余分な処理のように思えます。

ありがとう!


アップデート

CampaignMember オブジェクトが表示されるようになりました - 奇妙なことに - 私は気づかずにいくつかの小さなタイプミスを修正したに違いありません (はい、それらは複数の列を返しているので問題ないようです)。

ただし、連絡先クエリをフィルタリングする方法はまだわかりません...

4

1 に答える 1

20

連絡先に準結合を使用して、連絡先を必要なセットにフィルター処理することができます。

[select id, firstname, lastname, 
     (select id, status, comment__c, campaignid from CampaignMembers)
     from contact where id in 
          (select contactId from campaignMember where campaignId in :cams];

別のオプションは、代わりに CampaignMmeber からドライブすることです。

[select contact.id, contact.firstname, contact.lastname, 
  status, comment__c, campaignId from campaignMembers 
  where contactId !='' and  campaignId in :cams];
于 2010-10-26T21:40:34.930 に答える