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 

expecting right curly bracket, found 'for'

Hi,
I am new to Apex..I am trying to write the below controller code but i am getting an error that..expecting right curly bracket, found 'for' 

Can anyone please help?

public with sharing class CampaignMemController {

    public Campaign camp {get; set; }
    list<contact> con = new list<contact>();
    public CampaignMemController(ApexPages.StandardController controller) {
     camp = (Campaign)controller.getRecord();
    }
    for(contact con:[select name,id,(select id from CampaignMembers) from contact]){
     List<CampaignMember > camList = New List<CampaignMember>();
     for(CampaignMember camp: con.CampaignMembers){
     camList.add(camp);
}
System.debug('All the campaignmemebers under contact '+con.name+'are'+camList );
}
}
NekosanNekosan
You need to remove } from above For loop. 

public with sharing class CampaignMemController {

    public Campaign camp {get; set; }
    list<contact> con = new list<contact>();
    
    public CampaignMemController(ApexPages.StandardController controller) {
        camp = (Campaign)controller.getRecord();
    
        for(contact con:[select name,id,(select id from CampaignMembers) from contact]){
                 List<CampaignMember > camList = New List<CampaignMember>();
                 for(CampaignMember camp: con.CampaignMembers){
                     camList.add(camp);
                 }
                System.debug('All the campaignmemebers under contact '+con.name+'are'+camList );
        }
    }
}
PratikPratik (Salesforce Developers) 
Hi Rajashri,

Try This:

public with sharing class CampaignMemController {

    public Campaign camp {get; set; }
    list<contact> con = new list<contact>();
    public CampaignMemController(ApexPages.StandardController controller) {
     camp  = (Campaign)controller.getRecord()
  
   for(contact con:[select name,id,(select id from CampaignMembers) from contact]){
     List<CampaignMember > camList = New List<CampaignMember>();
     for(CampaignMember camp: con.CampaignMembers){
     camList.add(camp);
    }
System.debug('All the campaignmemebers under contact '+con.name+'are'+camList );
        }  
    } 

}    

Thanks,
Pratik
RajashriRajashri
Thanks both. I am getting an error that..


CampaignMemController Compile Error: Loop variable must be an SObject or list of CampaignMember at line 11..

Line 11 is my for loop line!

Any help
Naveen Rahul 3Naveen Rahul 3

try this

 

public with sharing class CampaignMemController {

    public Campaign camp {get; set; }
    list<contact> con = new list<contact>();
    public CampaignMemController(ApexPages.StandardController controller) {
     //camp = (Campaign)controller.getRecord() no colon here

     camp  = (Campaign)controller.getRecord();
  
   for(Contact con:[select name,id,(select id from CampaignMembers) from Contact]){
     List<CampaignMember > camList = New List<CampaignMember>();
     for(CampaignMember camp: con.CampaignMembers){
     camList.add(camp);
    }
System.debug('All the campaignmemebers under contact '+con.name+'are'+camList );
        }  
    } 

}

no error now.code credit goes to Pratik  
RajashriRajashri
Hi,

I tried the above code but still i am getting below error..

Loop variable must be an SObject or list of CampaignMember at line 12 olumn 25

Thanks..
NekosanNekosan
What is   con.CampaignMembers? 
In below line 
 for(CampaignMember camp: con.CampaignMembers)
con.campainmembers should be list.
RajashriRajashri
Hi Neokan,

Basically i want to display the Contact having relationship with the Campaign member..

How to change the loop there?

 
NekosanNekosan
What is a relationship between Contact and Campaign members? One contact will have many campaign members? 
PratikPratik (Salesforce Developers) 
Hi Nekosan,

The relationship is:
A contact can be added as a Campaignmember on many campaigns.
So for a single Contact there can be multiple Campaignmembers.

Thanks,
Pratik
NekosanNekosan
I am assuming Campaignmembers will have reference field to contact. Below is the code which will give you map where key is contact and value is list of Campaignmembers.

Map <String,list<CampaignMembers>> contactCampaignMemberMap = new Map <String,list<CampaignMembers>>();
for(CampaignMembers mem:[select id,contact from CampaignMembers]{
    if(contactCampaignMemberMap.containskey(mem.contact))
        contactCampaignMemberMap.put(mem.contact,new List<campaignmembers>());
    contactCampaignMemberMap.get(mem.contact).add(mem);
}