Метод Salesforce не полностью выполнен

Мой код, по сути, делает то, что я хочу, до тех пор, пока я не хочу возвращать идентификатор ответа в Salesforce.

public class ExpensifyCallout {
    //@future(callout=true)
    public static void createReport(Id SFReportID, String projectName, Date projectStartDate, Date projectEndDate, String projectReportLocation, String policyID, String employeeEmail){

        Http http = new Http();
        HttpRequest request = new HttpRequest();
        request.setEndpoint('callout:Expensify_API');    
        request.setHeader('ContentType', 'application/json');    
        request.setBody('requestJobDescription={"type": "create","credentials": {"partnerUserID": "{!$Credential.Username}" ,"partnerUserSecret": "{!$Credential.Password}"},"inputSettings": {"type": "report","policyID": "'+policyID+'","report": {"title": "'+projectName+'/ '+projectStartDate.format()+' - '+projectEndDate.format()+'/ '+projectReportLocation+'"},  "employeeEmail": "'+employeeEmail+'", "expenses":[]}}');
        request.setMethod('POST');
        HttpResponse response = http.send(request);
        // If the request is successful, parse the JSON response.
        if (response.getStatusCode() == 200) {
           System.debug(response.getBody());
           Map <String, Object> responseJSON = (Map <String, Object>) JSON.deserializeUntyped(response.getBody());
           String reportID = string.valueof(responseJSON.get('reportID'));
           System.debug('Hello World! ');
           System.debug('Hello World! '+ reportID);

           /*ExpensifyReport__c[] eRecords = [SELECT Name
                                   FROM ExpensifyReport__c
                                   WHERE Id = :SFReportID];
           ExpensifyReport__c e = eRecords[0];
           e.expensifyReportID__c = reportID;*/
        }
        // else handle problem
    }

Мой код ответа от API следующий: {"reportID":"54995495","reportName":"My TEST report","responseCode":200} и я хочу получить reportID и записать его обратно в созданную мной запись, которая вызвала вызов.

Не печатаются только две инструкции с Hello World. Остальное работает как положено. Кто-нибудь знает, почему это может быть? Большое спасибо.

Я заметил сообщение об ошибке, которое мне не очень помогает: Invalid api version:0.0 Когда я проверяю настройки, ни один из перечисленных API не имеет версии 0.0 ...


person steph    schedule 10.12.2019    source источник
comment
Эта ошибка предполагает, что ваши именованные учетные данные настроены неправильно и имеют неправильный URL-адрес.   -  person David Reed    schedule 10.12.2019
comment
Хотя запрос выполнен успешно. Я также получаю ожидаемый ответ. Что позволяет сделать вывод, что это сообщение об ошибке исходит от учетных данных?   -  person steph    schedule 11.12.2019
comment
Я предположил, что ваши сообщения hello world не печатались, потому что вызов завершился неудачно с кодом результата ›= 300. Если это не так, возможно, вы могли бы отредактировать вопрос, чтобы добавить некоторую информацию. Обратите внимание, что есть коды успеха, отличные от 200 (например, 204).   -  person David Reed    schedule 11.12.2019


Ответы (1)


Я проверил, что ваш код работает нормально с помощью следующего теста:

HttpResponse response = new HttpResponse();
response.setBody('{"reportID":"54995495","reportName":"My TEST report","responseCode":200}');

Map <String, Object> responseJSON = (Map <String, Object>) JSON.deserializeUntyped(response.getBody());
String reportID = string.valueof(responseJSON.get('reportID'));
System.debug('The reportId is: '+ reportId); 

Проблема с версией API может быть решена следующим образом: «Настройка» -> «Классы Apex» -> Нажмите на свой класс Apex -> «Правка» -> «Настройки версии» -> «Измените версию API на любое значение, отличное от текущего значения». -> Измените его на соответствующую версию API.

person MPStimpson    schedule 17.12.2019