簡體   English   中英

在報表服務器中查找現有的數據驅動訂閱

[英]Find existing data driven subscription in reportserver

我需要一個查詢來識別SSRS中所有數據驅動的訂閱。 有人知道這是否可能嗎? 我查看了訂閱表,只看到EVENTTYPE ='Timed Subscription'。

這應該提供數據驅動的訂閱列表。

SELECT  s.*
FROM dbo.Subscriptions AS s 
WHERE s.DataSettings IS NOT NULL;

如果可以避免,請不要對報表服務器的數據庫使用查詢。 無法保證它在版本之間將保持不變,並且在最壞的情況下,查詢它實際上可能會干擾Report Server的操作。

通過編寫適當的代碼以在程序中調用Web服務或使用RS.exe來使用API​​,(請參閱rs.exe實用程序和Web服務中的腳本 )。

下面是與RS.exe一起使用的腳本,您應該可以輕松地適應自己的需求。 您應該在作為Report Server管理員的用戶帳戶下運行此程序。

Public Const vbTab As String = Microsoft.VisualBasic.Constants.vbTab

Public Function ListCatalogItems() As [CatalogItem]()
    Dim items As [CatalogItem]() = Nothing

    Try
        items = rs.ListChildren("/", true)
    Catch ex As System.Web.Services.Protocols.SoapException
        Console.Error.WriteLine(ex.Detail.InnerXml)
    Catch e as Exception
        Console.Error.WriteLine(e.Message)
    End Try

    Return items
End Function

Public Function GetSubscriptions(itemPath As String) As [Subscription]()
    Dim subscriptions As [Subscription]() = Nothing

    Try
        subscriptions = rs.ListSubscriptions(itemPath, Nothing)
    Catch ex As System.Web.Services.Protocols.SoapException
        Console.Error.WriteLine(ex.Detail.InnerXml)
    Catch e as Exception
        Console.Error.WriteLine(e.Message)
    End Try

    Return subscriptions
End Function

'rs -i GetSubscriptions.rsvb -s http://MyReportServer/ReportServer
Public Sub Main()
    Console.WriteLine()

    Console.WriteLine("Getting list of items from server...")

    Dim items As [CatalogItem]() = ListCatalogItems()

    If items Is Nothing OrElse items.Length = 0 Then
        Console.WriteLine(String.Format("{0}There are no folders to process.", vbTab))
    Else
        Console.WriteLine("Checking Items for subscriptions...")
        For Each item As [CatalogItem] In items
            If item.Type = ItemTypeEnum.Report
                Dim subscriptions As [Subscription]() = GetSubscriptions(item.Path)
                For Each subscriptionItem As [Subscription] In subscriptions
                    Dim subscriptionType As String = "Subscription"

                    If subscriptionItem.IsDataDriven = True Then
                        subscriptionType = "Data driven subscription"
                    End If

                    Console.WriteLine(String.Format("{0} {1} {2} owned by {3} on report {4}.", vbTab, subscriptionType, subscriptionItem.SubscriptionID, 

subscriptionItem.Owner, subscriptionItem.Report))
                Next
            End If
        Next
    End If

    Console.WriteLine("Done.")
    Console.WriteLine()
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM