You need to sign in to do that
Don't have an account?
ManoharSF
batchable and schedulable class
Hi there,
Can someone let me know whats missing in this batchable and schedulable class as its not firing off as it suppose to? but it fires off fine if I call execute method directly.
Any help is greatly appreciated.
Thanks
Manohar
Batchable class
global class ISMTrackingBatchProcess implements Database.Batchable < sObject > { Double failedUpdates1{get; set;} Double failedUpdates2{get; set;} global Database.QueryLocator start(Database.BatchableContext ctx) { System.Debug('***** Here it starts *****'); String Query = 'Select Owner_Name__c, Contact_Name__c,CaseNumber, Owner_Email__c, Dummy_ISM_Datetime__c, TFS_ID__c, Id, ISM_Priority__c, ISM_Priority_Set_Critical_High_At__c From Case where Dummy_ISM_Datetime__c <> Null and ISM_Priority_Set_Critical_High_At__c <> Null and TFS_ID__c <> Null and ISM_Priority__c in (\'Critical\',\'High\')' ; return Database.getQueryLocator(Query); } global void execute(Database.BatchableContext ctx, List <sObject> scope) { List<Case> cs= (List<Case>)scope; List<ISM_Communication_Tracker__c> ismcts = new List<ISM_Communication_Tracker__c>(); List<ISM_Communication_Alert__c> ismcas = new List<ISM_Communication_Alert__c>(); boolean missflg =Null ; integer missflg10; if (cs.size()>1) { for(Integer i = 0; i < cs.size(); i++){ if (cs[i].ISM_Priority__c == 'Critical' ) { // Create records in temp table to Send ISM Alert Emails integer dmincr = (Math.Floor(decimal.valueOf(Datetime.now().getTime() - cs[i].Dummy_ISM_Datetime__c.getTime() )) / (1000.0*60.0*60.0)).intValue(); for (integer j = 0; j < dmincr; j++){ //i know this is
task[] t =[select id from task where whatId = :cs[i].id and createddate >= :cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j) and createddate <= :cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j).addMinutes(30) and Subject in ('Call','Email') limit 1]; System.Debug('***** CriticalEmailStartDate *****' +i+'***'+j+'**:'+ cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j) ); System.Debug('***** CriticalEmailEndDate *****' +i+'***'+j+'**:'+ cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j).addMinutes(30) ); if (t.size() == 0 ) { ismcas.add(new ISM_Communication_Alert__c(Unique_index__c =cs[i].CaseNumber +string.valueOf(cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j)) + string.valueOf(cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j).addMinutes(30)),Case__c = cs[i].id, Log_start_at__c = cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j), Log_End_At__c = cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j).addMinutes(30), of_Emails__c = j)); /* List<Messaging.SingleEmailMessage> mailList = new List<Messaging.SingleEmailMessage>(); List<String> toAddresses = new List<String>(); Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); toAddresses.add(cs[i].Owner_Email__c); System.Debug('***** CriticaltoAddresses *****' +i+'***'+j+'**:'+ cs[i].Owner_Email__c ); mail.setToAddresses(toAddresses); mail.setSubject('WARNING communication deadline approaching on ' + cs[i].ISM_Priority__c +'ISM Priority Case ' + cs[i].CaseNumber); String messageBody = '<html><body>Body: Dear ' + cs[i].Owner_Name__c + ',<br><br> Your mandatory customer contact time is approaching for case number '+ cs[i].CaseNumber +', ISM number XXXXX?. <br><br> Please initiate contact with the customer, '+ cs[i].Contact_Name__c + ', regarding an update on the status of their case and document your discussion in Salesforce. <br><br> https://cs18.salesforce.com/' +cs[i].Id; mail.setHtmlBody(messageBody); mailList.add(mail); Messaging.sendEmail(mailList); */ } } // Create ISM Communication Logs integer hrincr = (Math.Floor(decimal.valueOf(Datetime.now().getTime() - cs[i].ISM_Priority_Set_Critical_High_At__c.getTime() )) / (1000.0*60.0*60.0)).intValue(); for (integer j = 0; j < hrincr; j++){ System.Debug('***** CaseId *****' +i+'***'+j+'**:'+ cs[i].id ); System.Debug('***** first hr *****' +i+'***'+j+'**:'+ cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j)); System.Debug('***** second hr *****' +i+'***'+j+1+'**:'+ cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j+1)); task[] t =[select id from task where whatId = :cs[i].id and createddate >= :cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j) and createddate <= :cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j+1) and Subject in ('Call','Email') limit 1]; if (t.size() > 0 ) { missflg = false; missflg10 = 0; } else { missflg = true; missflg10 = 1; } System.Debug('***** missflg *****' +i+'***'+j+'**: '+ missflg ); ismcts.add(new ISM_Communication_Tracker__c(Case__c = cs[i].id, Missed_Communication__c = missflg, Missed_Communication1_0__c = missflg10, Log_Start_At__c = cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j), PrimaryKey__c = string.valueOf(cs[i].id) + string.valueOf(cs[i].ISM_Priority_Set_Critical_High_At__c) + cs[i].ISM_Priority__c + string.valueof(j) , ISM_Priority__c = cs[i].ISM_Priority__c, ISM_Priority_Set_Critical_High_At__c = cs[i].ISM_Priority_Set_Critical_High_At__c, Logged_At__c = cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j+1), of_hrs_since_ISM_Priority_Chnaged__c =Math.Floor(Decimal.valueOf(cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j+1).getTime() - cs[i].ISM_Priority_Set_Critical_High_At__c.getTime() )) / (1000.0*60.0*60.0) )); } } Else if (cs[i].ISM_Priority__c == 'High' ) { // Creates records in temp table to Send ISM Alert Emails integer dmincr = (Math.Floor(decimal.valueOf(Datetime.now().getTime() - cs[i].Dummy_ISM_Datetime__c.getTime() )) / (1000.0*60.0*60.0)).intValue(); for (integer j = 0; j < dmincr; j++){ task[] t =[select id from task where whatId = :cs[i].id and createddate >= :cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j) and createddate <= :cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j).addMinutes(210) and Subject in ('Call','Email') limit 1]; System.Debug('***** CriticalEmailStartDate *****' +i+'***'+j+'**:'+ cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j) ); System.Debug('***** CriticalEmailEndDate *****' +i+'***'+j+'**:'+ cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j).addMinutes(210) ); if (t.size() == 0 ) { ismcas.add(new ISM_Communication_Alert__c(Unique_index__c =cs[i].CaseNumber +string.valueOf(cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j)) + string.valueOf(cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j).addMinutes(210)),Case__c = cs[i].id, Log_start_at__c = cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j), Log_End_At__c = cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j).addMinutes(210), of_Emails__c = j)); /* List<Messaging.SingleEmailMessage> mailList = new List<Messaging.SingleEmailMessage>(); List<String> toAddresses = new List<String>(); Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); toAddresses.add(cs[i].Owner_Email__c); System.Debug('***** HightoAddresses *****' +i+'***'+j+'**:'+ cs[i].Owner_Email__c ); mail.setToAddresses(toAddresses); mail.setSubject('WARNING communication deadline approaching on ' + cs[i].ISM_Priority__c + 'ISM Priority Case ' + cs[i].CaseNumber); String messageBody = '<html><body>Body: Dear ' + cs[i].Owner_Name__c + ',<br><br> Your mandatory customer contact time is approaching for case number '+ cs[i].CaseNumber +', ISM number XXXXX?. <br><br> Please initiate contact with the customer, '+ cs[i].Contact_Name__c + ', regarding an update on the status of their case and document your discussion in Salesforce. <br><br> https://cs18.salesforce.com/' +cs[i].Id; mail.setHtmlBody(messageBody); mailList.add(mail); Messaging.sendEmail(mailList); */ } } //Create ISM Communication Tracking Log integer hrincr = (Math.Floor(decimal.valueOf(Datetime.now().getTime() - cs[i].ISM_Priority_Set_Critical_High_At__c.getTime() )) / (1000.0*60.0*60.0)).intValue(); for (integer j = 3; j < hrincr; j=j+4){ System.Debug('***** CaseId *****' +i+'***'+j+'**:'+ cs[i].id ); System.Debug('***** first hr *****' +i+'***'+j+'**:'+ cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j)); System.Debug('***** second hr *****' +i+'***'+j+1+'**:'+ cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j+1)); task[] t =[select id from task where whatId = :cs[i].id and createddate >= :cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j-3) and createddate <= :cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j+1) and Subject in ('Call','Email') limit 1]; if (t.size() > 0 ) { missflg = false; missflg10 = 0; } else { missflg = true; missflg10 = 1; } System.Debug('***** missflg *****' +i+'***'+j+'**: '+ missflg ); ismcts.add(new ISM_Communication_Tracker__c(Case__c = cs[i].id, Missed_Communication__c = missflg, Missed_Communication1_0__c = missflg10, Log_Start_At__c = cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j-3), PrimaryKey__c = string.valueOf(cs[i].id) + string.valueOf(cs[i].ISM_Priority_Set_Critical_High_At__c) + cs[i].ISM_Priority__c + + string.valueof(j-3) , ISM_Priority__c = cs[i].ISM_Priority__c, ISM_Priority_Set_Critical_High_At__c = cs[i].ISM_Priority_Set_Critical_High_At__c, Logged_At__c = cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j+1), of_hrs_since_ISM_Priority_Chnaged__c =Math.Floor(Decimal.valueOf(cs[i].ISM_Priority_Set_Critical_High_At__c.addhours(j+1).getTime() - cs[i].ISM_Priority_Set_Critical_High_At__c.getTime() )) / (1000.0*60.0*60.0) )); } } } failedUpdates1 = 0; List<Database.UpsertResult> dsrs1 = Database.upsert(ismcts, false); for(Database.UpsertResult dsr1 : dsrs1){ if(!dsr1.isSuccess()){ failedUpdates1++; } } failedUpdates2 = 0; List<Database.UpsertResult> dsrs2 = Database.upsert(ismcas, false); for(Database.UpsertResult dsr2 : dsrs2){ if(!dsr2.isSuccess()){ failedUpdates2++; } } } } global void finish(Database.BatchableContext ctx) { System.debug(LoggingLevel.WARN,'Batch Process Finished'); } }
Schedulable class
global class scheduleISMTrackingBatchProcess implements Schedulable { global void execute(SchedulableContext sc) { ISMTrackingBatchProcess ismt = new ISMTrackingBatchProcess(); ID myBatchJobID = database.executebatch(ismt, 1); } }
and finally invoked from
System.schedule('ScheduleISMTrackingBatchProcess0', '0 0 * * * ? *' , new scheduleISMTrackingBatchProcess());
This is how I tested to see if its working
ISMTrackingBatchProcess myBatch = new ISMTrackingBatchProcess (); myBatch.execute(NULL, [Select Owner_Name__c, Contact_Name__c,CaseNumber, Owner_Email__c, Dummy_ISM_Datetime__c, TFS_ID__c, Id, ISM_Priority__c, ISM_Priority_Set_Critical_High_At__c From Case where Dummy_ISM_Datetime__c <> Null and ISM_Priority_Set_Critical_High_At__c <> Null and TFS_ID__c <> Null and ISM_Priority__c in ('Critical','High')]);
just an update to my earlier post - this is what I see in the log...