如何在D365FO中实现批处理作业完成后自动将SSRS报表附入邮件
无本地下载的SSRS PDF报表自动邮件发送实现方案
以下是3种可直接落地的实现路径:
方案1:使用SSRS原生订阅功能(无代码,最推荐)
- 在SSRS web门户为目标报表配置数据驱动订阅,触发方式选择「按需触发」
- 传递选项设置为「电子邮件」,输出格式指定为PDF,无需配置任何本地导出路径,SSRS服务会在内存中完成PDF渲染,直接挂载为邮件附件发送,全程不会在本地磁盘落盘
- 与批处理作业联动的方式:批处理作业执行完成后,在作业末尾调用SSRS的触发存储过程
exec ReportServer.dbo.AddEvent @EventType='TimedSubscription', @EventData='你的订阅ID'即可触发订阅发送邮件
方案2:调用SSRS API自定义实现
如果需要更灵活的逻辑控制,可以通过调用SSRS的API实现:
- 调用SSRS的
Render接口,指定输出格式为PDF,直接获取报表的字节流,不需要写入本地磁盘 - 将字节流直接封装为邮件附件,调用SMTP服务发送即可
参考C#代码片段:
// 初始化SSRS服务客户端 ReportExecutionService rs = new ReportExecutionService(); rs.Credentials = System.Net.CredentialCache.DefaultCredentials; rs.Url = "http://你的SSRS服务地址/ReportExecution2005.asmx"; // 渲染报表获取PDF字节流 byte[] reportPdfBytes = rs.Render("/你的报表路径", "PDF", null, null, 报表参数数组, null, null, out _, out _, out _, out _, out _, out _); // 直接用字节流构造邮件附件,无本地文件生成 Attachment pdfAttachment = new Attachment(new MemoryStream(reportPdfBytes), "目标报表名称.pdf", "application/pdf");
方案3:SQL Server Agent作业直接实现
如果你的批处理作业是通过SQL Server Agent调度的,可以直接在作业中加步骤实现:
- 批处理步骤完成后新增T-SQL步骤,调用
sp_send_dbmail存储过程 - 可以直接调用SSRS渲染逻辑拿到PDF流作为附件,无需本地存储
你之前收到的「report reference」相关建议,对应的是SSRS订阅配置中的目标报表引用配置,直接在订阅创建页指定目标报表路径即可,无需查找额外的独立资料。
内容的提问来源于stack exchange,提问作者mepemba
相关产品推荐
相关产品推荐

