Я нашел решение после этой ссылки , где используется rs.exe
.По сути это пример от 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 = "my.address@email.com"
extensionParams(1) = New ParameterValue()
extensionParams(1).Name = "ReplyTo"
extensionParams(1).Value = "admin@email.com"
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 становится очень грязно с большим количеством расписаний отчетов, поэтому я изменил его на использование shared schedule .Разница заключается в объявлении scheduleXml
- вы используете идентификатор расписания вместо строки XML:
Dim scheduleXml As String = "924b9bb6-2340-4f5c-a897-465af7ff310e"
Как получить идентификатор расписания:
-- 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