Tablixを使った定義例
基本がわかったところで、連載「ActiveReportsの新機能を活用して一歩進んだ帳票を作成しよう」の第2回で作成したTablixをWebアプリ化してみましょう。
データの設定
CSVファイルはdataフォルダを作ってその中に配置します。デプロイ時にも一緒にデプロイするために[ビルドアクション]プロパティは「コンテンツ」になっていることを確認します。
帳票定義
reportsフォルダに2つめのRDLレポート形式の帳票定義を新規作成します。
こちらの記事を参考にしていただき、Tablixを使った帳票定義を行います。
データソースで図10のCSVファイルを指定しておけば、デザイナーのプレビュー画面でWindowsアプリと同様に値が入った状態での実行結果が確認できます。
Webページの追加
TablixPage.aspxをプロジェクトに追加して、PdfPage.aspxと同様にC#のコードを記述します。ただし、rptPath変数に設定するファイル名は「RdlReport2.rdlx」になります。
Tablixを使った実行例
テスト実行
ここまでの作業が終わったらVisual Studioで実行して、TablixPage.aspxを指定してみましょう。
Visual Studioのデザイナーで見たのと同じ内容がブラウザ上に表示できました。
Azureでの実行
しかし、Azureにデプロイして確認してみるとエラーとなってしまいます。
Azureで動作させるためには
なぜ、開発環境では正常に動作し、Azure環境では動作しなかったのでしょうか。
この2つの環境で相違があるとするとファイルの設置場所です。rptPath変数に設置しるときにServer.MapPathメソッドを使ってサーバー上での位置でRDLレポートファイルの位置は指定していますので、ここは正しそうです。他に何があるでしょうか。
CSVファイルはどうでしょう。これはRDLレポートファイルのデータソースとしてレポートエクスプローラーから指定していました。内容を確認すると開発環境でのファイル位置を指定していました。これを実行時はServer.MapPathメソッドでの指定に直してあげる必要がありそうです。
データファイル指定のデバッグ
TablixPage.aspx.csを開いて、reportDocument変数を作成する直前でCSVファイルを指定します。具体的には以下のリストのようになります。
// エクスポートするページレポートのインスタンスを生成します。 var rptPath = new FileInfo(Server.MapPath("reports") + "\\RdlReport2.rdlx"); var report = new GrapeCity.ActiveReports.PageReport(rptPath); // データソースの指定 var dataPath = new FileInfo(Server.MapPath("data") + "\\TablixData.csv"); report.Report.DataSources[0].ConnectionProperties.ConnectString = "Path=" + dataPath + ";Encoding=shift_jis;Locale=ja-JP;TextQualifier=\";ColumnsSeparator=,;RowsSeparator=\\r\\n;HasHeaders=True"; var reportDocument = new GrapeCity.ActiveReports.Document.PageDocument(report);
Azureでの実行例
開発環境での正常動作を確認したら、Azureにデプロイして再度動作を確認します。
今度は正常に動作し、開発環境と同じようにPDFを表示可能です。
さいごに
従来はWindowsアプリとWebアプリでは、帳票定義が流用できない場合が多かったと思います。ActiveReportsを使えばWebアプリでもWindowsアプリと同様に簡単にPDFファイル形式での帳票を出力できます。
また、今回紹介したRDLレポートはレポート定義体がXMLファイルのため取り扱いがシンプルです。例えば仕様変更などでレポートレイアウトの変更が必要となった場合でも、変更後のXMLファイルを上書きすることでAzure上のアプリケーションに反映できます。アプリケーション全体を再ビルドする必要はありません。
今回はCSVファイルを使いましたが、もちろんデータベースから値を取得するときもデータ取得指定のところを変更するだけで対応可能です。サンプルでは50ページくらいのPDFが出力されますが、そのデータ量でもほとんど待たずに表示できます。この速度も11.0J SP2の良さの1つです。