基于非空结果集条件发送Apex报表至邮箱的实现方法咨询
在Apex中实现结果集非空时发送静态报表邮件
完全可以实现这个需求,核心逻辑是先判断结果集是否非空,再触发报表生成与邮件发送,以下是具体实现步骤和代码示例:
1. 核心逻辑流程
- 查询目标数据,判断结果集是否存在记录
- 若结果集非空,调用你已创建的静态Apex报表生成逻辑,获取报表内容(HTML/PDF均可)
- 构建邮件并发送至指定邮箱
- 可选:将逻辑封装为可调度类,实现定时自动执行
2. 代码实现示例
2.1 完整调度类(含条件判断、报表生成、邮件发送)
假设你已有一个StaticReportGenerator类,其中generateHtmlReport(List<Your_Object__c> data)方法负责生成报表HTML内容:
public class ConditionalReportEmailScheduler implements Schedulable { public void execute(SchedulableContext sc) { // 步骤1:查询并判断结果集是否非空 List<Your_Object__c> targetRecords = [ SELECT Id, Name, Field1__c, Field2__c FROM Your_Object__c WHERE Your_Filter_Condition__c = true ]; if (targetRecords.isEmpty()) { System.debug('结果集为空,跳过邮件发送'); return; } // 步骤2:调用静态报表生成逻辑获取内容 String reportHtml = StaticReportGenerator.generateHtmlReport(targetRecords); // 步骤3:构建并发送邮件 Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); // 设置收件人,支持多个邮箱 mail.setToAddresses(new List<String>{'recipient1@example.com', 'recipient2@example.com'}); mail.setSubject('【业务通知】静态报表(非空结果集)'); // 把报表HTML作为邮件正文 mail.setHtmlBody(reportHtml); // 若需发送PDF附件,可添加以下逻辑(假设报表生成类有generatePdfReport方法) // Blob reportPdf = StaticReportGenerator.generatePdfReport(targetRecords); // Messaging.EmailFileAttachment attachment = new Messaging.EmailFileAttachment(); // attachment.setFileName('Business_Report_' + Date.today() + '.pdf'); // attachment.setBody(reportPdf); // mail.setFileAttachments(new List<Messaging.EmailFileAttachment>{attachment}); try { Messaging.sendEmail(new List<Messaging.SingleEmailMessage>{mail}); System.debug('报表邮件发送成功'); } catch (Exception e) { System.debug('邮件发送失败:' + e.getMessage()); // 可选:将错误信息记录到自定义日志对象或Platform Events } } }
2.2 调度类的配置
完成类编写后,在Salesforce后台配置定时执行:
- 进入Setup > Apex Classes页面
- 点击Schedule Apex按钮
- 选择
ConditionalReportEmailScheduler类,设置调度频率(如每日凌晨2点执行) - 保存配置即可
3. 注意事项
- 邮件限额:Salesforce对不同许可证有每日邮件发送限额,需确保操作在限额范围内
- 查询效率:若目标数据量较大,建议使用
Database.getQueryLocator替代普通List查询,避免SOQL超时 - 报表格式:若生成HTML报表,需确保内容兼容主流邮件客户端(避免使用复杂CSS,尽量用内联样式)
- 错误监控:建议添加错误日志记录,方便排查邮件发送或报表生成失败的问题
内容的提问来源于stack exchange,提问作者Kris
相关产品推荐
相关产品推荐

