3.2.6. 类定义模板
当很难或不可能使用 SQL、JPQL 或 Groovy 选择数据时,可以使用类定义模板。例如,当报表是组合其它几个报表的结果时,就可以使用它们。
将定义模板的类放在 core 模块中,并实现 com.haulmont.yarg.formatters.CustomReport
接口。在类中,需要定义 createReport()
方法,该方法返回一个字节数组并接收以下输入参数:
-
report
-com.haulmont.yarg.structure.Report
类型的报表描述。 -
rootBand
-com.haulmont.yarg.structure.BandData
类型的根带区数据。 -
params
- 外部报表参数的 map。
下面是一个简单的类定义模板的示例。它会创建一个 HTML 文档,显示从参数中获取的书籍的名称:
package com.sample.library.report;
import com.haulmont.yarg.formatters.CustomReport;
import com.haulmont.yarg.structure.BandData;
import com.haulmont.yarg.structure.Report;
import com.sample.library.entity.Book;
import java.util.Map;
public class BookReport implements CustomReport {
@Override
public byte[] createReport(Report report, BandData rootBand, Map<String, Object> params) {
Book book = (Book) params.get("book");
String html = "<html><body>";
html += "<p>Name: " + book.getName() + "</p>";
html += "</body></html>";
return html.getBytes();
}
}
在模板编辑界面中,选中 Is custom 复选框,在 Defined by 字段中选择 Class,并设置 custom definition 为 Java 类的完全限定名:
Figure 42. 类定义模板