Я не могу вызвать метод @Future - PullRequest
0 голосов
/ 13 апреля 2020

Я понимаю, что не могу напрямую вызвать метод будущего из класса пакета. Но из многих других ответов я вижу, что это можно сделать, создав вспомогательный класс и вызвав там будущий метод. Но это не работает для меня. Пожалуйста, проверьте мой код ниже. Кроме того, я попытался сделать это с классом очереди как предложено в этой ссылке , но он не работает для меня. Ошибка: «Вызов не разрешен этим будущим методом. Пожалуйста, включите вынос, аннотируя будущий метод. Например: @Future (callout = true)"

Но меня больше интересует первый и более простой способ сделать это.

public class OrdersItemsHelper {
    static Document tDoc;
    static blob csvBlob; 

    //prepare csv file to send
    public static void CreateCsvFile(List<Order_Line_Items__c> orderItemsList)
    {  

       //Code to create file here

        csvBlob = Blob.valueOf(finalstr);
        tDoc = new Document();
        tDoc.Name = 'sales_items_' +date.today();
        tDoc.Type = 'csv';
        tDoc.body = csvBlob;
        tDoc.FolderId = [select id from folder where name = 'Emarsys Order Files'].Id;
        tDoc.ContentType = 'application/vnd.ms-excel';
        Insert tDoc;
        system.debug('doc inserted');

        sendFile();

    }


    @Future(callout = true)
    public static void sendFile()
    {
        System.debug('I am creating the post request');
        Http http = new Http();
        HttpRequest request = new HttpRequest();
        request.setMethod('POST');
        request.setHeader('Authorization','Security Token');
        request.setHeader('Accept','text/plain');
        request.setHeader('Content-Type', 'text/csv');
        request.setHeader('Authorization', 'Bearer ');
        request.setBodyAsBlob(csvBlob);
        HttpResponse response = http.send(request);
        system.debug('response: ' + response);
    }

1 Ответ

0 голосов
/ 14 апреля 2020

Итак, я попытался снова, выполнив это в очереди класса Apex. В заголовке класса мне не хватало «Database.AllowsCallouts». Ниже мой класс очереди, который работает с классом пакета, чтобы послать запрос поста отдыха.

    public class OrderItemFilePostHelper implements System.Queueable,Database.AllowsCallouts
{
private Blob csvBlob;

    public EmarsysOrderItemFilePostHelper(Blob csvBlob) {
        this.csvBlob = csvBlob;
    }

    public void execute(System.QueueableContext objContext)
    {
        System.debug('I am creating the post request');
        Http http = new Http();
        HttpRequest request = new HttpRequest();
        request.setMethod('POST');
        request.setHeader('Authorization','Security Token');
        request.setHeader('Accept','text/plain');
        request.setHeader('Content-Type', 'text/csv');
        request.setHeader('Authorization', 'Bearer ');
        request.setEndpoint('https://webhook.site/b0746268-e95c-4f94-bcb6-61d4bea54378');

        request.setBodyAsBlob(csvBlob);
        HttpResponse response = http.send(request);
        system.debug('response: ' + response);
    }

}
...