1. 帳票出力(Jasper/POI)
Templateの編集画面でExcelやPDFの出力定義を設定することで帳票出力機能を利用することが出来ます。
2. 帳票出力の作成
帳票出力機能を利用するために、Template定義に以下の設定を行わなければなりません。
-
帳票定義のTemplateを呼び出すActionクラスを作成します。
-
Apache POI(Excel)またはJasperReports(PDF)用のテンプレートファイルを作成しておきます。
-
Template定義の編集画面でテンプレートタイプを
Report
に、Report Type
をJasperReports
またはPOI
を選択し、作成したテンプレートファイルをアップロードします。-
POIを利用する場合、JavaまたはGroovyを利用してOutput Logicを実装し、Template定義の
OutPut Logic
に設定します。 -
JasperReportsを利用する場合、Template定義で
DataSource
、Parameters
の設定項目 にRequestContextまたはSessionContextにセットしたAttribute名を設定します。
-
-
Actionクラスが呼び出されるときに、帳票出力処理が実行されます。
3. 設定
Template定義の編集画面での設定項目
項目 | 内容 |
---|---|
Report Type |
出力ライブラリー形式を設定します。 以下の形式をサポートしてます。
|
Format |
出力するファイルの形式を設定します。
※PDF出力はJasperReports形式のみ対応しています。 |
File |
各ReportTypeに従ったテンプレートファイルを設定します。 |
Password Attribute Name |
出力するレポートに対してパスワードを設定する場合に、そのパスワード値をセットしたRequestのAttribute名を指定します。 パスワードは、ユーザに画面上で指定させてリクエストでもらったり、システム内部で固定したり、ランダムで設定してメール通知したり要件に応じて実装し、このTemplateを利用する前のCommandでここで指定したAttributeに対して、パスワードをセットしてください。 ※パスワードはJasper、POIともにXLS形式には対応していません。Excelに対してパスワード指定する場合はXLSX形式を利用してください。 |
DataSource Attribute Name |
Report Typeが 詳細は「JasperReports DataSource設定」を参照してください。 |
Parameters |
Report Typeが 詳細は「JasperReports Parameters設定」を参照してください。 |
OutPut Logic |
Report Typeが 詳細は「Poi OutPut Logicの設定」を参照してください。 |
3.1. JasperReports設定
JasperReports DataSource設定
JasperFillManager.fillReport実行時のデータソースを指定することができます。
このTemplateを利用する前のCommandでJRDataSourceを実装したクラスのインスタンスをAttributeにセットしてください。 そのAttribute名をここで指定することで、JasperFillManager.fillReport実行時にデータソースをセットします。 未設定の場合、JREmptyDataSourceをJasperFillManager.fillReportに渡します。
またEntityの検索結果などをデータソースとして利用したい場合は、
org.iplass.mtp.web.template.report.JasperReportingEntityDataSource
を利用することも可能です。 EntityのJavaMappingClassを利用していない場合、EntityにはgetXXXというメソッドがないため、 JRBeanCollectionDataSourceを使うのが難しくなります。 JasperReportingEntityDataSourceを利用することで、EntityのListをそのまま指定し、 Fieldとして利用することができます。
-
Entity
テスト用のEntity定義を登録しておきます。
-
Command
/** * 検索結果をJasperReportingEntityDataSourceとして「orderItems」Attributeにセット。 */ import org.iplass.mtp.ManagerLocator; import org.iplass.mtp.entity.Entity; import org.iplass.mtp.entity.EntityManager; import org.iplass.mtp.entity.query.Query; import org.iplass.mtp.entity.SearchResult; import org.iplass.mtp.entity.LoadOption; import org.iplass.mtp.entity.query.condition.predicate.Equals; import org.iplass.mtp.web.template.report.JasperReportingEntityDataSource; String oid = request.getParam("oid"); request.setAttribute("oid", oid); EntityManager em = ManagerLocator.getInstance().getManager(EntityManager.class); //Order検索(OrderItemは別で取得するのでReferenceは取得しない) Entity order = em.load(oid, "test.report.Order", new LoadOption(false, false)); request.setAttribute("order", order); //OrderItem検索 Query query = new Query() .select("price", "quantity", "product.name", "product.price") .from("test.report.OrderItem") .where(new Equals("order.oid", oid)); SearchResult<Entity> orderItems = em.searchEntity(query); //JasperReportingEntityDataSourceとしてEntityのListを格納 request.setAttribute("orderItems", new JasperReportingEntityDataSource(orderItems.getList())); (1)
1 JasperReportingEntityDataSourceとして「orderItems」Attributeにセット。 -
Template
-
JasperReports
JasperReports Parameters設定
JasperFillManager.fillReport実行時のパラメータにセットする値を指定することができます。
項目 | 内容 |
---|---|
Value Type |
パラメータとして渡す変数タイプを設定をします。 以下の形式をサポートしてます。
|
Name |
パラメータとして渡すMapに設定するKEY名を指定します。 |
Value |
Value Typeが (例) |
Template |
Value Typeが パラメータとしてJasperReport形式にコンパイルした結果をセットします。 |
-
Template
-
JasperReports
3.2. 表示方法
作成したCommandクラスとTemplateを呼び出すActionクラスを作成します。

-
作成したCommandクラス
-
帳票出力Template定義
管理画面にログインし、http://hostname:port/{コンテキスト名}/{テナント名}/test/report/order?oid=xxx
をアクセスすると、帳票出力処理が実行されます。

-
パラメータとして指定されている部分
-
データソースとして指定されている部分
3.3. Poi OutPut Logicの設定
OutPut Logicの実装方法は2種類あります。
JavaクラスによるOutPut Logicの実装
必ず org.iplass.mtp.web.template.report.PoiReportOutputLogic
インターフェースクラスをimplementsし、実装して下さい。
import org.iplass.mtp.command.RequestContext;
import org.iplass.mtp.web.template.report.PoiReportOutputLogic;
import org.apache.poi.ss.usermodel.Workbook;
public class TutorialReportLogic implements PoiReportOutputLogic {
@Override
public void reportOutput(RequestContext context, Workbook book) {
// 処理
def sheet = book.getSheet("シート名"); (1)
sheet.getRow(XXX).getCell(YYY).setCellValue("セルの値"); (2)
}
}
1 | シート名でテンプレートファイルのシートを取得します。 |
2 | テンプレートシートのXXXの行のYYYのセルに値をセットします。 ※ SXSSFWorkbookの場合、テンプレートとして設定してあるExcelに既に存在するRowを取得しようとしてもnullが返ってくるので、 「テンプレートのXXXのセルに値を設定する」といった利用はできません。Sheet#createRow(rowIndex)やRow#createCell(colIndex) を利用して、データをExcelに出力する時に利用されます。 詳しくは SXSSFWorkbookのConstructor Detailを参照してください。 |
GroovyによるOutPut Logicの実装
Groovyの記述形式で実装する事ができます。org.iplass.mtp.web.template.report.PoiReportOutputLogic
インターフェースクラスのように以下のバインド変数がGroovyScriptで利用可能です。
利用可能なバインド変数は、編集ダイアログの「Notes」を参照してください。
バインド変数 | 内容 |
---|---|
context |
リクエストコンテキスト |
book |
ワークブック |
3.4. 表示方法
-
Template
OutputLogicの実装
import org.iplass.mtp.entity.Entity; import org.iplass.mtp.entity.EntityManager; import org.iplass.mtp.entity.LoadOption; import org.iplass.mtp.entity.SearchResult; import org.iplass.mtp.entity.query.Query; import org.iplass.mtp.entity.query.condition.predicate.Equals; def sheet = book.getSheet("order"); String oid = context.getParam("oid"); int rowNo = 1; def row = sheet.getRow(rowNo); row.getCell(4).setCellValue(oid); EntityManager em = manager(EntityManager.class); // Order検索(OrderItemは別で取得するのでReferenceは取得しない) Entity order = em.load(oid, "test.report.Order", new LoadOption(false, false)); rowNo = 5; row = sheet.getRow(rowNo); row.getCell(0).setCellValue(order.orderNo); row.getCell(1).setCellValue(order.customer); row.getCell(2).setCellValue(order.address); row.getCell(3).setCellValue(order.mail); row.getCell(4).setCellValue(order.tel); // OrderItem検索 Query query = new Query().select("price", "quantity", "product.name", "product.price") .from("test.report.OrderItem").where(new Equals("order.oid", oid)); SearchResult<Entity> orderItems = em.searchEntity(query); rowNo = 9; for (Entity item : orderItems.getList()) { row = sheet.getRow(rowNo); row.getCell(0).setCellValue(item.product.name); row.getCell(2).setCellValue(item.quantity); row.getCell(3).setCellValue(item.product.price); row.getCell(4).setCellValue(item.price); rowNo++; }
-
Action
-
今回はParameterMappingsを利用し、パスから
oid
を取得します。 -
作成した帳票出力Template定義。
-
管理画面にログインし、http://hostname:port/{コンテキストパス}/{テナント名}/test/report/orderPoi/xxx
をアクセスすると、帳票出力処理が実行されます。
