JasperReportsのexpressionでgroovyを使う
JasperReportsのvariableやtextFieldのexpressionで使用する言語はデフォルトではJavaです。
Booleanとbooleanのキャストが必要だったり、オブジェクトのプロパティにアクセスするのにgetterを呼ばないといけなかったりと、ほんとにJavaなのでJSPなどのELに慣れていると面倒です。このexpressionで使用する言語はJava以外にgroovyも使用できるので試してみました。
JasperForge: iReport: Groovy(参考)
テンプレート(jrxml)の作成
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report" language="groovy" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="30" rightMargin="30" topMargin="20" bottomMargin="20"> ...
テンプレートの方では、単純にjasperReport要素の属性languageで"groovy"を指定します。iReportから見ると、ここの選択肢に"JavaScript"もあるので使えそうです。
// Mapのアクセス $F{fMap}.get('key1') // ↓ $F{fMap}.key1 // 文字列がnullでない new Boolean($F{fStr} != null) // ↓ $F{fStr} // オブジェクトのフィールドの値を取得 $F{fObj}.getValue() // ↓ $F{fObj}.value
こんな感じでgroovyの文法で書けるようになります。iReportのexpressionの編集画面は使いやすいとは言えないので、ありがたいです。
さらに、JasperReportのFieldやVariableではあらかじめ型を指定する必要がありますが、groovyを使うのであればObject型でもフィールドにアクセスできるようになるため、クラスをimportしておく必要がなくなります。
レポートの作成
自分のアプリケーションで、groovyのexpressionを含むテンプレートを使用してレポートを作成する際には、groovyが必要になりますのでclasspathにgroovy関連のjarを追加しておきます。
私は以下の環境で試しました。
- jasperreport3.5.2
- groovy 1.6.3