JasperReportsとiReportで帳票の常識を理解しよう業務アプリの常識をJavaオープンソースで身につける(2)(3/4 ページ)

» 2010年12月01日 00時00分 公開
[久保田大輔adempiere.jp]

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]ボタンを押してください。

右上の[New]ボタンを押す

 一番上の「Database JDBC connection」を選んで、[Next]を押してください。

「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」に変更してください。

[プロパティ−]ウィンドウの[Parameter Class]の項目を「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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。