问题
The user of my report would like to know if the report has already been printed? If the report has already been printed then the user would like to see a message that the report has already been printed previously on the report next time the report is generated. what is the best way to achieve this? Thanks in advance.
回答1:
There is no official documentation on how to achieve this, but I there could be a way of doing this.
The ExecutionLogStorage
table contains information about reports executed or exported.
When you print a report by clicking on the print button in the toolbar, the report is "re-generated" and it is logged in the ExecutionLogStorage
table, with Format = 'IMAGE'
.
If you export your report as a TIFF file, a line is also generated with Format = 'IMAGE'
.
Fortunately, there is also a ByteCount
column, which contains the "Size of rendered reports in bytes." according to MSDN.
This ByteCount
column contains 0
in the case the report is printed, and the image size if you do an image export.
So I ended up with the following query, that you can execute in the 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
I just kept key columns here and of course you can you can adapt it to fit your need, and maybe do a group by
to have print counts per report.
Important notes:
- This worked in my case but it is not officially supported, so do not be surprised if it doesn't work for you.
- It can be obvious for most people but this will not work if the user prints the report in any other way than clicking on the print report button, like:
- Exporting the report in any format (PDF, Excel, Doc)
- CTRL + P the page
- Take Server Properties into account:
EnableExecutionLogging
must be set totrue
- The default
ExecutionLogDaysKept
is60
so adjust this number accordingly
In your case with the above query, you could add a DataSource to your report targetting the ReportServer DB, and if the query has a result matching the report, display the message.
Alternatively, you could schedule a job filling another DB that will be used to keep track of the reports printed, and query this DB in the report.
回答2:
If you click the print button, the RenderFormat.Name of the report is IMAGE
(The print button actually renders the report as a TIFF prior to printing, so Export as TIFF file
would have the same effect)
if you're using the renderformat as a parameter to an proc, you could log the fact it was printed, and subsequently display a message saying so.
来源:https://stackoverflow.com/questions/30924983/how-to-know-if-a-report-is-already-printed-in-ssrs