0

First time posting and I'm quite new to SF. I've ended up on this site a lot when Googling to help me with issues - so thanks!

On my org, we're uploading some opportunities via DataLoader.io that will then send emails out to external contacts.

This was done via process builder - the opportunity has a specific record type and stage for the process to be followed. While it does complete the first action for all the records(which is a simple record update), the 2nd action is to call an invocable method to send the email out. In this case it's only actioning the first 3 records in the upload for the invocable method.

Global class sendInvoiceSurvey {


    @InvocableMethod
    public static void sendInvoiceEmail(List<opportunity>InvoiceContact){

   Messaging.SingleEmailMessage mail =  new Messaging.SingleEmailMessage();
   mail.setTargetObjectId(InvoiceContact[0].Fee_Contact__c);
   mail.setTemplateId('00X24000000F1iy'); 

   mail.setSaveAsActivity(true); 
   mail.setWhatId(InvoiceContact[0].Id);
   mail.setBccSender(true);
   mail.setSenderDisplayName('INSP');

         Messaging.sendEmail(new Messaging.SingleEmailMessage[] { mail });

} }

I'm really lost as to why this is only working the first 3 records. Are there any limits that is preventing other emails going out? Or an issue with my code/process?

Any help would massively appreciated!

3
  • Can you update your code in your question. It seems that all of your lines are commented because there were problems with the line breaks. Commented Jan 23, 2017 at 13:56
  • There's something I don't understand. In your function you receive a list of InvoiceContact. But you only send an email to the first record of your list. Commented Jan 23, 2017 at 14:14
  • Could this be where my issue is? So the process builder should work on creation of a new opportunity record, which I thought would make sense in only sending 1 email.
    – NiamhR
    Commented Jan 23, 2017 at 14:30

1 Answer 1

2

As I said as comment, you don't loop through the list of InvoiceContact.

Here's the solution:

Global class sendInvoiceSurvey {


    @InvocableMethod
    public static void sendInvoiceEmail(List<opportunity>InvoiceContact){

   List<Messaging.SingleEmailMessage> mails = new List<Messaging.SingleEmailMessage>();
   for(Opportunity opp : InvoiceContact){
   Messaging.SingleEmailMessage mail =  new Messaging.SingleEmailMessage();
   mail.setTargetObjectId(opp.Fee_Contact__c);
   mail.setTemplateId('00X24000000F1iy'); 

   mail.setSaveAsActivity(true); 
   mail.setWhatId(opp.Id);
   mail.setBccSender(true);
   mail.setSenderDisplayName('INSP');

   mails.add(mail);
   }

         Messaging.sendEmail(mails);

} }

With this code, you instanciate one email object for each of opportunity received and send all the emails.

2
  • Thanks so much - I can clearly see where I've gone wrong.
    – NiamhR
    Commented Jan 23, 2017 at 14:45
  • You're welcome. Glad I could help. Commented Jan 23, 2017 at 14:48

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .