You need to sign in to do that
Don't have an account?
Olga Kim 5
send emails in batch apex
I have a requirement to create a batch class for Tenant__c object for the Property management app.
The condition is when our Tenant doesn't pay rent by the beginning of the month, we send him/her an email with a reminder.
There is a field called "Status" on Tenant object if the status is not "Paid" then send email.
I wrote a batch class but I am not sure where do I put condition to send emails? In Execute or Finish?
Please Help!
global class TenantLatePaymentTask implements Database.Batchable<SObject> {
global Database.QueryLocator start(Database.BatchableContext BC) {
return Database.getQueryLocator([
SELECT Name, Id, Email_Address__c,description__c from Tenant__c
Where Status__c='Non-Active']); }
global void execute(Database.BatchableContext BC, List<Tenant__c> tenants) {
list<Tenant__c> TenList=new list<Tenant__c>();
for (Tenant__c tenant : tenants) {
tenant.description__c='Last Payment is missing. Please Follow up with the Tenant';
TenList.add(tenant);
}
list<Messaging.SingleEmailMessage> mails = new List<Messaging.SingleEmailMessage>();
for (Tenant__c Ten :TenList ) {
if (Ten.Email_Address__c != null && Ten.Status__c!='Paid') {
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
List<String> sendTo = new List<String>();
sendTo.add(Ten.Email_Address__c);
mail.setToAddresses(sendTo);
mail.setReplyTo('dreamhouse@gmail.com');
mail.setSenderDisplayName('Dreamhouse real estate Co');
List<String> ccTo = new List<String>();
ccTo.add('business@bankofnigeria.com');
mail.setCcAddresses(ccTo);
mail.setSubject('Last Rent Payment is Missing');
String body = 'Dear ' + Ten.First_Name__c + ', ';
body += 'Please, submit your last rent payment';
mail.setHtmlBody(body);
mails.add(mail);
}
}
Messaging.sendEmail(mails);
if(TenList!=null && TenList.size()>0){
database.update(TenList);
}
}global void finish(Database.BatchableContext BC) {
}
}
The condition is when our Tenant doesn't pay rent by the beginning of the month, we send him/her an email with a reminder.
There is a field called "Status" on Tenant object if the status is not "Paid" then send email.
I wrote a batch class but I am not sure where do I put condition to send emails? In Execute or Finish?
Please Help!
global class TenantLatePaymentTask implements Database.Batchable<SObject> {
global Database.QueryLocator start(Database.BatchableContext BC) {
return Database.getQueryLocator([
SELECT Name, Id, Email_Address__c,description__c from Tenant__c
Where Status__c='Non-Active']); }
global void execute(Database.BatchableContext BC, List<Tenant__c> tenants) {
list<Tenant__c> TenList=new list<Tenant__c>();
for (Tenant__c tenant : tenants) {
tenant.description__c='Last Payment is missing. Please Follow up with the Tenant';
TenList.add(tenant);
}
list<Messaging.SingleEmailMessage> mails = new List<Messaging.SingleEmailMessage>();
for (Tenant__c Ten :TenList ) {
if (Ten.Email_Address__c != null && Ten.Status__c!='Paid') {
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
List<String> sendTo = new List<String>();
sendTo.add(Ten.Email_Address__c);
mail.setToAddresses(sendTo);
mail.setReplyTo('dreamhouse@gmail.com');
mail.setSenderDisplayName('Dreamhouse real estate Co');
List<String> ccTo = new List<String>();
ccTo.add('business@bankofnigeria.com');
mail.setCcAddresses(ccTo);
mail.setSubject('Last Rent Payment is Missing');
String body = 'Dear ' + Ten.First_Name__c + ', ';
body += 'Please, submit your last rent payment';
mail.setHtmlBody(body);
mails.add(mail);
}
}
Messaging.sendEmail(mails);
if(TenList!=null && TenList.size()>0){
database.update(TenList);
}
}global void finish(Database.BatchableContext BC) {
}
}
It should be in execute method only.
Thanks,
Maharajan.C
it is my first batch class. does it look correct? I am not sure how to check is it working or not?