Как узнать, напечатан ли отчет в SSRS?

Пользователь моего отчета хотел бы знать, напечатан ли уже отчет? Если отчет уже был распечатан, то пользователь хотел бы видеть сообщение о том, что отчет уже был напечатан ранее в отчете при следующем создании отчета. каков наилучший способ добиться этого? Заранее спасибо.


person user3577463    schedule 18.06.2015    source источник
comment
Вы нашли решение?   -  person Sébastien Sevrin    schedule 27.06.2015


Ответы (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 to true
    • По умолчанию ExecutionLogDaysKept равно 60, поэтому измените это число соответствующим образом.

В вашем случае с приведенным выше запросом вы можете добавить источник данных в свой отчет, нацеленный на базу данных ReportServer, и, если запрос имеет результат, соответствующий отчету, отобразить сообщение.

В качестве альтернативы вы можете запланировать задание, заполняющее другую базу данных, которая будет использоваться для отслеживания напечатанных отчетов, и запрашивать эту базу данных в отчете.

person Sébastien Sevrin    schedule 19.06.2015

Если вы нажмете кнопку печати, RenderFormat.Name отчета будет IMAGE (кнопка печати фактически отображает отчет в формате TIFF перед печатью, поэтому Export as TIFF file будет иметь тот же эффект)

если вы используете формат рендеринга в качестве параметра для процедуры, вы можете зарегистрировать факт его печати и впоследствии отобразить сообщение об этом.

person Trubs    schedule 20.07.2015