Как мне обновить переменную класса из триггера в Apex? - PullRequest
0 голосов
/ 16 сентября 2011

Я объявил класс с публичной переменной LPAssign.Я хотел иметь начальное значение 1, которое затем обновлялось бы при каждом запуске триггера.

Вот мой класс:

public class LP { 
public static integer LPAssign;

static{
LPAssign = 1;
}

}

И код в моем триггере делает это:

if LPAssign = 1, do several things, then update LPAssign =2.
if LPAssign = 2, do several things, then update LPAssign =3.
if LPAssign = 3, do several things, then update LPAssign =4.
if LPAssign = 4, do several things, then update LPAssign =1. 

В моем триггере я передал LPAssign в случайное поле, чтобы увидеть, не изменился ли он на 2 (он делает), но затем мой открытый класс сбрасывает значение на 1. Я думал, что статическая часть классаинициализируется только один раз.

1 Ответ

3 голосов
/ 16 сентября 2011

Статические переменные являются статическими только для одного потока выполнения, поэтому, если вы обновляете запись через интерфейс, а затем обновляете ее во второй раз, когда этот поток завершает во второй раз, ваша переменная вернется к 1.

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

Помимо всего этого, если вы запускаете триггер несколько раз в одном потоке, вы должны иметь доступ к общедоступному статическому члену без проблем, я делаю это сам, чтобы остановить каскадные триггеры и т. Д.

...