salesforce - 我的 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());
}
}
}
}
解决方案
不确定您是否尝试过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());
}
}
}
}
}
推荐阅读
- javascript - 尝试在 vuejs 中重新渲染广告
- r - 使用 dplyr 和列中的一些条件创建一个新的数据框
- android - Nearby Connections API 的连接时间是否有下限?
- r - 当我尝试在 R 中安装 Mosaic 包时,这个错误是什么意思?
- ios - 在 Sirikit 中创建自定义类型参数
- swift - 如何将 Firebase 中的值添加到 xcode 中的标签?
- unity3d - 玩家和敌人之间的碰撞不再起作用,Unity2D
- javascript - 在VueJS中使用计算属性过滤结果时,如何在数组中显示所有文章?
- php - 来自服务器进程计时器的 Swoole 错误 9009 消息,而不是 Worker 进程回调?
- java - 如何使用模式和匹配器提取数据