Salesforce apex csv 文件生成

问题描述

希望大家都平安。 我正在尝试使用 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 的第一页获取数据,这就是我没有获取所有行的原因。