Как программно передавать параметры в отчет SSRS
Я ищу небольшую помощь по программной передаче параметров в отчет SSRS через VB.NET и ASP.NET. Кажется, это должно быть относительно простой задачей, но мне не очень повезло найти помощь в этом.
Есть ли у кого-нибудь предложения о том, куда пойти, чтобы получить помощь в этом, или, возможно, даже пример кода?
Спасибо.
Ответы
Ответ 1
Вы можете сделать следующее: (он работает как в локальных отчетах, так и в отчетах с полным отключением SSRS, но в полном режиме используйте соответствующий класс, часть параметра остается той же)
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
Ответ 2
Если сервер отчетов доступен напрямую, вы можете передавать параметры в Querystring, если вы обращаетесь к репорту с URL-адресом:
http://MyServer/ReportServer/?MyReport&rs:Command=Render&Param1=54321&Param2=product
Вы можете добавить форматирование вывода, добавив следующее в конец URL-адреса:
& RS: Формат = Excel
или
& RS: Формат = PDF
Ответ 3
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();
Ответ 4
Прошло некоторое время с тех пор, как я сделал этот код, но это может помочь:
Ваш веб-проект должен быть веб-сайтом, а не проектом типа "ASP.Net Web Application", или вы не сможете добавить ссылку, упомянутую ниже.
Щелкните правой кнопкой мыши по проекту и добавьте папку ASP.Net - App_WebReferences. Вам нужно указать сервер, на котором находится ваша SRS; выберите .asmx.
После того, как он добавлен, папка под этим уровнем называется RSService, а под этим - 2 вещи: reportservice.discomap и .wsdl.
В моем VB я импортирую RSSсервис и импортирую System.Web.Services.Protocols, затем...
Dim MyRS As New ReportingService
Служба отчетов находится на другом сервере, чем веб-сервер, на котором установлено приложение, поэтому я не могу сделать следующее: MyRS.Credentials = System.Net.CredentialCache.DefaultCredentials
Вместо: MyRS.Credentials = New System.Net.NetworkCredential(rs1, rs2, rs3)
,
где rs1/2/3 являются регистрацией в поле SRS, паролем в поле SRS и именем домена "(они зашифрованы в моем web.config.)
Затем массовая паста:
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