报告服务 - 订阅所有报告文件夹
问题描述:
我有很多的文件夹中的报告,并将在一段时间增长。要订阅所有报告,用户必须前往每个报告并创建订阅。有大约10个报告是可管理的,但是当有30个报告并且新用户应该被添加到订阅中时,这变得越来越困难。报告服务 - 订阅所有报告文件夹
我怎么能创造某种批量订购的?我的意思是 - 轻松订阅文件夹中的所有报告并将其发送给用户(不管在哪里 - 电子邮件或文件共享)。是否有一些管理选项,或者我应该写一些脚本来实现它?
环境:SQL Server 2008 R2上W2K8 R2 + SSRS 2008 R2(标准版)(企业版)
答
我发现以下this link其中使用rs.exe
该溶液。本质上它是例子from BOL。我已经改变它来适应我的需求,它的工作原理。用法:
rs.exe -i CreateSubscriptionTest.rss -s http://myreportserveraddresshere/reportserver
' CreateSubscriptionTest.rss
Public Sub Main()
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim desc As String = "Report description"
Dim eventType As String = "TimedSubscription"
Dim scheduleXml As String = "<ScheduleDefinition><StartDateTime>2012-03-22T09:30:00</StartDateTime><WeeklyRecurrence><WeeksInterval>1</WeeksInterval><DaysOfWeek><Thursday>True</Thursday></DaysOfWeek></WeeklyRecurrence></ScheduleDefinition>"
Dim extensionParams(7) As ParameterValue
extensionParams(0) = New ParameterValue()
extensionParams(0).Name = "TO"
extensionParams(0).Value = "[email protected]"
extensionParams(1) = New ParameterValue()
extensionParams(1).Name = "ReplyTo"
extensionParams(1).Value = "[email protected]"
extensionParams(2) = New ParameterValue()
extensionParams(2).Name = "IncludeReport"
extensionParams(2).Value = "True"
extensionParams(3) = New ParameterValue()
extensionParams(3).Name = "RenderFormat"
extensionParams(3).Value = "MHTML"
extensionParams(4) = New ParameterValue()
extensionParams(4).Name = "Subject"
extensionParams(4).Value = "@ReportName was executed at @ExecutionTime"
extensionParams(5) = New ParameterValue()
extensionParams(5).Name = "Comment"
extensionParams(5).Value = "Some HTML code inside email's body<br><br>Go!"
extensionParams(6) = New ParameterValue()
extensionParams(6).Name = "IncludeLink"
extensionParams(6).Value = "True"
extensionParams(7) = New ParameterValue()
extensionParams(7).Name = "Priority"
extensionParams(7).Value = "NORMAL"
Dim parameters() As ParameterValue
' If you need setup parameters
'Dim parameter As New ParameterValue()
'parameter.Name = "EmpID"
'parameter.Value = "288"
'parameters(0) = parameter
'parameter.Name = "ReportMonth"
'parameter.Value = "12"
'parameters(1) = parameter
'parameter.Name = "ReportYear"
'parameter.Value = "2003"
'parameters(2) = parameter
Dim matchData As String = scheduleXml
Dim extSettings As New ExtensionSettings()
extSettings.ParameterValues = extensionParams
extSettings.Extension = "Report Server Email"
Dim returnValue As String
Dim reports() As String = { _
"/MyReports/Executive/SalesYear", _
"/MyReports/Executive/SalesMonth", _
"/MyReports/Executive/SalesWeek"}
For Each report As String In reports
returnValue = rs.CreateSubscription(report, extSettings, desc, eventType, matchData, parameters)
Console.WriteLine(returnValue)
Next
End Sub 'Main
的关键部分是定义reports()
与报告名称变量。名称是完整的报告路径。
上面的例子为每个订阅创建新的调度。在SQL Server Agent中,由于报表的时间安排太多,所以我将其更改为使用共享时间表。所不同的是在scheduleXml
声明 - 您使用调度ID而不是XML字符串:
Dim scheduleXml As String = "924b9bb6-2340-4f5c-a897-465af7ff310e"
你怎么能获得时间表ID:
-- using T-SQL
SELECT
ScheduleID,
Name
FROM ReportServer.dbo.Schedule
WHERE
EventType = 'SharedSchedule'
' using rss file: GetSchedulers.rss
' run with rs.exe -i GetSchedulers.rss -s http://myreportserveraddresshere/reportserver
Public Sub Main()
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
Dim returnValue As Schedule()
returnValue = rs.ListSchedules()
For Each sch As Schedule In returnValue
Console.WriteLine(sch.ScheduleID & " - " & sch.name)
Next
End Sub 'Main
答
通过电子邮件订阅发送给所有报告的用户,最简单的方法是设置了认购在电子邮件组上,并根据需要添加(并删除)该电子邮件组中的用户。
通过文件共享订阅发送给所有报告的用户最简单的方法是根据需要建立一个文件共享的订阅,并授予(和删除)访问该文件共享。
我不知道任何方式建立了一批订购的等价物。但是,应该可以编写存储过程来更新现有计划或根据传递给查询的用户ID作为参数在ReportServer数据库中创建新计划。
您可以查看访问ReportServer数据库here上的订阅表的查询示例。
我别无选择,(还)来管理电子邮件组。 ReportServer数据库操作看起来很有前景。我会试一试。 – BartekR 2012-03-15 06:24:23