График подписки на SSRS начался / завершен
Я довольно новичок в SSRS, и я пытаюсь найти способ узнать, когда запланированный отчет действительно запускается на сервере, когда он завершился с успехом сбоя и был ли он отменен. На данный момент я использую API класса ReportingService2010 для связи с сервером отчетов, и единственный способ, который мне кажется возможным, - это сделать что-то нестандартное, чтобы проверять расписания и запускать события в это время на предмет запущенных событий и сканировать папка, в которую я собираюсь сохранить отчет, и когда добавляется новый файл, я знаю, что отчет был успешно создан, и, возможно, добавлю событие Timeout через x раз.
Я не думаю, что это действительно чистый подход, и я уверен, что у вас, ребята, может быть более простой ответ, потому что я уверен, что должен быть способ сделать это без ручного сканирования всего.
Я использовал метод ListJobs() для доступа ко всем работам, которые в данный момент выполняются на сервере, но он, похоже, не учитывает, когда подписка завершена, потому что я получаю результаты в методе ListJobs(), только когда вручную нажимаю на "Запустить сейчас" для конкретного отчета на сервере.
Ребята, у вас есть идеи?
Большое спасибо,
Клод
1 ответ
В базе данных ReportServer есть несколько таблиц, которые предоставляют вам большую часть вашей информации. например, таблица подписок имеет столбец LastStatus, он показывает, сколько подписок было обработано, и состояние отчетов в последний раз. например, 'Готово: 2 обработано из 2 всего; 0 ошибок "," В ожидании ",
Пример запроса будет таким, как показано ниже, он предназначен для получения расписания, но вы можете проверять и изменять его по мере необходимости.
Настройте новый отчет с этим запросом и запланируйте его в соответствии с вашими потребностями, чтобы дать вам статус.
SELECT CAT.Name
,CAT.[Path] AS ReportPath
,SUB.LastRunTime
,SCH.NextRunTime
,CONVERT(VARCHAR(10), CONVERT(datetime, SCH.NextRunTime, 1), 101) As RunDate
,right(convert(varchar(32),SCH.NextRunTime,100),8) As RunTime
,SUB.[Description]
,SUB.EventType
,SUB.LastStatus
,SUB.ModifiedDate
,SCH.Name AS ScheduleName
FROM reportserver.dbo.Subscriptions AS SUB
INNER JOIN reportserver.dbo.Users AS USR
ON SUB.OwnerID = USR.UserID
INNER JOIN reportserver.dbo.[Catalog] AS CAT
ON SUB.Report_OID = CAT.ItemID
INNER JOIN reportserver.dbo.ReportSchedule AS RS
ON SUB.Report_OID = RS.ReportID
AND SUB.SubscriptionID = RS.SubscriptionID
INNER JOIN reportserver.dbo.Schedule AS SCH
ON RS.ScheduleID = SCH.ScheduleID
--Where CONVERT(VARCHAR(10), CONVERT(datetime, SCH.NextRunTime, 1), 101)
= CONVERT(VARCHAR(10), CONVERT(datetime, getDate()+1, 1), 101)
ORDER BY USR.UserName
,CAT.[Path];