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を使ってレポートを管理します。

ReportManager

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


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

プロジェクトのプロパティ
サーバーのURLを指定する

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

ReportingServices構成マネージャー

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

配置をクリック

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

権限不足

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

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

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

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

ファイルサイズ

アップロード可能なサイズのデフォルト値は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

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

配置完了

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

配置されたレポートとデータソース
– 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。

WinForm上に表示されたレポート

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

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

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

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


ネクストスケープ企業サイトへ

NEXTSCAPE

検索する

タグ

メタデータ

投稿のRSS

著者

データベースの中のデータはその企業の財産のはず。
しかし現実にはユーザー自身が自由に見れないことが多い。

データを未来のために活かせる状態にすることを求めるエンジニアです。
「sakuma」さんの全ポストを読む