График подписки на 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];
Другие вопросы по тегам