function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
RajashriRajashri 

VF page design need help

Hi,,
I am trying to design the VF page for below controller but my VF page is giving an error...

Error: Invalid field CampaignMembers for SObject CampaignMember 


Can anyone please help?

Below is my VF page..
<apex:page StandardController="Campaign"  extensions="CampaignMemController">
<apex:form >
        <apex:pageBlock title="Campaign Members Details" mode="maindetail">
                       <apex:pageBlockSection title="Campaign Members"  id="cm3">
                <apex:pageblocktable value="{!CampaignMembers}" var="cm">
                          <apex:column >
                               <apex:pageblocktable value="{!cm.CampaignMembers}" var="cpm">
                                        <apex:column headerValue="Name">
                                 <apex:outputfield value="{!cpm.LeadID}" rendered="{!cpm.LeadID != null}"/>
                                  </apex:column>
                               </apex:pageblocktable>
                </apex:column>
                   <apex:column >
                               <apex:pageblocktable value="{!cm.ActivityHistories}" var="tm">
                                   <apex:column headerValue="Subject">
                                       <apex:outputfield value="{!tm.Subject}"  rendered="{!tm.Subject != null}"/>
                                                                          </apex:column>
 
                               </apex:pageblocktable>
                           </apex:column>
            </apex:pageblocktable>
                         </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:form>
</apex:page>

Controller Code
public with sharing class CampaignMemController {
    public Campaign camp {
        get;
        set;
    }
    public List<Lead> leads {
        get;
        set;
    }   
        
    public List<CampaignMember> campaignMembers {
        get;
        set;
    }           
               
    public CampaignMemController(ApexPages.StandardController controller) {
        this.camp = (Campaign) controller.getRecord();
        this.campaignMembers = [
            select
                CampaignId,
                LeadId,
                Status
            from CampaignMember
            where CampaignId = :this.camp.Id and
                Status != ''
        ];      

        Set<Id> leadIds = new Set<Id>();

        for (CampaignMember member: this.campaignMembers) {
            leadIds.add(member.LeadId);
        }
        leadIds.remove(null);
        this.leads = new List<Lead>();
        if (!leadIds.isEmpty()) {
            this.leads = [
                select Email,
                    FirstName,
                    LastName,
                    MobilePhone,
                    Name,
                    Phone,
                    (
                        select Subject,
                           
                        from ActivityHistories
                        where lastModifiedDate != null and
                            Subject != null
                        order by LastModifiedDate desc
                        limit 1
                    )
                from Lead
                where Id in :leadIds
            ];
        }
    }
}
Jens.BeckerJens.Becker
Hello,

I think the evil is set in the second pageBlockTable, where You want to display a list of campaignmenbers out of a single campaignmember. The "cm" is already a campaignmember. So You are repeating twice over the same ist.
Secondly, I think You should use another name for Your List in the controller, as the StandardController already has a "Standard" List called Campaignmember.
 
<apex:pageblocktable value="{!CampaignMembers}" var="cm">
                          <apex:column >
                               <apex:pageblocktable value="{!cm.CampaignMembers}" var="cpm">

So the 3rd line in this context should be changed.

Jens