web-dev-qa-db-ja.com

プログラムでSSRSレポートにパラメータを渡す方法

VB.NETおよびASP.NETを介してSSRSレポートにプログラムでパラメーターを渡すための少しのヘルプを探しています。これは比較的簡単なことのように思えますが、私はこれについて助けを見つけることができませんでした。

誰かがこれについて助けを得るためにどこに行くべきか、あるいはおそらくいくつかのサンプルコードについて何か提案がありますか?

ありがとう。

14
LunaCrescens

次の操作を実行できます:(フルブロー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
15
Abram Simon

レポートサーバーに直接アクセスできる場合、次のURLを使用してレポートにアクセスしている場合は、クエリ文字列でパラメータを渡すことができます。

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

URLの末尾に以下を追加することで、出力フォーマットを追加できます。

&rs:Format = Excel

または

&rs:Format = PDF

11
HectorMac
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();
2
girish.M

このコードを実行してからしばらく経ちましたが、役立つ場合があります。Webプロジェクトは「ASP.NetWebアプリケーション」タイプのプロジェクトではなく、Webサイトである必要があります。そうしないと、参照を追加できません。下記に記載されています。プロジェクトを右クリックして、ASP.Netフォルダー(App_WebReferences)を追加します。 SRSがあるサーバーを指定する必要があります。 .asmxを選択します。追加されると、そのレベルの下のフォルダーはRSServiceと呼ばれ、その下にはreportservice.discomapと.wsdlの2つがあります。私のVBでは、インポートRSServiceとインポートSystem.Web.Services.Protocolsを実行し、次に...

_Dim MyRS As New ReportingService
_

レポートサービスは、アプリが存在するWebサーバーとは異なるサーバー上にあるため、次のことはできません。_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
_
1
LenexaKS