Создать пакетный апекс для обновления нескольких объектов - PullRequest
0 голосов
/ 08 января 2020

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

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

`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){

    }
}

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

1 Ответ

0 голосов
/ 08 января 2020

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

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

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

...