Это потому, что вам нужно делать все свои DML ПОСЛЕ того, как вы сделали какие-либо выноски, а не раньше. Поэтому любые операторы вставки / обновления / вставки или удаления должны следовать любым http.send(req);
вызовам.
** Похоже, ваш список пополняется после вызова метода add (), потому что ваш список находится в методе получения **
Это зависит от потока и должно происходить в последовательности для каждого конкретного потока. Так, например, когда пользователь нажимает кнопку с методом действия, все операторы DML в этом вызове должны следовать за любыми выносками, которые происходят в том же потоке. То же самое для триггера или партии Apex.
Это может быть вызвано тем, что где-то есть получатель / установщик, который обновляет данные. Например:
public String someProperty
{
get
{
return [SELECT Name FROM CustomObject__c WHERE Id = :this.someId];
}
set(String s)
{
CustomObject__c c = [SELECT Name FROM CustomObject__C WHERE Id = :this.someId]
c.Name = s;
update c;
}
}
Кроме того, никогда не помещайте выноску в геттер. Всегда помещайте выноску в явный метод, который делает это один раз и только один раз. Геттеры будут уволены несколько раз, а выноски имеют строгие ограничения в Apex.