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
HamptonHampton 

Apex Schedulable Batch Error

Hello:

 

I have the following class, along with the scheudable class:

 

global class PenetrationSummaryConversion implements Database.Batchable<sObject>{

public string Query;

public Penetration_Summary__c penSum;

public List<Penetration_Summary__c> insertPenSumList = new List<Penetration_Summary__c>();

List<Group> QueueList = new List <Group>();

Map<String,Id> QueueMap = new Map<String,Id>();

List<Penetration_Staging_Records__c> addStagingList = new List<Penetration_Staging_Records__c>();

List<Penetration_Staging_Records__c> deleteStagingList = new List<Penetration_Staging_Records__c>();

global Database.querylocator start(Database.BatchableContext BC) {

    Query = 'Select Name, Id, OwnerId, LastModifiedDate, Release__c, CBW_Rev__c, CBW_Subs__c, Copper_CBAD_Rev__c, Copper_CBAD_Subs__c,'+
            'Copper_Voice_Rev__c, Copper_Voice_Subs__c, DSL_Rev__c, DSL_Subs__c, Fiber_CBAD_Rev__c,'+
            'Fiber_CBAD_Subs__c, Fiber_Internet_Rev__c, Fiber_Internet_Subs__c, Fiber_Voice_Rev__c, Fiber_Voice_Subs__c,'+
            'Premium_Speed_Rev__c, Premium_Speed_Subs__c, Month__c, Year__c, Video_Subs__c, Video_Rev__c'+
            'Copper_Voice_Penetration__c, Copper_CBAD_Penetration__c, DSL_Penetration__c, Premium_Speed_Penetration__c'+
            'Fiber_Voice_Penetration__c, Fiber_CBAD_Penetration__c, Fiber_Internet_Penetration__c, Video_Penetration__c'+
            'CBW_Penetration__c, Units__c'+
            ' From Penetration_Staging_Records__c' + ' Where Batch_Processed__c=false';
     return Database.getQueryLocator(Query);
}

global void execute(Database.BatchableContext BC, List<sObject> scope) {
    QueueList=[Select Id, Name, DeveloperName, Type from Group where Type = 'Queue'];
    for(Group qObj:QueueList){
        QueueMap.put( qobj.Name, qobj.Id);
    }    
       
        for(sObject s: scope) {
            Penetration_Staging_Records__c tempPenRecords = (Penetration_Staging_Records__c)s;
            if(tempPenRecords.LastModifiedDate < System.now() || Test.isRunningTest())
            
           addStagingList.add(tempPenRecords);
 
         }
        for(Penetration_Staging_Records__c tempRecord : addStagingList){
            penSum = new Penetration_Summary__c();
            penSum.Copper_Voice_Subs__c = tempRecord.Copper_Voice_Subs__c;
            penSum.Copper_CBAD_Subs__c = tempRecord.Copper_CBAD_Subs__c;
            penSum.DSL_Subs__c = tempRecord.DSL_Subs__c;
            penSum.Premium_Speed_Subs__c = tempRecord.Premium_Speed_Subs__c;
            penSum.Fiber_Voice_Subs__c = tempRecord.Fiber_Voice_Subs__c;
            penSum.Fiber_CBAD_Subs__c = tempRecord.Fiber_CBAD_Subs__c;
            penSum.Fiber_Internet_Subs__c = tempRecord.Fiber_Internet_Subs__c;
            penSum.Video_Subs__c = tempRecord.Video_Subs__c;
            penSum.CBW_Subs__c = tempRecord.CBW_Subs__c;
            penSum.Copper_Voice_Rev__c = tempRecord.Copper_Voice_Rev__c;
            penSum.Copper_CBAD_Rev__c = tempRecord.Copper_CBAD_Rev__c;
            penSum.DSL_Rev__c = tempRecord.DSL_Rev__c;
            penSum.Premium_Speed_Rev__c = tempRecord.Premium_Speed_Rev__c;
            penSum.Fiber_Voice_Rev__c = tempRecord.Fiber_Voice_Rev__c;
            penSum.Fiber_CBAD_Rev__c = tempRecord.Fiber_CBAD_Rev__c;
            penSum.Fiber_Internet_Rev__c = tempRecord.Fiber_Internet_Rev__c;
            penSum.Video_Rev__c = tempRecord.Video_Rev__c;
            penSum.CBW_Rev__c = tempRecord.CBW_Rev__c;
            penSum.Copper_Voice_Penetration__c = tempRecord.Copper_Voice_Penetration__c;
            penSum.Copper_CBAD_Penetration__c = tempRecord.Copper_CBAD_Penetration__c;
            penSum.DSL_Penetration__c = tempRecord.DSL_Penetration__c;
            penSum.Premium_Speed_Penetration__c = tempRecord.Premium_Speed_Penetration__c;
            penSum.Fiber_Voice_Penetration__c = tempRecord.Fiber_Voice_Penetration__c;
            penSum.Fiber_CBAD_Penetration__c = tempRecord.Fiber_CBAD_Penetration__c;
            penSum.Fiber_Internet_Penetration__c = tempRecord.Fiber_Internet_Penetration__c;
            penSum.Video_Penetration__c = tempRecord.Video_Penetration__c;
            penSum.CBW_Penetration__c = tempRecord.CBW_Penetration__c;
            penSum.Name = tempRecord.Release__c;

            
            insertPenSumList .add(penSum);
            deleteStagingList.add(tempRecord);
            
        } 
        insert insertPenSumList;
        delete deleteStagingList;
}

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

 

global class PenetrationSummaryConversionScheduled implements Schedulable{

   global void execute(SchedulableContext SC) {
        PenetrationSummaryConversion penetrationsummaryinsert = new PenetrationSummaryConversion();
   Database.executeBatch(penetrationsummaryinsert);
   }
}

In the Sandbox, everything worked fine. Now that I am in production, the batch was scheduled and the Monitoring log says it ran, however, it did not convert the records. When I try to execute using the developer console I am getting error

line 1, column 14: Global type must be contained inside of a global class

 

Any thoughts on how to tweak this to work would be appreciated.

 

Thanks,

 

Hampton

Sonam_SFDCSonam_SFDC

Hi Hampton,

The Developer Console does not really support creating global classes
(which means you can't implement the Schedulable interface inside it)

Links to the documents that might be helpful:

- http://stackoverflow.com/questions/11028612/apex-scheduler-salesforce-execution-error

- http://harshesh7487.blogspot.com/2011/01/scheduling-apex-class-using.html