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
Chris LagardeChris Lagarde 

Visualforce error message with Apex class - Need assistance in diagnosing

I'm a Salesforce admin who is unfamiliar with diagnosing a Visualforce error. It was working until a few days ago. The user creates a campaign and copies the campaign ID. The user then goes to the Visualforce page and pastes the campaign id. Additionally, the user copies and pastes an email template id and clicks the Send button. 

System.ListException Visualforce error pops up. Below is the jpg of the Visualforce page, the VF error, and the apex class it's referencing. Any ideas on how to solve this?

User-added image

 

System.ListException: List index out of bounds: 0
Error is in expression '{!send}' in component <apex:commandButton> in page email_template_example: Class.EmailTemplateSelector.send: line 22, column 1
Class.EmailTemplateSelector.send: line 22, column 1
 


 

1	public class EmailTemplateSelector {
2	
3	    public string CampaiId{public get; public set;} 
4	    public string TemplateId{public get; public set;}      
5	    
6	 public PageReference send()
7	{
8	List<CampaignMember> cmp = [SELECT Full_Campaign_Member_ID__c, Contact_18_Digit_ID__c FROM CampaignMember where CampaignId in (SELECT Id FROM Campaign where Id = :CampaiId)];
9	Messaging.SingleEmailMessage[] messages =new List<Messaging.SingleEmailMessage>();
10	        String[] sendBccAdd = new String[]{'dlewis@austinpartners.org'};
11	
12	for(CampaignMember A1 : cmp)
13	{
14	Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
15	message.setTemplateId(TemplateId);
16	message.setTargetObjectId(A1.Contact_18_Digit_ID__c);
17	message.setBccAddresses(sendBccAdd);
18	messages.add(message);
19	}
20	
21	Messaging.SendEmailResult[] results = Messaging.sendEmail(messages);
22	if (results[0].success) {
23	  System.debug('The email was sent successfully.');
24	} else {
25	    System.debug('The email failed to send: '+ results[0].errors[0].message);
26	}
27	return null;
28	}
29	}
 


 

v varaprasadv varaprasad
Hi Chris.

if (results[0].success)  here we are getting null values thats why we are getting error : List index out of bounds: 0

to avoid this 
 
if(results != null){
 for (Messaging.SendEmailResult res : results) {
            if (res.isSuccess()) {
                System.debug('Email sent successfully');
            }
            else {
                sendResult = false;
                System.debug('The following errors occurred: ' + res.getErrors());                 
            }
​}

Hope this helps you!


Thanks
Varaprasad
@For Support: varaprasad4sfdc@gmail.com
 
Chris LagardeChris Lagarde

Hi Varaprasad,

Should I replace lines 22 -29 with your recommended code? 

Chris

v varaprasadv varaprasad
Yes 22-28.
 
Chris LagardeChris Lagarde

Where should I paste your code? Thanks. 

public class EmailTemplateSelector {

    public string CampaiId{public get; public set;} 
    public string TemplateId{public get; public set;}      
    
 public PageReference send()
{
List<CampaignMember> cmp = [SELECT Full_Campaign_Member_ID__c, Contact_18_Digit_ID__c FROM CampaignMember where CampaignId in (SELECT Id FROM Campaign where Id = :CampaiId)];
Messaging.SingleEmailMessage[] messages =new List<Messaging.SingleEmailMessage>();
        String[] sendBccAdd = new String[]{'xxxxx@xxxxxx.org'};

for(CampaignMember A1 : cmp)
{
Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
message.setTemplateId(TemplateId);
message.setTargetObjectId(A1.Contact_18_Digit_ID__c);
message.setBccAddresses(sendBccAdd);
messages.add(message);
}

Messaging.SendEmailResult[] results = Messaging.sendEmail(messages);
if (results[0].success) {
  System.debug('The email was sent successfully.');
} else {
    System.debug('The email failed to send: '+ results[0].errors[0].message);
}
return null;
}
}
Chris LagardeChris Lagarde
Just missed your reply. Let me try. 
 
Chris LagardeChris Lagarde
Here's the edited code...
public class EmailTemplateSelector {

    public string CampaiId{public get; public set;} 
    public string TemplateId{public get; public set;}      
    
 public PageReference send()
{
List<CampaignMember> cmp = [SELECT Full_Campaign_Member_ID__c, Contact_18_Digit_ID__c FROM CampaignMember where CampaignId in (SELECT Id FROM Campaign where Id = :CampaiId)];
Messaging.SingleEmailMessage[] messages =new List<Messaging.SingleEmailMessage>();
        String[] sendBccAdd = new String[]{'xxxxxx@xxxxxxx.org'};

for(CampaignMember A1 : cmp)
{
Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
message.setTemplateId(TemplateId);
message.setTargetObjectId(A1.Contact_18_Digit_ID__c);
message.setBccAddresses(sendBccAdd);
messages.add(message);
}

Messaging.SendEmailResult[] results = Messaging.sendEmail(messages);
if(results != null){
 for (Messaging.SendEmailResult res : results) {
            if (res.isSuccess()) {
                System.debug('Email sent successfully');
            }
            else {
                sendResult = false;
                System.debug('The following errors occurred: ' + res.getErrors());                 
            }
​}
}

When I try to save the code, I get the following error message:

Error: Compile Error: Invalid identifier '​'. Apex identifiers must start with an ASCII letter (a-z or A-Z) followed by any number of ASCII letters (a-z or A-Z), digits (0 - 9), '$', '_'. at line 31 column 1
v varaprasadv varaprasad
Sorry 22 to 26...
Chris LagardeChris Lagarde
Would you be kind enough to paste the entire code as you recommend? I keep getting the same compile error: Invalid identifier. 
v varaprasadv varaprasad
public class EmailTemplateSelector {

    public string CampaiId{public get; public set;} 
    public string TemplateId{public get; public set;}      
    
 public PageReference send()
{
List<CampaignMember> cmp = [SELECT Full_Campaign_Member_ID__c, Contact_18_Digit_ID__c FROM CampaignMember where CampaignId in (SELECT Id FROM Campaign where Id = :CampaiId)];
Messaging.SingleEmailMessage[] messages =new List<Messaging.SingleEmailMessage>();
        String[] sendBccAdd = new String[]{'xxxxxx@xxxxxxx.org'};

for(CampaignMember A1 : cmp)
{
Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
message.setTemplateId(TemplateId);
message.setTargetObjectId(A1.Contact_18_Digit_ID__c);
message.setBccAddresses(sendBccAdd);
messages.add(message);
}

Messaging.SendEmailResult[] results = Messaging.sendEmail(messages);
if(results != null){
 for (Messaging.SendEmailResult res : results) {
            if (res.isSuccess()) {
                System.debug('Email sent successfully');
            }
            else {
                sendResult = false;
                System.debug('The following errors occurred: ' + res.getErrors());                 
            }
​}
}
Return null;
}

 
Chris LagardeChris Lagarde

Unfortunately, same compile error

Error: Compile Error: Invalid identifier '​'. Apex identifiers must start with an ASCII letter (a-z or A-Z) followed by any number of ASCII letters (a-z or A-Z), digits (0 - 9), '$', '_'. at line 31 column 1
v varaprasadv varaprasad
Remove send result = falseine line 28 and save.
v varaprasadv varaprasad
Hi Chris,

Your issue is resolved or not.If the issue is resolved and above my solution helps you.please mark it as the best answer.
If any issues are there please let me know.

   Thanks
    Varaprasad
    For Support: varaprasad4sfdc@gmail.com
Chris LagardeChris Lagarde
No luck. Same error message.