You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于非空结果集条件发送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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 05:04:58