Skip to main content La Trailblazer Community non sarà disponibile dal 1/2/2025 al 2/2/2025. Pianifica le tue attività di conseguenza.
errore

C'è stato un problema. Riprova.

Hi All,

I have created onebatch apex as mentioend below.I want to scheduled the class everday midnight automatically.Can any one help me to create a Automatic scheduled class.

BatchApex:

global class OpportunitySplit implements Database.Batchable<Sobject>{

    global OpportunitySplit(){

    }

        //START Method

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

        DateTime dt = DateTime.now().addHours(-24);

        String query = 'SELECT Id,name,Total_Account_Manager__c,Total_Channel_Manager__c FROM Opportunity WHERE LastModifiedDate = ToDay ';

        return Database.getQueryLocator(query);

        }

        //execute Method

        global void execute(Database.BatchableContext BC,List<Opportunity> lstOpp){

            Map<Id,Integer> MapIdOppTosumAcMngr = new Map<Id,Integer>();

            Map<Id,Integer> MapIdOppTosumChMgnr = new Map<Id,Integer>();

            Map<Id,Opportunity> MapOpportunity = new Map<Id,Opportunity>(lstOpp);

            Opportunity objOppToUpdate;

            

            List<Opportunity> lstOppToUpdate = new List<Opportunity>();           

            for(OpportunitySplit objOppSplit : [SELECT Id, Role_Name__c, OpportunityId FROM OpportunitySplit WHERE Role_Name__c IN (' Account Manager',' Channel Manager') AND OpportunityId IN: MapOpportunity.keySet()]){                                     

                system.debug('====objOppSplit===='+objOppSplit);

                

                if(objOppSplit.Role_Name__c == 'Account Manager'){

                   

                    MapIdOppTosumAcMngr.put(objOppSplit.OpportunityId, MapIdOppTosumAcMngr.containsKey(objOppSplit.OpportunityId) ? (MapIdOppTosumAcMngr.get(objOppSplit.OpportunityId)+1): 1);

                }

                else{

                      

                     MapIdOppTosumChMgnr.put(objOppSplit.OpportunityId,MapIdOppTosumChMgnr.containsKey(objOppSplit.OpportunityId) ? (MapIdOppTosumChMgnr.get(objOppSplit.OpportunityId)+1): 1);

                    }

            }

            for(Opportunity objOpp : MapOpportunity.values()){

                objOppToUpdate = new Opportunity(Id = objOpp.Id);

                objOppToUpdate .Total_Account_Manager__c = MapIdOppTosumAcMngr.containsKey(objOpp.Id) ? MapIdOppTosumAcMngr.get(objOpp.Id) : 0;

                objOppToUpdate .Total_Channel_Manager__c = MapIdOppTosumChMgnr.containsKey(objOpp.Id) ? MapIdOppTosumChMgnr.get(objOpp.Id) : 0;

                

                lstOppToUpdate.add(objOppToUpdate );

            

                system.debug('====objOppToUpdate===='+objOppToUpdate);

            }

                if(!lstOppToUpdate.isEmpty())

                    

                    update lstOppToUpdate;         

        }

         //finish Method

                global void finish(Database.BatchableContext BC){

                    

                }

}

Thanks in Advance
6 risposte
  1. 7 dic 2016, 10:35
    If u want schedule batch at 1 AM every day, run this code in Execute Anonymous Window in developer console( presee Ctrl + E from Developer console).

     

    ScheduleOpportunitySplit sost = new ScheduleOpportunitySplit();

    String jobID = System.schedule('Opportunity split job', '0 0 1 * * ?', sost);

    0 0 1 * * ? is called

    cron expression which  tells system the time to run the job.

    It is in the form of  Seconds  Minutes  Hours  Day_of_month  Month Day_of_week  Optional_year

     Refer below links for more info on cron expressions,

    https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm

    http://docs.embarcadero.com/products/er_studio_portal/erstudioPortal2.0/HTMLHelp/Admin/erstudioportal/erstudioportaladministratorsguide/cron_expression_examplescron_expression_examplecreates_trigger.htm
0/9000