2012-03-12 78 views
0

我有很多的文件夾中的報告,並將在一段時間增長。要訂閱所有報告,用戶必須前往每個報告並創建訂閱。有大約10個報告是可管理的,但是當有30個報告並且新用戶應該被添加到訂閱中時,這變得越來越困難。報告服務 - 訂閱所有報告文件夾

我怎麼能創造某種批量訂購的?我的意思是 - 輕鬆訂閱文件夾中的所有報告並將其發送給用戶(不管在哪裏 - 電子郵件或文件共享)。是否有一些管理選項,或者我應該寫一些腳本來實現它?

環境:SQL Server 2008 R2上W2K8 R2 + SSRS 2008 R2(標準版)(企業版)

回答

1

我發現以下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 
2

通過電子郵件訂閱發送給所有報告的用戶,最簡單的方法是設置了認購在電子郵件組上,並根據需要添加(並刪除)該電子郵件組中的用戶。

通過文件共享訂閱發送給所有報告的用戶最簡單的方法是根據需要建立一個文件共享的訂閱,並授予(和刪除)訪問該文件共享。

我不知道任何方式建立了一批訂購的等價物。但是,應該可以編寫存儲過程來更新現有計劃或根據傳遞給查詢的用戶ID作爲參數在ReportServer數據庫中創建新計劃。

您可以查看訪問ReportServer數據庫here上的訂閱表的查詢示例。

+0

我別無選擇,(還)來管理電子郵件組。 ReportServer數據庫操作看起來很有前景。我會試一試。 – BartekR 2012-03-15 06:24:23