Службы отчетности - подписаться на все отчеты в папке - PullRequest
0 голосов
/ 12 марта 2012

У меня есть несколько отчетов в папке, и они будут расти со временем. Чтобы подписаться на все отчеты, пользователь должен перейти к каждому и создать подписку. Приблизительно с 10 отчетами это можно сделать, но когда есть 30 отчетов и необходимо добавить нового пользователя в подписку, это становится трудным.

Как мне создать какую-то пакетную подписку? Я имею в виду - сделать легкую подписку на все отчеты в папке и отправить ее пользователям (независимо от того, где - электронная почта или общий доступ к файлам). Есть ли какая-то административная опция или мне нужно написать какой-нибудь скрипт для ее достижения?

Среда: SQL Server 2008 R2 + SSRS 2008 R2 (Standard Edition) в W2K8 R2 (Enterprise Edition)

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Самый простой способ отправить подписку всем пользователям отчетов по электронной почте - это настроить подписку для группы электронной почты и добавлять (и удалять) пользователей из этой группы электронной почты по желанию.

Самый простой способ отправить подписку всем пользователям отчетов по общей папке - это настроить подписку на общей папке и предоставить (и удалить) доступ к этой общей папке по своему усмотрению.

НадеюсьНе знаю, как настроить эквивалент пакетной подписки.Однако должна быть возможность написать хранимую процедуру для обновления существующих расписаний или создания новых расписаний в базе данных ReportServer на основе идентификатора пользователя, переданного в запрос в качестве параметра.

Вы можете увидеть примеры запросов, которыеполучить доступ к таблицам подписки в базе данных ReportServer здесь .

1 голос
/ 22 марта 2012

Я нашел решение после этой ссылки , где используется 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...