私はC#がかなり新しく、英語があまり上手ではありません。ポイントを逃した場合は事前に申し訳ありません。
ReportService
コントロールを使用してASP.NETWebサイトを構築しようとしました。ご存知かもしれませんが、SSRS2008では匿名ログインは許可されていません。そこで、ユーザーがログインしなくてもレポートを表示できるように、Webページ内に保存されるSSRSに資格情報を渡そうとしました。
以下のコードを見つけてWebForm
に配置しましたが、レポートパラメータに問題があります。
レポートパラメータにデフォルト値がある場合、以下のコードは問題なく機能します。
しかし、パラメータの値を変更しようとすると、ページ全体が
更新され、[レポートの表示]ボタンをクリックする前に、すべて
パラメータはデフォルト値またはnull値にリセットされます。
ページ全体の更新を回避する方法、またはログイン情報をSSRSに渡す別の方法に関する提案はありますか?よろしくお願いします。
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Net;
using Microsoft.Reporting.WebForms;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ReportViewer1.Width = 800;
ReportViewer1.Height = 600;
ReportViewer1.ProcessingMode = ProcessingMode.Remote;
IReportServerCredentials irsc =new CustomReportCredentials("administrator", "MYpassworw", "domena");
ReportViewer1.ServerReport.ReportServerCredentials = irsc;
ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://192.168.0.1/ReportServer/");
ReportViewer1.ServerReport.ReportPath = "/autonarudzba/listanarudzbi";
ReportViewer1.ServerReport.Refresh();
}
}
public class CustomReportCredentials : IReportServerCredentials
{
private string _UserName;
private string _PassWord;
private string _DomainName;
public CustomReportCredentials(string UserName, string PassWord, string DomainName)
{
_UserName = UserName;
_PassWord = PassWord;
_DomainName = DomainName;
}
public System.Security.Principal.WindowsIdentity ImpersonationUser
{
get { return null; }
}
public ICredentials NetworkCredentials
{
get { return new NetworkCredential(_UserName, _PassWord, _DomainName); }
}
public bool GetFormsCredentials(out Cookie authCookie, out string user,
out string password, out string authority)
{
authCookie = null;
user = password = authority = null;
return false;
}
}
私は実際にはSSRSをいじっていませんが、ASP.NETの帽子は、ページの更新時に実行されないように、それらをif (!IsPostBack)
ブロックでラップすることをお勧めします。私の推測では、ReportViewer1.ServerReport.Refresh()
はデフォルト値を再びプルします。
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
ReportViewer1.Width = 800;
ReportViewer1.Height = 600;
ReportViewer1.ProcessingMode = ProcessingMode.Remote;
IReportServerCredentials irsc =new CustomReportCredentials("administrator", "MYpassworw", "domena");
ReportViewer1.ServerReport.ReportServerCredentials = irsc;
ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://192.168.0.1/ReportServer/");
ReportViewer1.ServerReport.ReportPath = "/autonarudzba/listanarudzbi";
ReportViewer1.ServerReport.Refresh();
}
}
新しい関数を作成し、プロパティ、イベント、reportViewerのデザインビューで取得しました。 (選択中INIT i)
その後、ページは正常に機能し、パラメーターの値を変更できます。
Default.aspxは次のようになります。
</head>
<body>
<form id="form1" runat="server">
<div>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" onload="Admir">
</rsweb:ReportViewer>
</div>
</form>
</body>
そしてDefault.aspx.csはこのようになります
public void Admir(object sender, EventArgs e)
{
ReportViewer1.Width = 800;
ReportViewer1.Height = 600;
ReportViewer1.ProcessingMode = ProcessingMode.Remote;
IReportServerCredentials irsc = new CustomReportCredentials("administrator", "mypass", "domena");
ReportViewer1.ServerReport.ReportServerCredentials = irsc;
ReportViewer1.ServerReport.ReportServerUrl = new Uri("http://192.168.0.1/ReportServer/");
ReportViewer1.ServerReport.ReportPath = "/autonarudzba/listanarudzbi";
ReportViewer1.ServerReport.Refresh();
}
protected void Page_Load(object sender, EventArgs e)
{
}
私はこれに対する解決策を見つけました。最初に資格情報を設定してから、reportviewerのパラメーターを設定する必要があります。
rvCommon.ProcessingMode = ProcessingMode.Remote;
rvCommon.ServerReport.ReportServerUrl = new System.Uri("SSRSReportServerURL");
rvCommon.ServerReport.ReportPath = "/Report Parts/CustomerMainReport2" ;
Microsoft.Reporting.WebForms.ReportParameter[] RptParameters = new Microsoft.Reporting.WebForms.ReportParameter[1];
rvCommon.ServerReport.ReportServerCredentials = new ReportCredentials("username", "password", "");
RptParameters[0] = new Microsoft.Reporting.WebForms.ReportParameter("CustomerId", "1");
rvCommon.ServerReport.SetParameters(RptParameters);
rvCommon.ServerReport.Refresh();
ページ読み込みイベントで次のコードを使用して、パラメーターを指定できます
ReportParameter[] reportParameterCollection = new ReportParameter[1]; //Array size describes the number of paramaters.
reportParameterCollection[0] = new ReportParameter();
reportParameterCollection[0].Name = "ACCMGR"; //Give Your Parameter Name
reportParameterCollection[0].Values.Add("12"); //Pass Parametrs's value here.
ReportViewer1.ServerReport.SetParameters(reportParameterCollection);
ReportViewer1.ServerReport.Refresh();
これがあなたのために働くことを願っています