我的APEX InvocableMethod遇到问题,在通过流程生成器运行时返回错误

问题描述 投票:0回答:1

我创建了一个可调用的方法来运行“流程”构建器。尽管该类在进行一些更改后就可以工作,但是在通过流程生成器运行该类时遇到错误。根据我的判断,之所以会这样,是因为调用不是异步运行的。

话虽这么说,我试图将各类分开,以备将来调用,但我无法弄清楚如何将我从可发音类中获得的三个字符串传递给我的调用类。

任何帮助都会很棒!

public class SendText {

        public class DataWrapper {

        @InvocableVariable(label='Correspondence Name' required=true)
        public String CorrespondenceName;
        @InvocableVariable(label='Phone Number' required=true)
        public String PhoneNumber;
        @InvocableVariable(label='Text Message' required=true)
        public String textMessage;

    }

    @InvocableMethod(label='Send Text Message')
    public static void callSendTextMessage (List<DataWrapper> passedData) {

        for (DataWrapper dw: passedData) {

        //Basic Info needed to send request
        Http http = new Http();
        HttpRequest request = new HttpRequest();
        request.setEndpoint('https://api.podium.com/api/v2/conversations');
        request.setMethod('POST');
        request.setHeader('Content-Type', 'application/json');
        request.setHeader('Accept', 'application/json');
        request.setHeader('Authorization', 'API Key');

        //Create the 4 required fields for Podium
        Map<String, String> message = new Map<String, String>{
            'customerPhoneNumber' => dw.PhoneNumber,
            'message' => dw.textMessage,
            'locationId' => '49257',
            'customerName' => dw.CorrespondenceName
        };

        String messageJson = JSON.serialize(message);
        System.debug(messageJson);

        request.setBody(messageJson);
        HttpResponse response = http.send(request);

        // Parse the JSON response
        if (response.getStatusCode() != 201) {
            System.debug('The status code returned was not expected: ' +
               response.getStatusCode() + ' ' + response.getStatus());
        } else {
            System.debug(response.getBody());
        }
        }
    }

}

salesforce apex processbuilder
1个回答
0
投票

不确定您是否尝试过Queueable Apex,但这是我的方法,请试一下:

public class SendText {

    public class DataWrapper {

        @InvocableVariable(label='Correspondence Name' required=true)
        public String CorrespondenceName;

        @InvocableVariable(label='Phone Number' required=true)
        public String PhoneNumber;

        @InvocableVariable(label='Text Message' required=true)
        public String textMessage;

    }

    @InvocableMethod(label='Send Text Message')
    public static void callSendTextMessage (List<DataWrapper> passedData) {

        Id jobId = System.enqueueJob(new TextMessaeQueueable(passedData));
        System.debug('Text messages job Id => ' + jobId);
    }

    private class TextMessaeQueueable implements Queueable, Database.AllowsCallouts {

        private List<DataWrapper> wrappedData;

        public TextMessaeQueueable(List<DataWrapper> passedData) {
            this.wrappedData = passedData
        }

        public void execute(QueueableContext context) {

            for (DataWrapper dw: this.wrappedData) {

                //Basic Info needed to send request
                Http http = new Http();
                HttpRequest request = new HttpRequest();
                request.setEndpoint('https://api.podium.com/api/v2/conversations');
                request.setMethod('POST');
                request.setHeader('Content-Type', 'application/json');
                request.setHeader('Accept', 'application/json');
                request.setHeader('Authorization', 'API Key');

                //Create the 4 required fields for Podium
                Map<String, String> message = new Map<String, String>{
                    'customerPhoneNumber' => dw.PhoneNumber,
                    'message' => dw.textMessage,
                    'locationId' => '49257',
                    'customerName' => dw.CorrespondenceName
                };

                String messageJson = JSON.serialize(message);
                System.debug(messageJson);

                request.setBody(messageJson);
                HttpResponse response = http.send(request);

                // Parse the JSON response
                if (response.getStatusCode() != 201) {
                    System.debug('The status code returned was not expected: ' +
                        response.getStatusCode() + ' ' + response.getStatus());
                } else {
                    System.debug(response.getBody());
                }
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.