Reporting Service

13/06/2006 - 14:33 por Carlos Maggiotti | Informe spam
Buenas gente...

Hay manera de generar un Reporte de Reporting Service via codigo (Al mejor
estilo crystal reports)?

Saludos y gracias de antemano...
CarlosMag
 

Leer las respuestas

#1 Luis Miguel Blanco
14/06/2006 - 18:11 | Informe spam
Hola Carlos

Puedes conseguir generar un informe para Reporting Services desde el código
de tu aplicación. Para ello, en primer lugar debes establecer una referencia
hacia el servicio web correspondiente a Reporting Services, el cual ofrece un
conjunto de métodos para su manipulación por código. El ejemplo que te
expongo está realizado con SQL Server 2005, pero creo que podrías adaptarlo
si es necesario para la versión de Reporting de SQL Server 2000.

Si has utilizado los nombres predeterminados en la instalación de Reporting,
la ruta de este servicio web será similar a la siguiente:

http://localhost/ReportServer/Repor...e2005.asmx

A continuación debes echar un vistazo a un archivo .rdl que ya tengas creado
y observar su estructura para poder generar por código uno acorde a tus
necesidades. Ya que el código rdl no es otra cosa que xml, puedes usar la
clase XmlTextWriter para generar este archivo. A continuación te adjunto un
bloque de código como ejemplo de lo que podría ser este proceso. Debes tener
en cuenta que tendrías que completarlo con la generación del resto de
etiquetas y atributos xml para el archivo, pero esto lo puedes ver fácilmente
en cualquier rdl que hayas creado anteriormente:

'//////////////////////////////
Imports System.IO
Imports System.Xml
Imports System.Text
Imports MiProyecto.WSReportService
Imports System.Net
'
Dim oArchivoStream As FileStream = New
FileStream("c:\pruebasReporting\MiReport1.rdl", FileMode.CreateNew)
Dim oEscritorXML As XmlTextWriter = New XmlTextWriter(oArchivoStream,
Encoding.UTF8)
oEscritorXML.Formatting = Formatting.Indented

oEscritorXML.WriteProcessingInstruction("xml", "version=""1.0""
encoding=""utf-8""")
oEscritorXML.WriteStartElement("Report")
oEscritorXML.WriteAttributeString("xmlns",
"http://schemas.microsoft.com/sqlser...tion")

oEscritorXML.WriteElementString("Width", "10.50cm")
oEscritorXML.WriteElementString("PageWidth", "20cm")
oEscritorXML.WriteElementString("PageHeight", "28.5cm")

oEscritorXML.WriteStartElement("DataSources")
oEscritorXML.WriteStartElement("DataSource")
oEscritorXML.WriteAttributeString("Name", "dsNorthwind")
oEscritorXML.WriteStartElement("ConnectionProperties")
oEscritorXML.WriteElementString("DataProvider", "SQL")
oEscritorXML.WriteElementString("ConnectString", "Data
Source=localhost;Initial Catalog=Northwind")
oEscritorXML.WriteElementString("IntegratedSecurity", "true")
oEscritorXML.WriteEndElement()
oEscritorXML.WriteEndElement()
oEscritorXML.WriteEndElement()

oEscritorXML.WriteStartElement("DataSets")
oEscritorXML.WriteStartElement("DataSet")
oEscritorXML.WriteAttributeString("Name", "dsDatos")
oEscritorXML.WriteStartElement("Fields")
oEscritorXML.WriteStartElement("Field")
oEscritorXML.WriteAttributeString("Name", "LastName")
oEscritorXML.WriteElementString("DataField", "LastName")
oEscritorXML.WriteEndElement()
oEscritorXML.WriteStartElement("Field")
oEscritorXML.WriteAttributeString("Name", "FirstName")
oEscritorXML.WriteElementString("DataField", "FirstName")
oEscritorXML.WriteEndElement()
oEscritorXML.WriteEndElement()
oEscritorXML.WriteStartElement("Query")
oEscritorXML.WriteElementString("DataSourceName", "dsNorthwind")
oEscritorXML.WriteElementString("CommandType", "Text")
oEscritorXML.WriteElementString("CommandText", "SELECT LastName,FirstName
FROM Employees")
oEscritorXML.WriteEndElement()
oEscritorXML.WriteEndElement()
oEscritorXML.WriteEndElement()

oEscritorXML.WriteStartElement("Body")
oEscritorXML.WriteElementString("Height", "1.85cm")
oEscritorXML.WriteStartElement("ReportItems")
oEscritorXML.WriteStartElement("Table")
oEscritorXML.WriteAttributeString("Name", "tblInforme")
oEscritorXML.WriteElementString("Top", "0.5cm")
oEscritorXML.WriteElementString("Left", "0.3cm")
oEscritorXML.WriteElementString("DataSetName", "dsDatos")
'
'
' volcar el buffer de escritura en el stream asociado
oEscritorXML.Flush()
oArchivoStream.Close()
oArchivoStream.Dispose()
oArchivoStream = Nothing
'//////////////////////////////

Por último abres el archivo .rdl y lo pasas a un array de bytes; instancias
un objeto del servicio web de Reporting Services y ejecutas su método
CreateReport(), pasándole como parámetro el array que contiene la definición
de tu informe, y si todo ha ido bien, ya podrías ver en la consola de SQL
Server 2005, en la parte correspondiente a Reporting tu nuevo informe.

'//////////////////////////////
oArchivoStream = New FileStream("c:\pruebasReporting\MiReport1.rdl",
FileMode.Open)
Dim aInforme() As Byte = New Byte(oArchivoStream.Length) {}
oArchivoStream.Read(aInforme, 0, oArchivoStream.Length)
oArchivoStream.Close()

Dim oWSReporting As ReportingService2005 = New ReportingService2005()
oWSReporting.Credentials = CredentialCache.DefaultCredentials

Dim aAvisos() As Warning
aAvisos = oWSReporting.CreateReport(Me.txtNombreInforme.Text,
"/ReportPropio", True, aInforme, Nothing)

If aAvisos IsNot Nothing Then
For Each oAviso As Warning In aAvisos
MessageBox.Show(oAviso.Message)
Next
End If
'//////////////////////////////

Y esto sería todo, espero que te sea de utilidad.
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Carlos Maggiotti" wrote:

Buenas gente...

Hay manera de generar un Reporte de Reporting Service via codigo (Al mejor
estilo crystal reports)?

Saludos y gracias de antemano...
CarlosMag



Preguntas similares