[SalesForce] Call schedulable batch class from trigger instead of any schedule

I have below schedulable batch class. I need to call this from an apex trigger on Compliance_Incidents_abv__c. Can someone let me know how can I do that?

Batch Class:

global class ComplianceIncidents_expireNotify implements Database.Batchable<sObject> {
global Database.QueryLocator start(Database.BatchableContext bc) {
    Date d= Date.today().addDays(-14);
    String soql = 'SELECT Id, Name, Publish_Date_abv__c FROM Compliance_Incident_abv__c WHERE Publish_Date_abv__c >=: d';
    return Database.getQueryLocator(soql);
}

global void execute(Database.BatchableContext bc, List<Compliance_Incident_abv__c > recs) {
    List<Messaging.SingleEmailMessage> mailList = new List<Messaging.SingleEmailMessage>();

     Map<Id,Compliance_Incident_abv__c > OneMap= new Map<Id,Compliance_Incident_abv__c>();
     Map<Id,string> RMMap= new Map<Id,string>();
    for (Compliance_Incident_abv__c myContact : [select ID,ManagerEmail_abv__c,Name,RepEmail_abv__c,Rep_abv__r.Email,Rep_abv__c,Rep_abv__r.Name, Rep_abv__r.ManagerId,Rep_abv__r.Manager.Name,Rep_abv__r.Manager.ManagerID,Rep_abv__r.Manager.Manager.Email from Compliance_Incident_abv__c  where ID in:recs]) {

    OneMap.put(mycontact.id , mycontact);
    RMMap.put(mycontact.id , mycontact.Rep_abv__r.Manager.Manager.Email);
    system.debug('OneMap@'+OneMap);

    }
    for(Compliance_Incident_abv__c mycontact: [SELECT Id, Name, Publish_Date_abv__c FROM Compliance_Incident_abv__c WHERE Id in:recs]) {
        List<String> toAddresses = new List<String>(); 
        List<String> ccTo= new List<String>();           
        Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
        toAddresses.add(OneMap.get(mycontact.id).ManagerEmail_abv__c);
        mail.setToAddresses(toAddresses);
        //ccTo.add(RMMap.get(mycontact.ID));
        ccTo.add(RMMap.get('saikat.neogy@cognizant.com'));
        mail.setCcAddresses(ccTo);
        mail.setSubject('Action Required: REMINDER ABS incidents in iREP due  TODAY');
        String messageBody = '<br><br>Dear '+ OneMap.get(mycontact.id).Rep_abv__r.Manager.Name;
        messageBody +='<br><br> What you need to know:';
        messageBody +='<br>You have pending ABS Incidents assigned to you in iREP that are due today. Per policy, these must be closed within 14 days of publication.';
        messageBody +='<br>What you need to do:';
        messageBody +='<br>•       Review the incidents';
        messageBody +='<br>•       Coach your representative';
        messageBody +='<br>•       Attest to the incident, submit, and sync iREP today ';
        messageBody +='<br>If you need assistance, please call the Field Help Desk at 1-800-344-6776.';

        mail.setHtmlBody(messageBody); 
        mailList.add(mail);          
    } 
    Messaging.sendEmail(mailList);
}

global void finish(Database.BatchableContext bc) {
}
}

Best Answer

Related Topic