2012-05-31 2 views
0

У меня есть два глобальных класса. В классе CreateAndModify у меня есть функции выполнения, которые имеют цикл for, который вызывает метод processRecord другого моего класса i.e CreateAndModifyProcessor. Проблема в том, что в моем первом классе есть список, который я не могу получить во втором классе. Есть ли способ сделать это, и это даже хороший язь, чтобы сделать это таким образом? ..Переменная недоступна в другом классе

global class CreateAndModify implements 
Database.Batchable<sObject>, Database.Stateful{ 

global void execute(
Database.BatchableContext BC, 

List<sObject> listObj){ 

list <Account__c> inAcc = new list<Account__c>(); 

for (sObject lo : listObj){ 
     processor.processRecord(lo); 
} 

insert inAcc; // The list object which i 
       // am modifying in the processRecord function has to be added to  
       // the database. So, is it a good idea to add/populate the    
       // in other function of other class 
} 


global class CreateAndModifyProcessor { 
global void processRecord(sObject listObj){ 
Unprocessed_Agreement__c temp = (Unprocessed_Agreement__c)listObj; 

Account__c tempAcc = new Account__c(); 

inAcc.add(tempAcc); // This line throws an error 
} 
} 

ответ

3

Ваш список, inAcc определяется в рамках метода выполнения и поэтому сфера применения ограничивается этим методом и не доступны за ее пределами или класса метод принадлежит. Если вам абсолютно необходимо сохранить структуру, которую вы выложили, то почему бы просто не перечислить список учетных записей в качестве параметра метода обработки, как показано ниже?

global class CreateAndModify implements 
    Database.Batchable<sObject>, Database.Stateful { 

    global void execute(Database.BatchableContext BC, List<sObject> listObj) { 

     list <Account__c> inAcc = new list<Account__c>(); 

     for (sObject lo : listObj) { 
      processor.processRecord(lo, inAcc); 
     } 

     insert inAcc; 
    } 
} 

global class CreateAndModifyProcessor { 

    global void processRecord(sObject listObj, list<Account> listAcc) { 
     Unprocessed_Agreement__c temp = (Unprocessed_Agreement__c)listObj; 
     Account__c tempAcc = new Account__c(); 
     listAcc.add(tempAcc); 
    } 
} 
0

list <Account__c> inAcc = new list<Account__c>(); не глобальный список!

вы должны переместить его за пределами методы выполнения, сделать что-то вроде этого

global class CreateAndModify implements Database.Batchable<sObject>, Database.Stateful{ 

    global list <Account__c> inAcc = new list<Account__c>(); 

    global void execute(Database.BatchableContext BC, List<sObject> listObj){ 

     for (sObject lo : listObj){ 
     processor.processRecord(lo); 
     } 

    insert inAcc; 
} 
} 
+0

Пробовал это тоже .. не работает. ? :( – LivingThing

+0

Что ошибка вы получаете вы можете разместить его – raym0nd

+0

метод не существует или неверно подпись: inAcc.add (SObject: Account__c) – LivingThing

0

Задумывались ли вы реструктуризация коды немного, чтобы, возможно, вернуть учетную запись или список счетов из ProcessRecord и добавить его в inAcc по тому пути? Это может выглядеть примерно так:

list <Account__c> inAcc = new list<Account__c>(); 

for (sObject lo : listObj){ 
    inAcc.addAll(processor.processRecord(lo)); 
} 

insert inAcc; 

global class CreateAndModifyProcessor { 
    global list<Account> processRecord(sObject listObj){ 
     list<Account> accs = new list<Account>(); 
     Unprocessed_Agreement__c temp = (Unprocessed_Agreement__c)listObj; 
     ... // some code that adds records to accs 
     return accs; 
    } 
} 
+0

я три аналогичные функции списка как список inAcc = новый список () ; Итак, я не могу реструктурировать, как вы сказали, потому что тогда у меня должно быть три функции, которые возвращают туда соответствующие объекты, такие как Account – LivingThing

Смежные вопросы