JasperReportsを利用したPDF出力 (2) 一覧表示

最終更新日: 2020年3月14日
R8 | R9

はじめに

本ドキュメントは「JasperReportsを利用したPDF出力 (1) 詳細表示」の知識を前提に、一覧表示データの扱いで異なる点を説明します。

重要

JasperReports の使い方や帳票の設計方法は Wagby サポートの対象外となります。JasperReports技術者を有しているWagby販売代理店へご相談ください。いくつかの代理店で、トレーニングなどの講習会を実施しています。

準備するもの

XML形式のサンプルデータ

  1. ビルドしたWagbyアプリケーションを起動します。
  2. wagbyapp\webapps\wagby\$(モデル名)\showList$(モデル名)_body.jsp をテキストエディタで開きます。Windows付属のメモ帳は使えません。TeraPadなどのテキストエディタを使ってください。
  3. <c:out value="${(モデル名)_lp}"/> と <c:out value="${(モデル名)_cp}"/> という二行を加えます。前者は一覧表示データで、後者は検索条件データです。customerモデルの例を示します。
    <%@ page pageEncoding="UTF-8" %>
    <fmt:setBundle basename="jfcapp"/>
    <c:out value="${customer_lp}"/>
    <c:out value="${customer_cp}"/>
    
  4. アプリケーションにログオンし、このモデルの一覧表示画面を開きます。画面上部に XML 形式のデータが表示されます。これがJaspersoft Studioで帳票レイアウト設計に用いるテストデータになります。
  5. 表示された XML データをマウスを使って選択し、コピーします。同データをテキストファイルとして保存します。(ファイル名は半角英数字の組み合わせとし、拡張子は ".xml" とします。)文字コードは utf-8 とします。
  6. さらに、このテキストファイルの先頭部分に次の二行を加えます。
    <?xml version="1.0" encoding="utf-8"?>
    <root>
  7. 最終行に、次の一行を加えます。
    </root>

以降の説明では、一覧帳票用テストデータを "c:\customer_showlist.xml" として保存したとします。

<?xml version="1.0" encoding="utf-8"?>
<root>
  <customer_lp sortable="customerid " sort="" order=""><!-- 一覧表示用のデータ -->
    <item>
      <customerid>1000</customerid>
      <name>琉球太郎</name>
    </item>
    <item>
      <customerid>1001</customerid>
      <name>琉球次郎</name>
    </item>
  </customer_lp>
  <customer_cp><!-- 検索条件として入力した値 -->
    <customerid1jshparam errorcode=""></customerid1jshparam>
    <customerid2jshparam errorcode=""></customerid2jshparam>
    <name errorcode=""></name>
  </customer_cp>
</root>

一覧表示ではデータ1件毎にitem要素が用意されます。表示データが10件あれば10個のitem要素が存在します。

Jaspersoft Studioを使ったレイアウト設計

詳細表示設定と異なる点を説明します。

Data Adapter Wizard

データソース「XML document」を用意します。例では名前を「showListCustomer」とし、customer_showlist.xmlと紐づけます。

詳細表示設定と異なるのは、Select Expression 欄に /root/customer_lp/item まで記述することです。

図1 DataAdapterWizard設定画面

Dataset and Query

図1で Select Expression を指定済みのため、各フィールドの Description は、その後の部分だけを指定するだけで良いです。

図2 DatasetandQueryDialog

Source

すべての設定はSourceタブで確認できます。一覧帳票のサンプルを示します。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version last-->
<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="showListCustomer1" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="b7ae9a9e-9321-4dc5-9b76-e4fa9877d839">
  <property name="com.jaspersoft.studio.data.defaultdataadapter" value="showListCustomer"/>
  <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.FreeLayout"/>
  <queryString language="xPath">
    <![CDATA[/root/customer_lp/item]]>
  </queryString>
  <field name="Field_1" class="java.lang.String">
    <fieldDescription><![CDATA[name]]></fieldDescription>
  </field>
  <background>
    <band splitType="Stretch"/>
  </background>
  <title>
    <band height="79" splitType="Stretch"/>
  </title>
  <pageHeader>
    <band height="35" splitType="Stretch"/>
  </pageHeader>
  <columnHeader>
    <band height="61" splitType="Stretch"/>
  </columnHeader>
  <detail>
    <band height="125" splitType="Stretch">
      <textField>
        <reportElement x="180" y="30" width="100" height="20" uuid="84eea6ac-1884-4e4c-87b5-45f1064327d9"/>
        <textElement>
          <font pdfFontName="HeiseiKakuGo-W5" pdfEncoding="UniJIS-UCS2-H"/>
        </textElement>
        <textFieldExpression><![CDATA[$F{Field_1}]]></textFieldExpression>
      </textField>
    </band>
  </detail>
  <columnFooter>
    <band height="45" splitType="Stretch"/>
  </columnFooter>
  <pageFooter>
    <band height="54" splitType="Stretch"/>
  </pageFooter>
  <summary>
    <band height="42" splitType="Stretch"/>
  </summary>
</jasperReport>

XPath指定の詳細

一覧帳票では基準となるXPath(/root/customer_lp/item)を既に指定しているので「Description」は項目名のみとなります。

項目の型 表記 説明 指定例
文字列,数値,日付 項目名 項目の値が転記されます。 customer_name
モデル参照 (チェックボックスを除く) 項目名/@content 内容部が転記されます。 companyname/@content
項目名/@id モデルのID部が転記されます。 companyname/@id
モデル参照 (チェックボックス) 項目名[添字]/@content 添字に対応したモデルの内容部が転記されます。添字は「1」から開始されます。 customertype[2]/@content
項目名[添字]/@id 添字に対応したモデルのID部が転記されます。添字は「1」から開始されます。 customertype[2]/@id
繰り返し項目 項目名[添字] 添字に対応した繰り返し項目の値が転記されます。添字は「1」から開始されます。 email[2]/@content
繰り返しコンテナ内の項目 コンテナの項目名[添字]/項目名 添字に対応した繰り返しコンテナ内の項目の値が転記されます。添字は「1」から開始されます。 report[2]/rdate

JDBCによるデータベース接続

JasperReportsにはJDBCによるデータベース接続機能があります。SQLを用いることで、Wagbyが生成したテーブルを直接操作してデータを収集し、レポートを出力させることもできます。

Japsersoft Studio での JDBC の設定は割愛します。設定ファイル jrxml の queryString 要素には次のようにSQLを指定することができます。

<parameter name="juser_cp.userid" isForPrompting="true" class="java.lang.String">
  <defaultValueExpression ><![CDATA["admin"]]></defaultValueExpression>
</parameter>
<queryString><![CDATA[select * from "juser" where "userid" = $P{juser_cp.userid}]]></queryString>

テーブル名や項目名はダブルクォートで囲みます。$P{ ... } という表記でパラメータを指定することもできます。 "モデル名_cp" は、検索条件が格納されたモデルを指します。

利用するライブラリのバージョン

"帳票 > JasperReportsを利用したPDF出力 (1) 詳細表示 > 利用するライブラリのバージョン"をお読みください。

トラブルシューティング

空の帳票が出力される

設定ファイル jrxml の queryString の記述に誤りがあります。スペルミスや、正しいモデル名かどうかを確認ください。

例: 次の設定は customer モデルを対象にした一覧帳票ですが、root の次の表記に誤りがあります。

<queryString language="xPath">
    <![CDATA[/root/customer/item]]>
</queryString>

正しくは次のとおりです。

<queryString language="xPath">
    <![CDATA[/root/customer_lp/item]]>
</queryString>