Wagbyの開発ノウハウを共有するよ[帳票編]

Wagbyを３年以上使用していますが、
なかなかJasminesoft社(Wagby製造元)以外の情報がないので、こちらに記載します。

# ローコード開発(超高速開発)ツール Wagbyとは
Wagbyと基本的な使い方については、こちらが参考になります:
[Wagby概要【5年間使用しています】](https://kennyshroff.com/it/dev/wagby/)

# 今回の環境
Wagbyの最新版が2021年に出ました。
最新版は、以下の２種類あります。
・ローコード版(ローカル、オンプレ、クラウドいずれも可)
・ノーコード版(クラウドのみ、今回初めての提供となる)

このうち、ローコード版が、従来のWagby製品の後継版となるため、ローコード版を中心に説明します。
Wagby R9といわれているものです。

自分のPCのスペックは以下：
OS:Windows 10
CPU:Corei7-4770K
メモリ:32GB

# 帳票
こちらにも記載していますが、Wagbyで帳票を使おうとすると、TIBCO Jaspersoft Studioというものが必要になります。
[Wagby概要【5年間使用しています】](https://kennyshroff.com/it/dev/wagby/)

このJaspersoft Studio、ネット上では、英語情報が中心なため、かなり苦戦しました。

以下の通り、Wagbyマニュアルにも簡単な説明はありますが、特に帳票に出力する明細の設定が分かりづらいです：
[JasperReportsを利用したPDF出力 (2) 一覧表示](https://wagby.com/manual9/print-jasperreports-showlist.html)

トラブルシューティングは、内容がペラペラなため、ほぼ役に立ちません。
[トラブルシューティング](https://wagby.com/manual9/print-jasperreports-showlist.html#item-1-7)

最悪、Wagbyの販売代理店に相談すれば、有償で対応いただけるのですが、マニュアルやググればわかるものに
お金を払うのはあれだったのと、コストかつかつ案件だったので、頑張って調べました。

WagbyとJaspersoft Studioの帳票を連携するためには、
Wagby側とJaspersoft Studio(帳票)側の2つの設定が必要です。


## Wagby側の設定方法

Wagby側の設定方法は、以下を参照
 [JasperReportsを利用したPDF出力 (1) 詳細表示](https://wagby.com/manual9/print-jasperreports-show.html)

Wagbyが生成するWebアプリに、jasperreports.propertiesを入れる必要があります(空でもOK)。
以下にコピーしておけば、Wagbyが勝手にWebアプリにコピーしてくれて便利です。
wagby_root\customize\resources\jasperreports.properties

## Jaspersoft Studio側の設定方法

### サブレポートの設定方法
「Dataset and Query Dialog」では「/root/モデル名_p/繰り返し項目名」までをxPathで指定。
※例：/root/model1_p/detail

Field Name、Class Type、Descriptionは、それぞれ以下に設定。
(Descriptionには、親レポートと異なり、パスを設定せず、項目名を設定)
Field Name：フィールド名(項目名に基本あわせる)
Class Type：java.lang.String
Description：項目名

### サブレポートをうまく動かすためのコツ(以下２つの設定が必要)
１．Parameters
画面のDetailに配置したサブレポートを選択→右下のPropertiesの下部にある「Subreport Properties」のParametersを選択→
以下を設定：
Name      : XML_DATA_DOCUMENT
Expression: $P{XML_DATA_DOCUMENT}

２．Data Source Expression
１と同じ「Subreport Properties」の「Data Source Expression」に以下を設定：　
```((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource("/root/model1_p/detail")```
※dataSourceの中は、/root/モデル名_p/繰り返し項目名

      <subreport>
          <reportElement x="-17" y="0" width="595" height="50" uuid="a961f5f8-c9a7-4199-96c1-47ec77c848e7"/>
          <subreportParameter name="XML_DATA_DOCUMENT">
              <subreportParameterExpression><![CDATA[$P{XML_DATA_DOCUMENT}]]></subreportParameterExpression>
          </subreportParameter>
          <dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource("/root/model1_p/detail")]]></dataSourceExpression>
          <subreportExpression><![CDATA["./dorp_detail.jasper"]]></subreportExpression>
      </subreport>

### その他参考になりそうな情報

１．一部のサブレポート設定方法(レポートに明細行(繰り返しデータがある箇所)がある場合)
 こちらのJaspersoftコミュニティの記事が役に立ちます：
 [Use a subreport in a report which is connected to an xml datasource](http://community.jaspersoft.com/wiki/use-subreport-report-which-connected-xml-datasource)

２．親レポートのデータソースをサブレポートへ渡す方法(datasourceの具体的な設定例の記載があります)
 [Processing jasper subreports with JasperStarter](https://nblock.org/2015/06/02/processing-jasper-subreports-with-jasperstarter/)

３．Subreportが出力件数分実行される場合の対応方法
SubreportをDetails Bandに設定すると、Subreportのクエリが、出力件数分実行され、同じ出力結果が複数行にわたり出力されます。

例：
サブレポートで3行出力されるデータがあり、これをメインレポートのDetails bandに設定すると、以下の様に3行を3回出力するレポートとなります。

      AAA
      BBB
      CCC

      AAA
      BBB
      CCC

      AAA
      BBB
      CCC

[対策]
この場合は、Summary Bandを追加して、そこにSubreportを追加すること。
Summary Bandがレポートエディタの一番下に表示されても、レポート上は、Column Footerの上に表示されます。
(実際に、previewタブで出力結果を確認すれば、ちゃんと表示されていることを確認できます)

以上です。
Wagbyの帳票連携の参考になれば幸いです。