Visual Studio 2012 For Web Professinal のコントロール「ReportViewer」を使って、WebフォームにReporting Servicesのレポートを表示する
稼働済みのReportをエクスポートさせたくない、という依頼を受けたので、WebフォームでReportViewerを使用してレポートを表示するようにし、エクスポートボタン表示・非表示を切り替えられるようにしてみる。
Visual Studio 2012 For Web Professinal のコントロール「ReportViewer」を使って、WebフォームにReporting Servicesのレポートを表示する。
なお、Visual Studio 2012 For Web ExpressではReportViewerを使用できません。
確認事項
レポートA → アクション(レポートへ移動) → レポートB というようなことも、ReportViewer内で展開されるようだ。レポートAのパラメータをレポートBのパラメータへ引き渡すこともできる。またレポートBにはレポートAに戻るボタンが自動で設置されるようだ。
レポートを表示するボタンを設置し、ボタンクリックしたら、セッションにレポート名、エクスポートボタン有無、レポート幅、レポート高さ、アカウント名を設定し、Reportviewer.aspxを呼び出せば、セッションで指定したレポートが表示される。Webフォーム上の戻るボタンをクリックすると、元のページに戻るとともに、ReportViewer関連のセッションをクリアする。アカウントを指定させるのは、見せるデータ範囲をレポート側で制御するため。アカウントと社員番号はあらかじめ関連付けされている。
レポートサーバーURL、フォルダはWeb.configのappSettingsで指定し、そこから取得するようにした。
ASP(Reportviewer.aspx)
1: <%@ Page Title="" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="Reportviewer.aspx.vb" Inherits="Reportviewer" %>2: <%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>3:4: <asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">5: </asp:Content>6: <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">7: <asp:Button ID="ButtonBack" runat="server" Text="戻る" />8: <rsweb:ReportViewer ID="ReportViewer" runat="server" Font-Names="Verdana" Font-Size="8pt" Height="900px" ProcessingMode="Remote" ShowExportControls="False" ShowPrintButton="False" WaitMessageFont-Names="Verdana" WaitMessageFont-Size="14pt" Width="1000px">9: <ServerReport ReportServerUrl="" />10: <LocalReport EnableHyperlinks="True">11: </LocalReport>12: </rsweb:ReportViewer>13: </asp:Content>
ReportViewerを表示するためにはScriptManagerが必要みたい。上記サンプルはマスタページにScriptManagerを設置済みなので、Reportviewer.aspxにScriptManagerを設置していない。
VB(Reportviewer.aspx.vb)
1: Partial Class Reportviewer2: Inherits System.Web.UI.Page3:4: Protected Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init5:6: Dim ReportSeverURL As String = ConfigurationManager.AppSettings("ReportSeverURL")7: Dim ReportFolder As String = ConfigurationManager.AppSettings("ReportFolder")8:9: Session("ReoprtName") = "movielist"10: Session("アカウント") = User.Identity.Name11: Session("RVSEC") = False12: Session("RVWidth") = 180013: Session("RVHeighy") = 50014:15: 'ReportViewer.ServerReport.ReportServerUrl = New Uri("http://sn78sh7/reportserver")16: ReportViewer.ServerReport.ReportServerUrl = New Uri(ReportSeverURL)17: 'ReportViewer.ServerReport.ReportPath = "/movie/movielist"18: ReportViewer.ServerReport.ReportPath = ReportFolder + Session("ReoprtName").ToString19: Dim param As New Generic.List(Of Microsoft.Reporting.WebForms.ReportParameter)20: param.Add(New Microsoft.Reporting.WebForms.ReportParameter("RP_Acount", Session("アカウント").ToString, False))21: ReportViewer.ServerReport.SetParameters(param)22: ReportViewer.ShowExportControls = Session("RVSEC")23: ReportViewer.Width = Convert.ToInt32(Session("RVWidth"))24: ReportViewer.Height = Convert.ToInt32(Session("RVHeighy"))25:26: End Sub27:28: Protected Sub ButtonBack_Click(sender As Object, e As EventArgs) Handles ButtonBack.Click29:30: Dim strRVBackURL As String = Session("RVBackURL")31: Session("RVBackURL") = Nothing32: Session("ReoprtName") = Nothing33: Session("RVSEC") = Nothing34: Session("RVWidth") = Nothing35: Session("RVHeighy") = Nothing36: Session("RVBackURL") = "Default8Tile.aspx"37:38: Response.Redirect(strRVBackURL)39:40: End Sub41:42: End Class
Session("RVSEC")がTrueの場合は、エクスポートボタンを表示し、Falseの場合は非表示にする。
Web.config
1: <configuration>2: <connectionStrings>3: <add name="MOVIEConnectionString" connectionString="Data Source=SN78SH7;Initial Catalog=MOVIEDEV;Integrated Security=True" providerName="System.Data.SqlClient"/>4: </connectionStrings>5: <system.web>6: <httpHandlers>7: <add path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" validate="false"/>8: </httpHandlers>9:10: 中略11:12: <system.webServer>13: <modules runAllManagedModulesForAllRequests="true"/>14: <defaultDocument>15: <files>16: <add value="Default8Tile.aspx"/>17: </files>18: </defaultDocument>19: <handlers>20: <add name="ReportViewerWebControlHandler" preCondition="integratedMode" verb="*" path="Reserved.ReportViewerWebControl.axd" type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>21: </handlers>22: </system.webServer>23: <appSettings>24: <add key="ReportSeverURL" value="http://sn78sh7/ReportServer"/>25: <add key="ReportFolder" value="/movie/"/>26: </appSettings>
コメント
コメントを投稿