2008-12-15 23 views
14

Estoy buscando un poco de ayuda para pasar parámetros mediante programación a un informe de SSRS a través de VB.NET y ASP.NET. Parece que debería ser una tarea relativamente simple, pero no he tenido mucha suerte para encontrar ayuda.Cómo pasar parámetros al informe de SSRS mediante programación

¿Alguien tiene alguna sugerencia sobre dónde ir para obtener ayuda con esto, o tal vez incluso algún código de muestra?

Gracias.

Respuesta

15

Puede hacer lo siguiente ,: (funciona tanto en los informes locales como en los informes completos de SSRS). pero en modo de pantalla completa, utilice la clase apropiada, la parte parámetro sigue siendo el mismo)

LocalReport myReport = new LocalReport(); 
myReport.ReportPath = Server.MapPath("~/Path/To/Report.rdlc"); 

ReportParameter myParam = new ReportParameter("ParamName", "ParamValue"); 
myReport.SetParameters(new ReportParameter[] { myParam }); 

// more code here to render report 
+1

¿Qué sucede si no estoy usando informes locales pero no quiero dejar valores explícitos en la url? – Leonardo

11

Si el servidor de informes se puede acceder directamente, puede pasar parámetros en la cadena de consulta si se accede a la repoort con una URL:

http://MyServer/ReportServer/?MyReport&rs:Command=Render&Param1=54321&Param2=product

Puede agregar formato de salida añadiendo lo siguiente en el extremo de la dirección URL:

& RS: Formato Excel =

o

& rs: Formato = PDF

+1

Al pasar los parámetros como una URL parece que abre la puerta a alguien para cortar su informe. Esto podría estar bien para un sitio interno, pero probablemente no para un sitio público. – LunaCrescens

1

Ha sido un tiempo desde que hice este código, pero puede ayudar: su proyecto web tiene que ser un sitio Web, y no un proyecto de tipo "Aplicación web ASP.Net", o no podrá agregar la referencia mencionada a continuación. Haga clic con el botón derecho en el proyecto y agregue una carpeta ASP.Net - App_WebReferences. Tendrá que especificar el servidor donde está su SRS; elige el .asmx. Una vez que se agrega, la carpeta debajo de ese nivel se llama servicio RSS, y debajo de eso hay 2 cosas: reportservice.discomap & .wsdl. En mi VB, hago importaciones e importaciones RSService System.Web.Services.Protocols, entonces ...

Dim MyRS As New ReportingService 

El servicio de información está en un servidor diferente que el servidor web de la aplicación está activada, por lo que puede' t hacer lo siguiente: MyRS.Credentials = System.Net.CredentialCache.DefaultCredentials

lugar:. MyRS.Credentials = New System.Net.NetworkCredential(rs1, rs2, rs3), donde el RS1/2/3 son el inicio de sesión a la caja de SRS, paso al rectángulo del SRS, & nombre de dominio"(. Estos se cifran en mi web.config)

Luego, una masa-pasta:

MyRS.Credentials = New System.Net.NetworkCredential(rs1, rs2, rs3) 

Dim ReportByteArray As Byte() = Nothing 
Dim ReportPath As String = "/SRSSiteSubFolder/ReportNameWithoutRDLExtension" 
Dim ReportFormat As String = "PDF" 
Dim HistoryID As String = Nothing 
Dim DevInfo As String = "<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>" 
'Dim x As ReportParameter - not necessary 
Dim ReportParams(0) As ParameterValue 
ReportParams(0) = New ParameterValue() 
ReportParams(0).Name = "TheParamName" 
ReportParams(0).Value = WhateverValue 

Dim Credentials As DataSourceCredentials() = Nothing 
Dim ShowHideToggle As String = Nothing 
Dim Encoding As String 
Dim MimeType As String 
Dim ReportHistoryParameters As ParameterValue() = Nothing 
Dim Warnings As Warning() = Nothing 
Dim StreamIDs As String() = Nothing 
'Dim sh As New SessionHeader() - not necessary 
''MyRS.SessionHeaderValue = sh - not necessary 

ReportByteArray = MyRS.Render(ReportPath, ReportFormat, HistoryID, DevInfo, ReportParams, Credentials, _ 
    ShowHideToggle, Encoding, MimeType, ReportHistoryParameters, Warnings, StreamIDs) 
'(Yay! That line was giving "HTTP error 401 - Unauthorized", until I set the credentials 
' as above, as explained by http://www.odetocode.com/Articles/216.aspx.) 

'Write the contents of the report to a PDF file: 
Dim fs As FileStream = File.Create(FullReportPath, ReportByteArray.Length) 
fs.Write(ReportByteArray, 0, ReportByteArray.Length) 
fs.Close() 

Call EmailTheReport(FullReportPath) 

If IO.File.Exists(FullReportPath) Then 
    IO.File.Delete(FullReportPath) 
End If 
2
ReportViewer1.LocalReport.DataSources.Clear(); 
ReportViewer1.Reset(); 
Label1.Visible = false; 
ReportViewer1.Visible = true; 
DataSet dataSet = new DataSet(); 
dataSet = new ClassBLL().Load_Report_Detail(TextBox1.Text, 
ddlType.SelectedValue, levelcode, fields); 
ReportDataSource datasource = new ReportDataSource("DataSet_StoreprocedureName", 
dataSet.Tables[0]); 

if (dataSet.Tables[0].Rows.Count == 0) 
{ 
    ReportViewer1.Visible = false; 
} 

ReportViewer1.LocalReport.ReportPath = Server.MapPath("") + @"\Report.rdlc"; 
ReportViewer1.LocalReport.DataSources.Clear(); 
ReportViewer1.LocalReport.DataSources.Add(datasource); 
string fields="name,girish,Z0117"; 
string[] filedName = fields.Split(','); 
ReportParameter[] param = new ReportParameter[2]; 

//for (int i = 0; i < filedName.Length; i++) 
//{ 

param[0] = new ReportParameter(filedName[0], filedName[0], true); 
param[1] = new ReportParameter(filedName[3], filedName[3], true); 

// } 


ReportViewer1.LocalReport.SetParameters(param); 

ReportViewer1.ServerReport.Refresh(); 
+1

Por favor, agrega un comentario a tu código. –

Cuestiones relacionadas