Salesforce 为什么Apex可调度类中的全局映射不包含任何值?

Salesforce 为什么Apex可调度类中的全局映射不包含任何值?,salesforce,Salesforce,我试图在一个可批处理类的finish方法中使用一个全局映射变量,但它的行为很奇怪,我肯定我做错了什么,但不知道在哪里。 在下面的简化代码中,第一条调试消息按预期输出映射的实际大小。但是,finish方法中的调试消息输出0,作为同一映射的大小。看起来地图在某个地方被重新实例化了,但我不确定在哪里 global class MySchedulableClass implements Database.Batchable<sObject> { global map<st

我试图在一个可批处理类的finish方法中使用一个全局映射变量,但它的行为很奇怪,我肯定我做错了什么,但不知道在哪里。 在下面的简化代码中,第一条调试消息按预期输出映射的实际大小。但是,finish方法中的调试消息输出0,作为同一映射的大小。看起来地图在某个地方被重新实例化了,但我不确定在哪里

 global class MySchedulableClass implements Database.Batchable<sObject> {


    global map<string,string> StringStringMap;
    global string query;


    global MySchedulableClass(){    

      if (query == null)
         query = 'Select id, name From Contact LIMIT 20';  
      if (StringStringMap == null){
            StringStringMap = new map<string,string>();
        }
     }

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

        return Database.getQueryLocator(query);
    }

    global void execute(Database.BatchableContext BC,List<sObject> scope){
        for(Sobject s: scope) {
            con = (Contact) s;          
            StringStringMap.put(s.id, s.name);                                                                  
        }
        system.debug('Map size:' + StringStringMap.size());

    }

    global void finish(Database.BatchableContext BC){       
          system.debug('Map size:' + StringStringMap.size());
    }
}

如果要在批处理运行期间保留信息,请查看Database.Stateful。看见它涵盖了为什么全局变量不能持久化

批处理Apex作业的每次执行都被视为一个离散事务。例如,包含1000条记录且在没有可选范围参数的情况下执行的批处理Apex作业被视为五个事务,每个事务有200条记录

如果在类定义中指定Database.Stateful,则可以跨这些事务维护状态


经过进一步研究,不可能从execute方法写入全局变量。有什么解决办法吗?