Cloud 变量在不同的类中不可用

Cloud 变量在不同的类中不可用,cloud,salesforce,apex-code,Cloud,Salesforce,Apex Code,我有两个全球班。在CreateAndModify类中,我有一个execute函数,它有一个for循环,该循环调用我的另一个类,即CreateAndModifyProcessor的processRecord方法。问题是在我的第一个类中声明了一个列表集合,而在第二个类中我无法访问该集合。有没有办法做到这一点?这样做是不是一个好主意 global class CreateAndModify implements Database.Batchable<sObject>, Database.S

我有两个全球班。在CreateAndModify类中,我有一个execute函数,它有一个for循环,该循环调用我的另一个类,即CreateAndModifyProcessor的processRecord方法。问题是在我的第一个类中声明了一个列表集合,而在第二个类中我无法访问该集合。有没有办法做到这一点?这样做是不是一个好主意

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
}
}
全局类CreateAndModify实现
Database.Batchable,Database.Stateful{
全局无效执行(
Database.BatchableContext BC,
列表(列表对象){
list INAC=新列表();
对于(sObject lo:listObj){
处理器.processRecord(lo);
}
insert INAC;//输入的列表对象
//必须将processRecord函数中的am修改添加到
//那么,添加/填充数据库是一个好主意吗
//在其他类的其他函数中
}
全局类CreateAndModifyProcessor{
全局作废处理记录(sObject listObj){
未处理的协议临时=(未处理的协议)列表对象;
账户临时账户=新账户临时账户();
inAcc.add(tempAcc);//此行抛出一个错误
}
}
列表INAC=new list();
不是全局列表

您应该将它移到execute方法之外,执行如下操作

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; 
 }
}
全局类CreateAndModify实现Database.Batchable,Database.Stateful{
全局列表INAC=新列表();
全局void execute(Database.BatchableContext BC,List listObj){
对于(sObject lo:listObj){
处理器.processRecord(lo);
}
插入INAC;
}
}
列表INAC=new list();
不是全局列表

您应该将它移到execute方法之外,执行如下操作

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; 
 }
}
全局类CreateAndModify实现Database.Batchable,Database.Stateful{
全局列表INAC=新列表();
全局void execute(Database.BatchableContext BC,List listObj){
对于(sObject lo:listObj){
处理器.processRecord(lo);
}
插入INAC;
}
}

您是否考虑过重新构造代码,以从processRecord返回帐户或帐户列表,并以这种方式将其添加到INAC?它可能看起来像这样:

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;
    }
}
list inAcc=new list();
对于(sObject lo:listObj){
INAC.addAll(处理器处理记录(lo));
}
插入INAC;
全局类CreateAndModifyProcessor{
全局列表processRecord(sObject listObj){
list accs=新列表();
未处理的协议临时=(未处理的协议)列表对象;
…//将记录添加到accs的某些代码
返回accs;
}
}

您是否考虑过重新构造代码,以从processRecord返回帐户或帐户列表,并以这种方式将其添加到INAC?它可能看起来像这样:

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;
    }
}
list inAcc=new list();
对于(sObject lo:listObj){
INAC.addAll(处理器处理记录(lo));
}
插入INAC;
全局类CreateAndModifyProcessor{
全局列表processRecord(sObject listObj){
list accs=新列表();
未处理的协议临时=(未处理的协议)列表对象;
…//将记录添加到accs的某些代码
返回accs;
}
}

您的列表,
INAC
是在execute方法中定义的,因此它的范围仅限于该方法,并且在该方法或该方法所属的类之外不可用。如果您绝对必须保留您所布置的结构,那么为什么不将帐户列表作为参数传递给处理方法,如下所示

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);
    }
}
全局类CreateAndModify实现
Database.Batchable,Database.Stateful{
全局void execute(Database.BatchableContext BC,List listObj){
list INAC=新列表();
对于(sObject lo:listObj){
处理器.processRecord(lo,INAC);
}
插入INAC;
}
}
全局类CreateAndModifyProcessor{
全局作废处理记录(sObject listObj、list listAcc){
未处理的协议临时=(未处理的协议)列表对象;
账户临时账户=新账户临时账户();
添加列表附件(临时附件);
}
}

您的列表,
INAC
是在execute方法中定义的,因此它的范围仅限于该方法,并且在该方法或该方法所属的类之外不可用。如果您绝对必须保留您所布置的结构,那么为什么不将帐户列表作为参数传递给处理方法,如下所示

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);
    }
}
全局类CreateAndModify实现
Database.Batchable,Database.Stateful{
全局void execute(Database.BatchableContext BC,List listObj){
list INAC=新列表();
对于(sObject lo:listObj){
处理器.processRecord(lo,INAC);
}
插入INAC;
}
}
全局类CreateAndModifyProcessor{
全局作废处理记录(sObject listObj、list listAcc){
未处理的协议临时=(未处理的协议)列表对象;
账户临时账户=新账户临时账户();
添加列表附件(临时附件);
}
}

方法不存在或签名不正确:INAC.add(SOBJECT:Account\u c)方法不存在或签名不正确:INAC.add(SOBJECT:Account\u c)我有三个类似的列表函数,如list INAC=new list();所以,我不能像你说的那样重构,因为我应该有三个函数,它们返回各自的对象,比如Account;我有三个类似的列表函数,比如list inAcc=new list();所以,我不能像你说的那样重构,因为我应该有三个函数,它们返回各自的对象,比如Account