Skriptovanie nad Reporting Services

Publikoval Michal Kočí dňa 22.1.2006 o 22:50 v kategórii SQL

Ak používate Reporting Services a potrebujete vypublikovať nejaký report priamo z Visual Studia, nie je to žiaden problém. Na problém však narazíte, ak potrebujete vypublikovať report v prostredí, kde Visual Studio nemáte (napríklad u zákazníka). Ak sa jedná o jeden, alebo malé množstvo reportov, môžete ho (ich) vypublikovať ručne. Ak sa však jedná o väčšie množstvo reportov, alebo reporty musíte publikovať často, vtedy sa hodí nástroj, ktorý túto činnosť zautomatizuje. Ak si taký nástroj nechcete písať sami, môžete použiť utilitu RS, dodávaný priamo ako súčasť Reporting Services.

Utilita RS slúži na spúštanie skriptov v jazyku Visual Basic.Net (bohužial nie je možné použiť C#). Automaticky pre Vás vytvorí proxy k webovej službe, takže využívate metódy priamo tejto web služby. Skript treba uložiť do súboru s príponou .rss a spustiť ho nástrojom RS (tento sa pri štandardnej inštalácii nachádza v adresári c:\Program Files\Microsoft SQL Server\80\Tools\Binn), napríklad takto:

RS.exe -i Publish.rss -s http://localhost/reportserver

Musíte dodržať formát skriptovacieho súboru, ale v zásade sa jedná len o to, aby skript obsahoval metódu Main. O tom, že vytvorenie skriptu je jednoduché sa môžete púresvedčiť v ukážkovom skripte, ktorý by sa mal tiež nainštalovať pri inštalácii Reporting Services (ja som ho síce na disku nenašiel, zrejme som si nedal nainštalovať príklady, ale dá sa nájsť aj na inštalačnom CD) do podadresára Samples\Scripts adresára kde máte nainštalované Reporting Services.

Ukážkový skript PublishSampleReports.rss dokáže vypublikovať reporty a keď z neho odstránite nepotrebné funkcie a jemne si ho zmodifikujete, môžete ho použiť na pravidelné publikovavie zostáv. Môžete tak napríklad zákazníkovi poslať

  • CMD súbor, ktorý bude spúšťat váš publikačný skript
  • RSS súbor, ktorý bude publikovať zostavy
  • RDL súbory obsahujúce samotné zostavy

Prerobený publikačný skript by mohol potom vyzerať približne takto:

Dim definition As [Byte]() = Nothing
Dim warnings As Warning() = Nothing
Dim parentPath As String = "/Priecinok V RS Pre Moje Reporty"
Dim filePath As String = "C:\adresar_kde_mam_vsetko_ulozene\"

Public Sub Main()

    rs.Credentials = System.Net.CredentialCache.DefaultCredentials

    ' Vypublikejete zostavy do pozadovaneho priecinka v RS
    PublishReport("MyReport1")
    PublishReport("MyReport2")

End Sub

Public Sub PublishReport(ByVal reportName As String)

    Try
        Dim stream As FileStream = File.OpenRead(filePath + reportName + ".rdl")
        definition = New [Byte](stream.Length) {}
        stream.Read(definition, 0, CInt(stream.Length))
        stream.Close()

    Catch e As IOException
        Console.WriteLine(e.Message)
    End Try

    Try
        warnings = rs.CreateReport(reportName, parentPath, False, definition, Nothing)

        If Not (warnings Is Nothing) Then
            Dim warning As Warning
            For Each warning In warnings
                Console.WriteLine(warning.Message)
            Next warning

        Else
            Console.WriteLine("Report: {0} published successfully with no warnings", reportName)
        End If

    Catch e As Exception
        Console.WriteLine(e.Message)
    End Try
    
End Sub

Mohlo by ťa tiež zaujímať

Páčil sa ti príspevok?

Zdieľaj príspevok alebo si ho odlož na neskôr

Sleduj ma

Ak nechceš premeškať príspevky ako je tento, sleduj ma na Twitteri, alebo ak máš RSS čítačku, môžeš sledovať môj RSS kanál.