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
ManoharSFManoharSF 

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')]);

 

ManoharSFManoharSF

just an update to my earlier post -  this is what I see in the log...

28.0 APEX_CODE,FINEST;APEX_PROFILING,FINEST;DB,FINEST;SYSTEM,DEBUG
04:30:00.023 (23535000)|EXECUTION_STARTED
04:30:00.023 (23598000)|CODE_UNIT_STARTED|[EXTERNAL]|01p1100000000ZM|ISMTrackingBatchProcess
04:30:00.032 (32775000)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:12
04:30:00.044 (44214000)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:12
04:30:00.044 (44243000)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:684
04:30:00.044 (44260000)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:45
04:30:00.044 (44302000)|METHOD_ENTRY|[1]|01p1100000000ZM|ISMTrackingBatchProcess.ISMTrackingBatchProcess()
04:30:00.044 (44320000)|STATEMENT_EXECUTE|[1]
04:30:00.044 (44337000)|STATEMENT_EXECUTE|[1]
04:30:00.044 (44360000)|METHOD_EXIT|[1]|ISMTrackingBatchProcess
04:30:00.044 (44373000)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:12
04:30:00.044 (44382000)|HEAP_ALLOCATE|[EXTERNAL]|Bytes:12
04:30:00.044 (44397000)|VARIABLE_SCOPE_BEGIN|[6]|this|ISMTrackingBatchProcess|true|false
04:30:00.044 (44456000)|VARIABLE_ASSIGNMENT|[6]|this|{}|0x7b6f9ec9
04:30:00.044 (44471000)|VARIABLE_SCOPE_BEGIN|[6]|ctx|Database.BatchableContext|true|false
04:30:00.044 (44605000)|VARIABLE_ASSIGNMENT|[6]|ctx|{"jobId":"70711000000Cp3oAAC"}|0x5d21dd6e
04:30:00.044 (44630000)|STATEMENT_EXECUTE|[7]
04:30:00.044 (44638000)|STATEMENT_EXECUTE|[8]
04:30:00.044 (44729000)|LIMIT_USAGE|[8]|SCRIPT_STATEMENTS|1|1000000
04:30:00.044 (44747000)|HEAP_ALLOCATE|[8]|Bytes:26
04:30:00.044 (44925000)|SYSTEM_METHOD_ENTRY|[8]|System.debug(ANY)
04:30:00.044 (44972000)|USER_DEBUG|[8]|DEBUG|***** Here it starts *****
04:30:00.044 (44986000)|SYSTEM_METHOD_EXIT|[8]|System.debug(ANY)
04:30:00.044 (44996000)|STATEMENT_EXECUTE|[9]
04:30:00.045 (45002000)|LIMIT_USAGE|[9]|SCRIPT_STATEMENTS|2|1000000
04:30:00.045 (45012000)|HEAP_ALLOCATE|[9]|Bytes:318
04:30:00.045 (45035000)|VARIABLE_SCOPE_BEGIN|[9]|Query|String|false|false
04:30:00.045 (45059000)|VARIABLE_ASSIGNMENT|[9]|Query|"Select Owner_Name__c (298 more) ..."
04:30:00.045 (45069000)|STATEMENT_EXECUTE|[11]
04:30:00.045 (45075000)|LIMIT_USAGE|[11]|SCRIPT_STATEMENTS|3|1000000
04:30:00.045 (45100000)|SYSTEM_METHOD_ENTRY|[11]|Database.getQueryLocator(String)
04:30:00.046 (46164000)|SOQL_EXECUTE_BEGIN|[11]|Aggregations:0|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  
04:30:00.046 (46184000)|LIMIT_USAGE|[11]|SOQL|1|200
04:30:00.046 (46200000)|LIMIT_USAGE|[11]|AGGS|0|600
04:30:00.084 (84053000)|SOQL_EXECUTE_END|[11]|Rows:5
04:30:00.084 (84078000)|LIMIT_USAGE|[11]|QUERY_LOCATOR_SOQL_ROWS|5|50000000
04:30:00.084 (84153000)|HEAP_ALLOCATE|[11]|Bytes:20
04:30:00.084 (84178000)|SYSTEM_METHOD_EXIT|[11]|Database.getQueryLocator(String)
04:30:00.352 (113109000)|CUMULATIVE_LIMIT_USAGE
04:30:00.352|LIMIT_USAGE_FOR_NS|(default)|
  Number of SOQL queries: 0 out of 200
  Number of query rows: 0 out of 50000
  Number of SOSL queries: 0 out of 20
  Number of DML statements: 0 out of 150
  Number of DML rows: 0 out of 10000
  Number of code statements: 3 out of 1000000
  Maximum heap size: 0 out of 12000000
  Number of callouts: 0 out of 0
  Number of Email Invocations: 0 out of 10
  Number of fields describes: 0 out of 100
  Number of record type describes: 0 out of 100
  Number of child relationships describes: 0 out of 100
  Number of picklist describes: 0 out of 100
  Number of future calls: 0 out of 0

04:30:00.352|TOTAL_EMAIL_RECIPIENTS_QUEUED|0
04:30:00.352|STATIC_VARIABLE_LIST|
  Boolean:TRUE:0
  long:serialVersionUID:0
  double:MIN_NORMAL:0
  double:POSITIVE_INFINITY:0
  double:MIN_VALUE:0
  int:SIZE:0
  int[]:sizeTable:0
  char[]:DigitOnes:0
  String:_sfdcAdditionalCodeLocations:0
  char[]:DigitTens:0
  double:NaN:0
  double:NEGATIVE_INFINITY:0
  String:_sfdcAdditionalCodeLocations:0
  int:MIN_VALUE:0
  int:SIZE:0
  boolean:$assertionsDisabled:0
  double:MAX_VALUE:0
  String:_sfdcAdditionalTypeInfo:0
  String:_sfdcSuppressedCodeLocations:0
  long:serialVersionUID:0
  int:MAX_EXPONENT:0
  int:MIN_EXPONENT:0
  Boolean:FALSE:0
  int:MAX_VALUE:0
  char[]:digits:0
  long:serialVersionUID:0

04:30:00.352|CUMULATIVE_LIMIT_USAGE_END

04:30:00.370|CUMULATIVE_PROFILING_BEGIN
04:30:00.370|CUMULATIVE_PROFILING|SOQL operations|
Class.ISMTrackingBatchProcess.start: line 11, column 1: Database.getQueryLocator(String): executed 1 time in 39 ms

04:30:00.370|CUMULATIVE_PROFILING|No profiling information for SOSL operations
04:30:00.370|CUMULATIVE_PROFILING|No profiling information for DML operations
04:30:00.370|CUMULATIVE_PROFILING|method invocations|
External entry point: global Database.QueryLocator start(Database.BatchableContext): executed 1 time in 40 ms
Class.ISMTrackingBatchProcess.start: line 8, column 1: global public static void debug(ANY): executed 1 time in 0 ms

04:30:00.370|CUMULATIVE_PROFILING_END
04:30:00.114 (114000000)|CODE_UNIT_FINISHED|ISMTrackingBatchProcess
04:30:00.114 (114026000)|EXECUTION_FINISHED