2017-10-05 159 views
1

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

請建議。

回答

1

問題已解決。發送附件的代碼在更新之前從數據庫中提取記錄。因此,它選擇空白或舊數據。

我在負責發送附件郵件的方法開始時添加了@future(callout=true)

相關問題