我是SSRS的新手,我正在尝试找到一种方法来了解计划报告何时在服务器上实际启动,何时成功完成失败以及是否已取消。截至目前,我正在使用ReportingService2010类API与报表服务器进行通信,对我来说,唯一可行的方法是制作一些自定义内容,用于在启动事件的这些时间检查计划和触发事件并扫描我要保存报告的文件夹以及添加新文件时,我知道报告已成功创建,并且可能在x时间后添加超时事件。
我不认为这是一种非常干净的方法,我确信你们可能会有一个更简单的答案,因为我确信必须有一种方法可以做到这一点,而无需手动扫描一切。
我使用ListJobs()方法访问当前在服务器上运行的所有作业,但它似乎没有考虑订阅何时完成,因为我只在ListJobs()方法中获得结果当我手动点击"立即运行"用于服务器上的特定报告。
你们有什么想法吗?
非常感谢,
克劳德
答案 0 :(得分: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];