第一次发送时附件为空白,但通过Apex控制器第二次发送时有数据 - SFDC NPSP
我正在处理一个要求,即必须通过SFDC中的Apex类发送pdf作为附件。NPSP。所以下面是我的程序结构 -第一次发送时附件为空白,但通过Apex控制器第二次发送时有数据 - SFDC NPSP
VisualForcePage1有两个输入 - input1和input2。该页面还有 3个按钮 - 预览,发送电子邮件和取消。根据 input1和input2的值,ApexClass1使用方法getOutputMethod()计算output1, output2,output3,output4和output5的值。 这些output1 ... 5变量的值存储在自定义对象 中,比如Custom_Object__c。
public void getOutputMethod() {
// calculate values of output1...5
// store these values in Custom_Object__c
}
当用户点击预览按钮,方法previewPDF()被调用,后者又调用getOutputMethod()。输出变量(output1 ... 5)存储在Custom_Object__c中,然后控件被重定向到VisualForcePage2,该属性的renderAs ='pdf'。生成的pdf有准确的数据。
当用户单击发送电子邮件按钮时,将调用emailPDF()方法,该方法将调用getOutputMethod()。输出变量(output1 ... 5)存储在Custom_Object__c中。 但是邮件发送的附件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('[email protected]');
email.setPlainTextBody(body);
email.setFileAttachments(new Messaging.EmailFileAttachment[] {efa});
// Sends the email
Messaging.SendEmailResult [] r = Messaging.sendEmail(new Messaging.SingleEmailMessage[] {email});
VisualForcePage2的ApexClass2查询Custom_Object__c与输入1 和输入2为如下参数 -
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;
}
请建议。
问题已解决。发送附件的代码在更新之前从数据库中提取记录。因此,它选择空白或旧数据。
我在负责发送附件邮件的方法开始时添加了@future(callout=true)
。