我的报告的用户想知道报告是否已经打印过?如果已经打印了报告,则用户希望在下次生成报告时看到报告先前已在报告上打印过的消息。实现这一目标的最佳方法是什么?提前谢谢。
答案 0 :(得分:0)
没有关于如何实现这一目标的官方文档,但我可以采用这种方式。
ExecutionLogStorage
表包含有关已执行或导出的报告的信息
通过单击工具栏中的打印按钮打印报告时,报告将重新生成"并使用ExecutionLogStorage
将其记录在Format = 'IMAGE'
表中。
如果您将报告导出为TIFF文件,则还会生成Format = 'IMAGE'
的行。
幸运的是,还有一个ByteCount
列,其中包含"呈现报告的大小(以字节为单位)。"根据{{3}}。
在打印报告的情况下,此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页面
- 考虑MSDN:
EnableExecutionLogging
必须设为true
- 默认
ExecutionLogDaysKept
为60
,因此请相应调整此号码
对于上述查询,您可以将DataSource添加到目标ReportServer DB的报表中,如果查询的结果与报表匹配,则显示该消息。
或者,您可以安排填写另一个数据库的作业,该数据库将用于跟踪打印的报告,并在报告中查询此数据库。
答案 1 :(得分:0)
如果单击打印按钮,报告的RenderFormat.Name为IMAGE
(打印按钮实际上会在打印前将报告呈现为TIFF,因此Export as TIFF file
会产生相同的效果)
如果您使用renderformat作为proc的参数,您可以记录它打印的事实,然后显示一条消息说明。