iReportでJavaBeansをバインドさせてえ

勿論帳票のデザインは、iReportを使ってやりますとも。XML直書きは死んじゃうDEATH(うわー若作りし過ぎ、しかも賞味期限切れ)。

で、どの入門記事もWebサイトも、DBと直接つないでデザインする話ばっかり。帳票デザインにSQLを埋め込んだり。気持ち悪いよ〜。

クリスタルレポートなんかの入門記事とか書籍なんかでも、なんだかんだゆって動いてるDBとつないでデザインさせるのが多い。

思うんだけど、本当にニーズがあるんですかね。帳票ってビューでしょ、プレゼンテーション層でしょ。DTOを読ませたいと思うのが人情でしょう。

だもんで、DBとつながずにBeanのプロパティ名を突っ込む。TextFieldのTextField expressionって所に、

$F{propertyName}

なんて書けばいいんだけど。と思ったらコンパイルが通らない。やっぱりDBに接続するが如く、対象となるDTOクラスを読み込まねばいかんようじゃのう。

これがまたそのやり方が全然転がってないんだよなあ。みんなDB直接続の例ばっかり。

自力でやったので、明日のためにそのいち。

  • まずは対象となるDTOコンパイルしてclassファイルを作っておく。Jarを作っちゃっても良い。
  • iReportにクラスパスを通す。「Tools」→「Classpath」を選択。表示された画面の「Add JAR/Folder」をクリック。Jarを指定するか、クラスファイル出力ディレクトリを指定する。サブディレクトリまで見てくれます。
  • ツールバーのドラム缶アイコンか、「Datasource」→「Report query」を選択。
  • 「JavaBean Datasource」タブを選択。「ClassName」にパッケージ名フルでDTOクラス名を入力。「Read javabeans attributes」を押すと、DTOのプロパティが読み込まれて一覧表示されます。
  • 右側ペインの「Library」タブの「Fields」に、読み込んだプロパティが表示されてますんで、こいつを帳票デザイン画面にドラッグ出来ます。勿論TextFieldオブジェクトを貼り付けてそのプロパティを編集してもよいです。

ここまで来たら、上で登録したクラスパスを削除してもいいみたい。コンパイル通るし。フィールドの一覧はレポート単位で管理してるらしい。別案件になって、前の案件のクラスパスがうざったくなって削除しても、その前案件のレポートの保守は可能、と。いいんじゃない?

これで、個別帳票固有のDTOを作って〜、と云った、画面と同じ考え方でいけますな。うむ。