NEXTSCAPE blog

株式会社ネクストスケープの社員による会社公式ブログです。ネスケラボでは、社員が日頃どのようなことに興味をもっているのか、仕事を通してどのような面白いことに取り組んでいるのかなど、会社や技術に関する情報をマイペースに紹介しています。

MENU

Windows FormsやASP.NetからSSRSのレポートを利用する – Windows Forms編 [SSRS with Bing Maps #8]

おはようございます。
佐久間です。

「Reporting ServicesとBing MapsでWEB上のHTMLデータを可視化するレポートを作成する」

前回はシェープファイルを扱いました。

・Web上のデータをSSISでSQLServerに取り込む
・データをReportingServicesを使って可視化する

ここまで進みましたので、次はレポートをWindows Formsに組み込みます。(連載の目次はこちら)

参考. Windows FormsやASP.NetからSSRSのレポートを利用する
参考-1. Windows FormsからSSRSのレポートを利用する← 今回
参考-2. ASP.NetからSSRSのレポートを利用する
参考. Windows FormsやASP.NetからSSRSのレポートを利用する
参考-1. Windows FormsからSSRSのレポートを利用する
– レポートをReporting Servicesに配置する –

SSRSではReportManagerを使ってレポートを管理します。

f:id:nextscape_blog:20210908210614p:plain

まずはここに作成したレポートを配置しましょう。
配置操作はこれまで使ってきたBIDSで行います。

 

1. 配置先のサーバーを指定
プロジェクトのプロパティで配置先となるReportingServicesのサーバーを指定します。

f:id:nextscape_blog:20210908210634p:plain


f:id:nextscape_blog:20210908210658p:plain

※サーバーのURLはReportingServices 構成マネージャーで確認できます。

f:id:nextscape_blog:20210908210729p:plain

2. 配置
配置操作はプロジェクトの右クリックから配置を実行!これだけです。

f:id:nextscape_blog:20210908210749p:plain

権限が不足している場合には下記のようにエラーが発生します。
管理者権限でBIDSを実行するなど、ご使用の環境の権限設定に合わせた対応を行ってください。

f:id:nextscape_blog:20210908210808p:plain

また、次のエラーが発生することもあります。

f:id:nextscape_blog:20210908210843p:plain

「要求の長さの最大値を超えました。」

ASP.NETでファイルのアップロード機能を作ったことがある方にはお馴染みのエラーですね。
配置を試みたレポートをファイルサイズを見てみると12,467KB(12.1MB)になっています。

f:id:nextscape_blog:20210908210903p:plain

アップロード可能なサイズのデフォルト値はIISと同様に4096(4MB)なのでWeb.configを書き換えましょう。
この記事で使用しているサーバーでは下記の場所にWeb.configがあります。
httpRuntimeのmaxRequestLengthを”20480″など十分なサイズに書き換え、
ReportingServicesのサーバーを再起動します。

C:\Program Files\Microsoft SQL Server\MSRS10_50.ENTERPRISE\Reporting Services\ReportServer\web.config

そして再び配置を試みると今度は成功しました。

f:id:nextscape_blog:20210908210926p:plain

ReportManagerを開くとレポートとデータソースがアップされています。

f:id:nextscape_blog:20210908210944p:plain

– Windows FormsからSSRSのレポートを利用する –

そしてやっと本題。
Windows Forms上にレポートを表示する際にはReportViewerコントロールを使用します。
Visual StudioのExpressには付属していませんので事前にインストールしてください。

Microsoft Report Viewer 2010 再頒布可能パッケージ

新しいプロジェクトを作成したら任意のフォームにReportViewerコントロールを配置して、
ReportingServicesからレポートを取得するように設定します。


using System;
using System.Windows.Forms;
using Microsoft.Reporting.WinForms;

namespace WindowsFormsSSRSSample
{
public partial class Form1 : Form
{
// インスタンスを生成
private ReportViewer reportViewer = new ReportViewer();

public Form1()
{
InitializeComponent();
// Formに配置
this.Controls.Add(reportViewer);
reportViewer.Dock = DockStyle.Fill;
// ReportingServicesのサーバーレポートを参照させる
reportViewer.ProcessingMode = ProcessingMode.Remote;
// サーバーのURLを指定
reportViewer.ServerReport.ReportServerUrl
= new Uri("http://winsvr2k8r2web/ReportServer_ENTERPRISE");
// レポートのパスを指定
reportViewer.ServerReport.ReportPath = "/EarthquakeReportServer/Map";
}

private void Form1_Load(object sender, EventArgs e)
{
// レポートを表示
reportViewer.RefreshReport();
}
}
}

ほんの数行ですが、上記のコードのみで動作します。
ビルドしたらレポートを配置する際に使用したユーザーでアプリを起動してください。
もちろんReportingServicesにアクセス可能な管理者権限等でVSを起動していればデバッグ実行でもOK。

f:id:nextscape_blog:20210908211012p:plain

こんな感じで表示されます。

Windows Formsではアプリを起動したユーザーの資格情報を利用してレポートにアクセスできるため、
上記のようにとても簡単に表示できます。
しかし、状況によってはレポートにアクセスできるユーザーを別途用意したいこともあるでしょう。
そんな時にはReportViewコントロールに明示的に資格情報を設定することで切り替え可能です。

本日は以上です。
資格情報の指定はASP.NETで利用する際に必要になるので次回扱います。

[参考]
WinForms ReportViewer コントロールの使用