首页 > 解决方案 > 我的 APEX InvocableMethod 在通过流程构建器运行时返回错误时遇到问题

问题描述

我创建了一个可调用的方法来运行 Process builder。尽管该类在通过某些更改触发时可以工作,但在通过流程构建器运行它时出现错误。根据我的确定,它正在发生,因为调用不是异步运行的。

话虽如此,我试图将这些类分开并制作一个未来的调用,但我无法弄清楚如何将我拥有的三个字符串从可调用类传递给我的调用类。

任何帮助都会很棒!

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());
        }
        }
    }

}

标签: salesforceapexprocessbuilder

解决方案


不确定您是否尝试过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());
                }
            }
        }
    }
}

推荐阅读