Обзор:
У нас есть сторонняя организация, которая размещает текстовое значение в данной конечной точке. Используя запрос Get к URL-адресу, где мы также передаем ключ, а параметры возвращают строковые значения (десятичных чисел и пробела). Я создал некоторый апекс-код, в том числе @InvocableMethod, чтобы я мог все апексы из потока, где я передаю в URL, а затем текст возвращается в поток. Я тогда go, чтобы обновить запись. Вот этот метод, есть также класс FR_Amount_Variables, хранящий значения URL и String @InvocableVariable.
public class FR_Amount_Sync {
@InvocableMethod(label='FR Amount Raised Get')
public static List<FR_Amount_Variables>getFRamount (List<FR_Amount_Variables> inputURL) {
FR_Amount_Variables amtvar = new FR_Amount_Variables();
List<FR_Amount_Variables> getFRamount = new List<FR_Amount_Variables>();
string endpoint = inputURL[0].URL;
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint(endpoint);
request.setMethod('GET');
HttpResponse response = http.send(request);
string Amounts= response.getBody();
Amounts= Amounts.replaceAll( '\\s+', '');
if(String.isEmpty(Amounts)){
Boolean isEmpty = true;
Amounts = '0.00';
}
decimal amountss = decimal.valueOf(Amounts);
amtvar.amount = amountss;
getFRamount.add(amtvar);
return getFRamount;
}
}
Изображение потока можно увидеть ниже Обновление потока
Проблема:
Когда я запускаю поток в режиме отладки, задаю 3 входные переменные и запускаю, поток выполняет апекс и корректно обновляет указанную запись. Точно так же, если я предварительно настрою входные переменные потока (добавлю значение по умолчанию) и просто запущу поток, обновления вершины и записи завершатся успешно с обновлением записи с правильным значением от стороннего производителя. Проблема в том, что когда я пытаюсь автоматически запустить поток, либо с помощью Process Builder, либо с помощью Mass Action Scheduler, я получаю системные исключения. Произошла ошибка Apex:
System.CalloutException: You have uncommitted work pending. Please commit or rollback before calling out
и
An Apex error occurred: System.CalloutException: Callout loop not allowed
соответственно.
Мне было интересно, есть ли в любом случае, чтобы вызвать поток, который не вызывает ошибку. В противном случае есть способ, которым я могу сделать выноску httprequest 'get' и затем обновить запись полученной записью.