Salesforce 把报表作为邮件附件

208 阅读1分钟

在lightning页面中,是可以导出报表数据的,如果需要把导出的Excel发给非SF用户,就无法使用订阅功能,只能截取它的Excel链接,然后生成Excel文件。

通过抓包工具,可以截取到2个链接:

1)/' + report.Id + '?csv=1&exp=1&enc=UTF-8&isdtp=p1

2)/?ec=302&startURL=%2Fservlet%2FPrintableViewDownloadServlet%3Fisdtp%3Dp1%26reportId%3D' + report.Id + '%26detailsOnly%3Dtrue&isdtp=p1

第一个链接用于生成.csv格式,第二个链接用于生成.xlsx格式。

通过Apex实现邮件发送,并携带报表数据作为附件

// 构建邮箱
List<String> toAddressList = new List<String>{'xxx@qq.com'};  
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();  
mail.setToAddresses(toAddressList);  
mail.setSubject('标题');  
mail.setHtmlBody('内容');  

// 携带附件
Messaging.EmailFileAttachment emlAtt = new Messaging.EmailFileAttachment();  
emlAtt.setFilename('report.xlsx');  
mail.setFileAttachments(new List<Messaging.EmailFileAttachment>{emlAtt}); 

// xlsx格式
String reportId = '';  // todo 
String reportUrl = '/?ec=302&startURL=%2Fservlet%2FPrintableViewDownloadServlet%3Fisdtp%3Dp1%26reportId%3D' + reportId + '%26detailsOnly%3Dtrue&isdtp=p1&enc=GB2312';  
ApexPages.PageReference reportPage = new ApexPages.PageReference(reportUrl);
emlAtt.setBody(reportPage.getContent());  

// 执行发送
Messaging.sendEmail(new List<Messaging.Email>{mail});

参考文章:How can I export a report as a CSV/Excel file and send the report as Email Attachement using Apex Class?