问题描述
希望大家都平安。 我正在尝试使用 apex 代码生成一个 csv 文件。从 salesforce 我只想从状态为已付款的支付对象中取出所有付款,然后检查我的付款 api 响应中是否存在 Number 字段的值(来自 salesforce 中的付款对象)。我只想为该记录生成 csv 文件并将其通过电子邮件发送给我自己。 现在在 salesforce 沙箱中,当我测试 csv 时,我得到了很好的结果,所有这些状态为已付款的付款记录都显示在 csv 文件中,但是
当我进入生产环境时,我的 csv 文件中只有 1 条记录。别 知道为什么在沙箱中它运行良好,但在生产中却不是。
public with sharing class EmailCsv {
public static String APIAccessID;
public static String APISecureKey;
public static String orgId;
Public static String Locid;
public static String apiBaseUrl;
public static String finalstr;
@invocableMethod(label=‘Invoke From Flow' description=‘Invokable Method')
public static void invokeFromFlow() {
makeCallout();
}
@future(callout=true)
public static void makeCallout() {
List<String> paymentNo = new List<String>();
List<Payments__c> paymentQuery= [SELECT Number__c,Status__c FROM Payments__c where Status__c = ‘Paid’];
for(Payments__c pNo : paymentQuery){
paymentNo.add(pNo.Number__c);
}
string header = 'Order Number,Status,Amount,Received Date,Received Time \n';
finalstr = header;
if(Test.isRunningtest()) {
APIAccessID = '';
APISecureKey = '';
orgId = '';
apiBaseUrl = '';
Locid = '';
} else {
APIAccessID = Email_Csv__c.getInstance('APIAccessID').value__c;
APISecureKey = Email_Csv__c.getInstance('APISecureKey').value__c;
orgId = Email_Csv__c.getInstance('orgId').value__c;
apiBaseUrl = Email_Csv__c.getInstance('apiBaseUrl').value__c;
Locid = Email_Csv__c.getInstance('Locid').value__c;
}
String authHeader = 'Basic ' + EncodingUtil.base64Encode(Blob.valueOf(APIAccessID + ':' + APISecureKey));
String endpoint = apiBaseUrl + '/organizations/' + orgId + '/locations/' + Locid + '/transactions/';
System.debug('Endpoint is ==> ' +endpoint);
HTTP http = new HTTP();
HTTPRequest request = new HTTPRequest();
request.setEndpoint(endpoint);
request.setMethod('GET');
request.setHeader('Accept','application/json');
request.setHeader('Authorization',authHeader);
request.setHeader('X-Forte-Auth-Organization-Id',orgId);
request.setTimeout(5000);
HttpResponse response = http.send(request);
if(response.getStatusCode() == 200) {
EmailCsvWrapper resWrapper = EmailCsvWrapper.parse(response.getBody());
for(Integer i=0; i<resWrapper.results.size(); i++) {
EmailCsvWrapper.Results res = resWrapper.results.get(i);
String s = res.received_date;
Double authAmount = res.authorization_amount;
String authAmountConverted = String.valueOf(authAmount);
String oNumber = res.order_number;
if(oNumber != null){
String[] splittedoNumber = oNumber.split(',');
oNumber = oNumber.contains(',') ? splittedoNumber[0] : oNumber;
}
for(String s : paymentNo){
if(s == oNumber){
String cfn = +oNumber + ',' +res.status + ',' +authAmountConverted + ',' +s + '\n';
finalstr = finalstr +cfn;
System.debug('CSV => ' +cfn);
}
}
}
List<Messaging.SingleEmailMessage> emails = new List<Messaging.SingleEmailMessage>();
Messaging.SingleEmailMessage semail = new Messaging.SingleEmailMessage();
Messaging.EmailFileAttachment attach = new Messaging.EmailFileAttachment();
blob csvBlob = blob.valueOf(finalstr);
attach.setFileName(‘Payments.csv');
attach.setBody(csvBlob);
List<String> emailAddresses = new List<String>();
emailAddresses.addAll((Email_Csv__c.getInstance('EmailAddresses').value__c).split(';'));
semail.setSubject('Csv File’);
semail.setToAddresses(emailAddresses);
semail.setPlainTextBody(‘Transactions csv file’);
semail.setFileAttachments(new Messaging.EmailFileAttachment[]{attach});
emails.add(semail);
Messaging.sendEmail(emails);
}
}
}
解决方法
完成了。代码没问题。我只是从 api 的第一页获取数据,这就是我没有获取所有行的原因。