Пакет Apex, доступ к глобальной переменной из другого класса, получение нулевого значения - PullRequest
0 голосов
/ 13 июля 2020

У меня есть простой пакет с глобальной переменной как:

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 список в fini sh метод пакета, я вижу, что список не пуст.

Не могли бы вы намекнуть мне, как я могу получить этот список из другого класса?

Спасибо

1 Ответ

0 голосов
/ 20 июля 2020

Вы не можете этого сделать. Пакетный код контроллера Apex и @AuraEnabled Lightning выполняется в совершенно разных контекстах транзакции; они не имеют общих переменных.

Когда ваш пакетный класс ставится в очередь для выполнения, он сериализуется, а затем десериализуется и выполняется платформой. Ваш вызывающий код не сохраняет ссылку на фактический выполняющийся экземпляр пакета. Кроме того, ваш класс не объявлен с интерфейсом маркера Database.Stateful, поэтому он не будет сохранять значения переменных-членов между пакетами в любом случае.

Вам нужно будет использовать другую стратегию для мониторинга своей партии работа, в зависимости от того, что делает ваше пакетное задание. Это может быть опрос sObjects с помощью SOQL, публикация событий платформы из пакета и т. Д. c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...