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ť
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
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.