Pdf 附件第一次发送时为空,但第二次通过Apex控制器-SFDC NPSP发送时包含数据

Pdf 附件第一次发送时为空,但第二次通过Apex控制器-SFDC NPSP发送时包含数据,pdf,salesforce,email-attachments,visualforce,apex,Pdf,Salesforce,Email Attachments,Visualforce,Apex,我正在处理一项要求,即我必须通过SFDCNPSP中的Apex类将pdf作为附件发送。下面是我的课程结构—— VisualForcePage1有两个输入–input1和input2。该页面也有 3个按钮–预览、发送电子邮件和取消。取决于 输入1和输入2,ApexClass1计算输出1的值, 使用getOutputMethod()方法输出2、输出3、输出4和输出5。 这些output1…5变量的值存储在自定义对象中 说自定义对象 当用户单击Preview按钮时,将调用previewPDF()方法,该

我正在处理一项要求,即我必须通过SFDCNPSP中的Apex类将pdf作为附件发送。下面是我的课程结构——

VisualForcePage1有两个输入–input1和input2。该页面也有 3个按钮–预览、发送电子邮件和取消。取决于 输入1和输入2,ApexClass1计算输出1的值, 使用getOutputMethod()方法输出2、输出3、输出4和输出5。 这些output1…5变量的值存储在自定义对象中 说自定义对象

当用户单击Preview按钮时,将调用previewPDF()方法,该方法反过来调用getOutputMethod()。输出变量(output1…5)存储在自定义对象中,然后将控件重定向到VisualForcePage2,其属性renderAs='pdf'。生成的pdf具有准确的数据

当用户单击“发送电子邮件”按钮时,将调用方法emailPDF(),该方法反过来调用getOutputMethod()。输出变量(output1…5)存储在自定义对象中但是,邮件中发送的附件pdf首次没有数据。对于相同的输入值,在第二次和后续试验中点击发送电子邮件按钮时,附件pdf会显示数据。以下是以电子邮件形式发送pdf的代码片段-

Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();  
// Reference the attachment page and pass in the account ID  
PageReference pdf =  Page.VisualForcePage2;                         
pdf.getParameters().put('paramater1',input1);   
pdf.getParameters().put('paramater2',input2);            
pdf.setRedirect(true);    
// Take the PDF content    
Blob b = pdf.getContentAsPDF();               
// Create the email attachment    
String filename = 'myPage.pdf';   
Messaging.EmailFileAttachment efa = new Messaging.EmailFileAttachment();  
efa.setFileName(filename);  
efa.setBody(b);                 
// Sets the paramaters of the email    
String subject = 'Subject';                                                
body = 'Hello';              
email.setSubject(subject);  
email.setToAddresses('example@email.com');  
email.setPlainTextBody(body);    
email.setFileAttachments(new Messaging.EmailFileAttachment[] {efa});     
// Sends the email
Messaging.SendEmailResult [] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[] {email});
VisualForcePage2的ApexClass2使用input1查询自定义对象 和输入2作为参数,如下所示-

public ApexClass2(){//构造函数
var1=ApexPages.currentPage().getParameters().get('Parameter1');
var2=ApexPages.currentPage().getParameters().get('Paramate2');getCustomObject();
}      
公共列表getCustomObject(){
列表coList=新列表([
选择字段1、字段2、字段3、字段4、字段5
来自自定义对象
其中field1=:var1
和field2=:var2]);
回归共线性;
}    

请提出建议。

问题已解决。发送附件的代码在更新记录之前从数据库中提取记录。因此,它要么选择空白数据,要么选择旧数据

我在负责发送附件邮件的方法的开头添加了
@future(callout=true)

Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();  
// Reference the attachment page and pass in the account ID  
PageReference pdf =  Page.VisualForcePage2;                         
pdf.getParameters().put('paramater1',input1);   
pdf.getParameters().put('paramater2',input2);            
pdf.setRedirect(true);    
// Take the PDF content    
Blob b = pdf.getContentAsPDF();               
// Create the email attachment    
String filename = 'myPage.pdf';   
Messaging.EmailFileAttachment efa = new Messaging.EmailFileAttachment();  
efa.setFileName(filename);  
efa.setBody(b);                 
// Sets the paramaters of the email    
String subject = 'Subject';                                                
body = 'Hello';              
email.setSubject(subject);  
email.setToAddresses('example@email.com');  
email.setPlainTextBody(body);    
email.setFileAttachments(new Messaging.EmailFileAttachment[] {efa});     
// Sends the email
Messaging.SendEmailResult [] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[] {email});
public ApexClass2() {  // constructor  
    var1 = ApexPages.currentPage().getParameters().get('paramater1');  
    var2 = ApexPages.currentPage().getParameters().get('paramater2');               getCustomObject();   
}      

public List<Custom_Object__c> getCustomObject() {  
    List<Custom_Object__c> coList = new List<Custom_Object__c>([
SELECT field1, field2, field3, field4, field5  
FROM Custom_Object__c
WHERE  field1 =: var1
AND    field2 =: var2 ]);     
    return coList;                                                                                         
}