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