【问题标题】:Apex Batch, accessing global variable from an other class, getting null valueApex Batch,从其他类访问全局变量,获取空值
【发布时间】:2020-07-13 09:54:57
【问题描述】:

我有一个简单的批处理,全局变量为:

global with sharing class sampleBatchApex implements Database.Batchable<sObject>{

    global List<Case> myList;


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

    global void execute(Database.BatchableContext BC, List<sObject> scope){
      //some stuff;
    }

    global void finish(Database.BatchableContext BC){
      myList = SELECT ID ... FROM ...
    }
}

还有一个我试图得到myList的地方

public class BatchApexProgressIndicatorController {
   public static sampleBatchApex myBatchObject = new sampleBatchApex();

批处理以其他方法执行,我正在监视作业。完成后,我将调用以下方法来获取 myList

  @AuraEnabled
  public static List<Case> getCases(){
    return myBatchObject.myList;
  }

}

它让我得到一个空列表。

但是,如果我在批处理的完成方法中 System.debug 列表,我可以看到该列表不为空。

能否请您提示我如何从其他班级获得此列表?

谢谢

【问题讨论】:

    标签: salesforce apex


    【解决方案1】:

    你不能那样做。 Batch Apex 和@AuraEnabled Lightning 控制器代码在完全独立的事务上下文中执行;它们不共享任何变量。

    当您的批处理类被排队执行时,它会被序列化,然后由平台反序列化和执行。您的调用代码不保留对实际执行批处理实例的引用。此外,您的类没有使用Database.Stateful 标记接口声明,因此无论如何它都不会保留btches 之间的成员变量值。

    您需要使用不同的策略来监控您的批处理作业,具体取决于您的批处理作业的用途。这可能是使用 SOQL 轮询 sObject、从批处理中发布平台事件等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多