0

我对 SSRS 很陌生,我正在尝试找到一种方法来了解计划报告何时在服务器上实际启动、何时完成并成功失败以及是否被取消。截至目前,我正在使用 ReportingService2010 类 API 与报告服务器对话,我认为唯一可行的方法是进行自定义,在这些时间检查计划和触发事件以查找已启动的事件并扫描我要保存报告的文件夹,当添加新文件时,我知道报告已成功创建,并且可能会在 x 时间后添加一个超时事件。

我认为这不是一个真正干净的方法,我相信你们可能有一个更简单的答案,因为我确信必须有一种方法可以在不手动扫描所有内容的情况下做到这一点。

我使用 ListJobs() 方法访问服务器上当前正在运行的所有作业,但它似乎没有考虑何时完成订阅,因为当我手动单击时,我只在 ListJobs() 方法中得到结果服务器上的特定报告的“立即运行”。

你们有什么想法吗?

非常感谢,

克劳德

4

1 回答 1

1

“ReportServer”数据库中的表格很少,可以为您提供大部分信息。例如 Subscriptions 表有 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];
于 2017-07-07T15:58:36.113 回答