2008-12-15 6 views
14

Je cherche un peu d'aide sur la transmission par programme de paramètres à un rapport SSRS via VB.NET et ASP.NET. Cela semble être une chose relativement simple à faire, mais je n'ai pas eu beaucoup de chance de trouver de l'aide à ce sujet.Comment transmettre des paramètres au rapport SSRS par programme

Est-ce que quelqu'un a des suggestions sur où aller pour obtenir de l'aide avec ceci, ou peut-être même un échantillon de code?

Merci.

Répondre

15

Vous pouvez effectuer les opérations suivantes :: (cela fonctionne à la fois sur les rapports locaux comme sur les rapports SSRS Full Blown. mais en mode plein, utilisez la classe appropriée, la partie des paramètres reste le même)

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

Que faire si je n'utilise pas les rapports locaux mais que je ne veux pas laisser de valeurs explicites sur l'url? – Leonardo

11

Si le serveur de rapports est directement accessible, vous pouvez passer des paramètres dans le Querystring si vous accédez à l'repoort avec une URL:

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

Vous pouvez ajouter le formatage de sortie en ajoutant ce qui suit à la fin de l'URL:

& rs: Format Excel =

ou

& rs: Format = PDF

+1

En passant les paramètres comme une URL semble que cela ouvre la porte pour quelqu'un de pirater votre rapport. Cela pourrait convenir à un site interne, mais probablement pas à un site public. – LunaCrescens

1

Il a été un moment que je l'ai fait ce code, mais il peut aider: votre projet web doit être un site Web, et pas un projet de type "Application Web ASP.Net", ou vous ne serez pas en mesure d'ajouter la référence mentionnée ci-dessous. Faites un clic droit sur le projet et ajoutez un dossier ASP.Net - App_WebReferences. Vous devrez spécifier le serveur où votre SRS est; choisissez le .asmx. Une fois ajouté, le dossier sous ce niveau s'appelle RSService, et sous cela se trouvent 2 choses: reportservice.discomap & .wsdl. Dans mon VB, je les importations RSService et importations System.Web.Services.Protocols, puis ...

Dim MyRS As New ReportingService 

Le service de reporting est sur un autre serveur que le serveur Web de l'application est, donc je peux » t procédez comme suit: MyRS.Credentials = System.Net.CredentialCache.DefaultCredentials

au lieu de cela:. MyRS.Credentials = New System.Net.NetworkCredential(rs1, rs2, rs3), où le RS1/2/3 sont connexion à la boîte SRS, mot de passe à la boîte SRS, & nom de domaine »(. Ceux-ci sont cryptées dans mon web.config)

Ensuite, une pâte de masse:

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

S'il vous plaît ajouter un commentaire à votre code. –

Questions connexes