I can not beleive how hard it is to deploy reports to production! Its
easy for development. Just tell visual studio where the server is and
bang! its done. I spent most of today trying to figure out how to
deploy to production without having to manually upload each report
through the web interface and then manually linking them to my shared
data source.
I tried writing a vb script to do it which I got
90% their but could not link to a shared datasource. Microsofts
documentation of the scripting commands you can do ARE GARBAGE! when
trying to set a property you need to send a name value pair (which is
fine) but there is no docs I could find that say what the strings are
that I can pass to it. But I digress.
In the end I found this tool:
http://www.sqldbatips.com/showarticle.asp?ID=62
This
person wrote a tool that connects to my development RS and generates a
folder of scripts along with a batch file to run them all. I opened the
batch file, changed the server to production and a couple of minutes
later I was …..happy? yes. that is the word.
For those of you
that want to deploy reports with a shared datasource via a manual
script (using the rs.exe program to execute it) here is a snip of one
of the scripts:
Public Sub Main() Dim name As String = "Allocation Report" Dim parent As String = "/MyProgram.ReportStaging" Dim location As String = "c:\tempreports\Allocation Report.rdl" Dim overwrite As Boolean = True Dim reportContents As Byte() = Nothing Dim warnings As Warning() = Nothing Dim fullpath As String = parent + "/" + name
'Common CatalogItem properties Dim descprop As New [Property] descprop.Name = "Description" descprop.Value = "" Dim hiddenprop As New [Property] hiddenprop.Name = "Hidden" hiddenprop.Value = "False"
Dim props(1) As [Property] props(0) = descprop props(1) = hiddenprop
'Read RDL definition from disk Try Dim stream As FileStream = File.OpenRead(location) reportContents = New [Byte](stream.Length) {} stream.Read(reportContents, 0, CInt(stream.Length)) stream.Close()
warnings = RS.CreateReport(name, parent, overwrite, reportContents, props)
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", name) End If
'Set report DataSource references Dim dataSources(0) As DataSource
Dim dsr0 As New DataSourceReference dsr0.Reference = "/MyProgram.ReportStaging/dsMyProgram" Dim ds0 As New DataSource ds0.Item = CType(dsr0, DataSourceDefinitionOrReference) ds0.Name="dsMyProgram" dataSources(0) = ds0
RS.SetReportDataSources(fullpath, dataSources)
Console.Writeline("Report DataSources set successfully")
Catch e As IOException Console.WriteLine(e.Message) Catch e As SoapException Console.WriteLine("Error : " + e.Detail.Item("ErrorCode").InnerText + " (" + e.Detail.Item("Message").InnerText + ")") End TryEnd Sub
Recent Comments