2008-12-15 4 views
14

Ich bin auf der Suche nach einer kleinen Hilfe bei der programmgesteuerten Übergabe von Parametern an einen SSRS-Bericht über VB.NET und ASP.NET. Das scheint eine relativ einfache Sache zu sein, aber ich hatte nicht viel Glück dabei, Hilfe zu finden.Wie Parameter programmgesteuert an SSRS-Bericht übergeben werden

Hat jemand irgendwelche Vorschläge, wohin Sie gehen, um Hilfe zu bekommen, oder vielleicht sogar ein paar Beispielcode?

Danke.

Antwort

15

Sie können Folgendes tun: (Es funktioniert sowohl bei lokalen Berichten als auch bei vollständig durchgebrannten SSRS-Berichten. aber im Vollmodus, verwenden Sie die entsprechende Klasse der Parameter Teil gleich bleibt)

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

Was passiert, wenn ich keine lokalen Berichte verwende, aber keine expliziten Werte in der URL hinterlassen möchte? – Leonardo

11

Wenn der Berichtsserver direkt zugänglich ist, können Sie die Parameter in den Abfragezeichen passieren, wenn Sie den repoort mit einer URL zugreifen:

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

Sie Ausgabeformatierung, indem Sie die folgenden am Ende hinzufügen der URL:

& rs: Format = Excel

oder

& rs: Format = PDF

+1

Geben Sie die Parameter wie eine URL scheint, wie es die Tür für jemand öffnet Ihren Bericht zu hacken. Dies könnte für eine interne Website in Ordnung sein, aber wahrscheinlich nicht für eine öffentlich zugängliche Website. – LunaCrescens

1

Es ist eine Weile her, dass ich diesen Code nicht, aber es kann helfen: Ihr Webprojekt eine Web-Site zu sein hat, und kein Projekt vom Typ "ASP.Net Web Application", oder Sie können die unten erwähnte Referenz nicht hinzufügen. Klicken Sie mit der rechten Maustaste auf das Projekt und fügen Sie einen ASP.Net-Ordner hinzu - App_WebReferences. Sie müssen den Server angeben, auf dem sich Ihr SRS befindet. wähle das .asmx. Sobald es hinzugefügt wird, heißt der Ordner unter dieser Ebene RSService, und darunter sind 2 Dinge: reportservice.discomap & .wsdl. In meinem VB, ich Import RSService und Importe System.Web.Services.Protocols, dann ...

Dim MyRS As New ReportingService 

Der Reporting-Dienst auf einem anderen Server als den Webserver ist die App eingeschaltet ist, so kann ich‘ t wie folgt vor: MyRS.Credentials = System.Net.CredentialCache.DefaultCredentials

statt. MyRS.Credentials = New System.Net.NetworkCredential(rs1, rs2, rs3), wo die RS1/2/3 sind die Anmeldung zur SRS-Box, ein Passwort zu SRS-Box, & Domain-Namen“(. Diese werden verschlüsselt in meinem web.config)

Dann eine Masse-Paste:

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

Bitte fügen Sie einen Kommentar zu Ihrem Code hinzu. –