我正在處理一個要求,即必須通過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;
}
請建議。