سؤال

أواجه مشكلة في الحصول على النتائج التي أريدها من استعلام Salesforce/Apex/SoQL.

أريد: قائمة كائنات الاتصال التي تحتوي على جهات اتصال فقط من هم حملة من مجموعة من الحملات ؛ ويجب أن يكون لديهم بيانات من عضو الحملة هذا يمكن الوصول إليها بسهولة. (هدفي النهائي هو صفحة 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. لماذا لا يتم إرجاع أي كائنات عضو في الحملة من الاستماع الفرعي؟
  2. لماذا لا يتم ترشيح قائمة الاتصال؟ (حسنًا ، من الواضح B/C لا يوجد أي شرط فيه ، ولكن ما الذي يوفر فيه البند ما أريد؟)

أعلم أنه يمكنني القيام بذلك عن طريق إجراء الاستعلام عن أعضاء الحملة من تلقاء نفسه وحلقه من خلاله لإعداد استعلام الاتصال ، لكن هذا يبدو وكأنه الكثير من المعالجة الإضافية عندما يجب أن تعمل الاستعداد الفرعي.

شكرًا!


تحديث

تظهر الآن كائنات عضو الحملة - بشكل غريب - يجب أن أقوم بإصلاح بعض المطبعية الصغيرة دون ملاحظة (ونعم ، إنها تعيد أعمدة متعددة ويبدو أن ذلك على ما يرام).

ما زلت لا أستطيع معرفة كيفية تصفية استعلام الاتصال ، على الرغم من ...

هل كانت مفيدة؟

المحلول

يمكنك استخدام شبه انضمام على جهات الاتصال لتصفية جهات الاتصال إلى المجموعة التي تريدها ، شيء من هذا القبيل

[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];

هناك خيار آخر هو القيادة من Campammmeber بدلاً من ذلك.

[select contact.id, contact.firstname, contact.lastname, 
  status, comment__c, campaignId from campaignMembers 
  where contactId !='' and  campaignId in :cams];
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top