【发布时间】:2015-06-18 20:15:16
【问题描述】:
报告的用户想知道报告是否已经打印?如果报告已经被打印,那么用户希望在下次生成报告时在报告上看到先前已经打印报告的消息。实现这一目标的最佳方法是什么?提前致谢。
【问题讨论】:
-
你找到解决办法了吗?
标签: reporting-services ssrs-2008 ssrs-2008-r2 reportingservices-2005 ssrs-2012
报告的用户想知道报告是否已经打印?如果报告已经被打印,那么用户希望在下次生成报告时在报告上看到先前已经打印报告的消息。实现这一目标的最佳方法是什么?提前致谢。
【问题讨论】:
标签: reporting-services ssrs-2008 ssrs-2008-r2 reportingservices-2005 ssrs-2012
没有关于如何实现这一点的官方文档,但我可能有办法做到这一点。
ExecutionLogStorage 表包含有关执行或导出的报告的信息。
当您通过单击工具栏中的打印按钮打印报告时,该报告将“重新生成”并记录在ExecutionLogStorage 表中,并带有Format = 'IMAGE'。
如果您将报告导出为 TIFF 文件,还会生成一行带有Format = 'IMAGE'。
幸运的是,还有一个ByteCount 列,其中包含“呈现报告的大小(以字节为单位)”。根据MSDN.
此ByteCount 列在打印报告的情况下包含0,如果您执行图像导出,则包含图像大小。
所以我最终得到了以下查询,您可以在 SSRS DB 中执行:
select els.[LogEntryId],
c.[Name],
c.[Path],
els.[Parameters],
els.[UserName],
els.[TimeStart],
els.[TimeEnd]
from [dbo].[ExecutionLogStorage] els
left join [dbo].[Catalog] c on els.[ReportID] = c.[ItemID]
where els.[Format] = 'IMAGE'
and els.[ByteCount] = 0
order by els.[LogEntryId] desc
我只是在此处保留了关键列,当然您可以对其进行调整以满足您的需要,也许可以通过group by 来获得每个报告的打印计数。
重要提示:
- 这在我的情况下有效,但它不受官方支持,所以如果它不适合您,请不要感到惊讶。
- 这对于大多数人来说是显而易见的,但如果用户以任何其他方式打印报告而不是单击打印报告,这将不起作用 按钮,例如:
- 以任何格式(PDF、Excel、Doc)导出报告
- CTRL + P 页面
- 考虑Server Properties:
EnableExecutionLogging必须设置为true- 默认的
ExecutionLogDaysKept是60,所以相应地调整这个数字
在您使用上述查询的情况下,您可以将 DataSource 添加到以 ReportServer DB 为目标的报告中,如果查询的结果与报告匹配,则显示消息。
或者,您可以安排一个作业来填充另一个数据库,该数据库将用于跟踪打印的报告,并在报告中查询该数据库。
【讨论】:
如果单击打印按钮,则报表的 RenderFormat.Name 为IMAGE(打印按钮实际上在打印之前将报表呈现为 TIFF,因此 Export as TIFF file 将具有相同的效果)
如果您使用渲染格式作为 proc 的参数,您可以记录它被打印的事实,然后显示一条消息。
【讨论】: