JasperReportsとiReportで帳票の常識を理解しよう:業務アプリの常識をJavaオープンソースで身につける(2)(3/4 ページ)
Java言語を使って構築されることが多い、オープンソースの業務用ソフトウェア/アプリケーションを紹介しながら、企業で行われる業務処理の常識を身に付けていく連載
DBからのデータを帳票に出力するための設定
■ データベースにサンプルデータを作成
まずは、サンプルデータベースを作成します。本稿では、データベースにPostgreSQL 8.4を使います。MySQLなどほかのデータベースでも違いはほとんどありません。「jasperSample」というデータベースにテーブルを作成したとして説明します。「pgAdminIII」などで「jasperSample」というデータベースを作成しておいてください。
次にテーブルとレコードを作成します。以下のSQLを実行して、サンプルのテーブルとレコードを作成してください。
-- 注文テーブル CREATE TABLE order_header ( OH_ID INT PRIMARY KEY, OH_ORDER_DATE DATE, OH_BP_NAME VARCHAR(255), OH_BP_ADDRESS VARCHAR(255), OH_BP_POSTCODE VARCHAR(255) ); -- 注文テーブルのレコード INSERT INTO order_header (OH_ID, OH_ORDER_DATE, OH_BP_NAME, OH_BP_ADDRESS, OH_BP_POSTCODE) VALUES (1, '2010-11-10', '埼玉商店','埼玉県さいたま市', '330-9301'), (2, '2010-11-11', 'アイティメディア株式会社', '東京都千代田区', '100-6807'); -- 注文明細テーブル CREATE TABLE order_line ( OL_ID INT PRIMARY KEY, OL_OH_ID INT NOT NULL, OL_PRODUCT_NAME VARCHAR(255), OL_QUANTITY INT NOT NULL, OL_PRICE INT NOT NULL ); -- 注文明細テーブルのレコード INSERT INTO order_line (OL_ID, OL_OH_ID, OL_PRODUCT_NAME, OL_QUANTITY, OL_PRICE) VALUES (1, 1, 'CPU', 5, 12000), (2, 1, 'キーボード', 10, 3000), (3, 1, 'ディスプレイ', 10, 40000), (4, 2, 'Adempiere ERP+CRM', 1, 5000000), (5, 2, 'JasperReports', 3, 100000), (6, 2, 'iReport', 12, 5000), (7, 2, 'Logosware Libra version 1.2.1', 1, 800000), (8, 2, 'Logosware Platon version 1.3.0', 1, 900000);
■ iReportのデータソース設定
データベースにサンプルデータを作成したら、iReportでデータソースを設定します。前述したとおり、ツールバーにあるデータベースのマークに電源プラグが付いているアイコンが、データソースの設定のためのアイコンです。
アイコンをクリックすると、ウィンドウが表示されるので、右上にある[New]ボタンを押してください。
一番上の「Database JDBC connection」を選んで、[Next]を押してください。
データベース接続を設定する画面が表示されます。ここではPostgreSQLで設定します。
[Name]は、接続の名前を入力してください(「PostgreSQL 8.4」など)。[JDBC Driver]は、「PostgreSQL (org.postgresql.Driver)」を選択してください(商用のDBを使う場合は、JDBCのjarファイルを入手してクラスパスを設定する必要があります)。
[JDBC URL]は、接続先のURLを指定します。初期値として表示されている、「jdbc:postgresql://localhost:5432/【MYDATABASE】」の【MYDATABASE】の部分にデータベース名を変更します。ここでは先ほど作成した「jasperSample」を指定します。
[Username][Password]にデータベースのユーザー名、パスワードを入力して、[Test]ボタンを押すと、接続のテストが実施されます。
接続テストが成功すると、「Connection test successful」というメッセージが表示されます。接続が成功したら、[Save]ボタンを押して接続情報を保存してください。
なお、[Save password]をチェックすると、帳票をプレビューするときに毎回パスワードを入力する必要がなくなります。
■ JasperReportsに渡すパラメータの設定
データソースの準備ができたので、まず、新規に帳票を作成します。ここでは、sampleReport2.jrxmlという名前のファイルを作成します。
JasperReportsをアプリケーションに組み込んで使う場合、パラメータを渡せます。このパラメータは、SQLのWHERE句などで使います。パラメータは、iReportの画面左にある「Report Inspector」から、「Parameters」を右クリックして「追加 Parameter」をクリックして追加します。
ちなみに「Report Inspector」が表示されていない場合は、メニューバーの[ウィンドウ]→[Report Inspector」で表示できます。
追加されたパラメータを右クリックの[名前を変更...]で、「RECORD_ID」に変更してください。
本稿では、「RECORD_ID」は「注文テーブル」の主キーの値を渡すために使います。RECORD_IDの[Parameter Class]はデフォルトでは「java.lang.String」になっています。これを[プロパティ−]ウィンドウから「java.lang.Integer」に変更してください。
[Use as a prompt]は、iReportでプレビューをするときに毎回値を入力するかどうかの設定値です。チェックを外して、[Default Value Expression]に「1」と入力すると、プレビュー時に自動で1が渡されます。作成したサンプルデータは、「注文テーブル」に、2つのレコードが入っているので、ここでは、[Default Value Expression]を「1」または「2」にしてください。
■ データを取得するSQL文の設定
iReportの画面で、作成したファイル名が書かれたタブの中にある、データベースに矢印が付いたアイコンがSQLを設定するためのアイコンです。これをクリックすると、「Report Query」というウィンドウが表示されます。ここで、以下のSQLを設定してください。
SELECT * FROM order_header oh LEFT JOIN order_line ol ON oh.oh_id = ol.ol_oh_id WHERE oh.oh_id = $P{RECORD_ID};
SQLを張り付けるとDBへ接続され、ウィンドウの下部にorder_headerテーブルのカラムが一覧表示されます。右下のOKボタンを押すと、このSQLが保存されます。
「$P{RECORD_ID}」は、パラメータを表す値(構文)です。先ほど設定したRECORD_IDがここで使われます。
注意 「PostgreSQL 8.4のスキーマについて」
テーブル名に「public.order_header」など、スキーマを付けないとエラーになる場合があります。「public.」の部分はスキーマ名です。この部分を入力せずにテーブルを指定するには、pgAdminIIIなどで、「SET search_path TO public;」文のように、SQLを実行してスキーマのデフォルト値を指定してください。「SHOW search_path;」文で現在の値を確認できます。
SQLを設定したら、帳票のデザインを行い、出力します。次ページでは、例として「納品書」の帳票を作成します。
Copyright © ITmedia, Inc. All Rights Reserved.