Пользователь моего отчета хотел бы знать, напечатан ли уже отчет? Если отчет уже был распечатан, то пользователь хотел бы видеть сообщение о том, что отчет уже был напечатан ранее в отчете при следующем создании отчета. каков наилучший способ добиться этого? Заранее спасибо.
Как узнать, напечатан ли отчет в SSRS?
Ответы (2)
Официальной документации о том, как этого добиться, нет, но я мог бы это сделать.
Таблица ExecutionLogStorage
содержит информацию об выполненных или экспортированных отчетах.
Когда вы печатаете отчет, нажимая кнопку печати на панели инструментов, отчет "создается повторно" и регистрируется в таблице ExecutionLogStorage
с Format = 'IMAGE'
.
Если вы экспортируете отчет в виде файла TIFF, строка также создается с Format = 'IMAGE'
.
К счастью, есть еще столбец ByteCount
, который содержит «Размер отображаемых отчетов в байтах». согласно MSDN.
Этот столбец ByteCount
содержит 0
в случае, если отчет распечатывается, и размер изображения, если вы экспортируете изображение.
Итак, я получил следующий запрос, который вы можете выполнить в БД SSRS:
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
, чтобы иметь количество распечаток в отчете.
Важные примечания:
- В моем случае это сработало, но официально не поддерживается, так что не удивляйтесь, если это не сработает у вас.
- 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 страница
- Take Server Properties into account:
EnableExecutionLogging
must be set totrue
- По умолчанию
ExecutionLogDaysKept
равно60
, поэтому измените это число соответствующим образом.
В вашем случае с приведенным выше запросом вы можете добавить источник данных в свой отчет, нацеленный на базу данных ReportServer, и, если запрос имеет результат, соответствующий отчету, отобразить сообщение.
В качестве альтернативы вы можете запланировать задание, заполняющее другую базу данных, которая будет использоваться для отслеживания напечатанных отчетов, и запрашивать эту базу данных в отчете.
Если вы нажмете кнопку печати, RenderFormat.Name отчета будет IMAGE
(кнопка печати фактически отображает отчет в формате TIFF перед печатью, поэтому Export as TIFF file
будет иметь тот же эффект)
если вы используете формат рендеринга в качестве параметра для процедуры, вы можете зарегистрировать факт его печати и впоследствии отобразить сообщение об этом.