Создание Batch Apex для обновления нескольких объектов

У меня уже есть вершина расписания, которая работает с 3 объектами для выполнения базового запроса и обновления. Я хотел сделать эту классную партию. Но невозможно добавить несколько объектов в пакетную вершину и зациклиться на них.

Вот как выглядит вершина моего расписания

`global class scheduleWorkday implements Schedulable {

 global void execute(SchedulableContext ctx) {

  //Get Accounts

        List<Account> getbdayaccount = [Select ID, Name, Address from Account where State= CT];

        if(!getbdayaccount .isEmpty()) {
                for(Account a : getbdayaccount ) {
                a.name = 'Test';
                a.State= 'NJ';
            }
            update getbdayaccount ;
        }

//get Leads 

   List<Lead> getPreApprovalFollow = [Select ID, Name, State, LeadSource from Lead where State = 'CT' ];

        if(!getPreApprovalFollow .isEmpty()) {
               for(Lead l: getPreApprovalFollow ) {
                l.LeadSource = 'Referral';
                l.State = 'NJ';
            }
            update getPreApprovalFollow ;
        }

//get Opportunities 

List<Opportunity> getopps = [Select Id, CloseDate, State from Lead where State = 'CT'];

   if(!getopps.isEmpty()){
     for(Opportunity o : getopps){
     o.CloseDate = Date.Today();
      o.State = 'CT';
}
update get opps;


}



}


}`

Я попытался сделать пакетный апекс примерно так:

global class LeadProcessor implements Database.Batchable <SObject> {
//START METHOD
    global Database.QueryLocator start(Database.BatchableContext bc){
        String Query='Select id,LeadSource, State from Lead where state = 'CT';
        return Database.getQueryLocator(Query);
            }
//EXECUTE METHOD
    global void execute(Database.BatchableContext bc, List<Lead> scope){
        for(Lead l: scope){
            l.LeadSource='Referral';
            l.State = 'NJ';

        }
        update scope;
    }
//FINISH METHOD
    global void finish(Database.BatchableContext bc){

    }
}

Как я могу изменить этот пакетный апекс, чтобы он возвращал несколько запросов, добавлял цикл и обновлял их.


person richie    schedule 08.01.2020    source источник


Ответы (1)


Это не то, как работает Batch Apex. В пакетном задании Apex можно выполнить итерацию ровно по одному запросу.

Поскольку вы изменяете три разных объекта тремя разными способами, варианты пакетной цепочки и использования динамического SOQL здесь не применимы. Вам просто нужно создать три разных пакетных класса.

Вы можете запускать эти классы параллельно или включать каждую цепочку в следующую в своем методе finish(). Но вы не можете сделать все это в одном пакете.

person David Reed    schedule 08.01.2020