Jasper子报表在嵌入Title属性时仅显示JSON数据源中的一个条目
我在主报表的标题区域中的子报表中填充数据时遇到问题。 数据在主报表的详细信息区域中的子报表中正确填充。 我试图找到JSON查询中可能出错的地方。 任何帮助表示赞赏。
JSON示例数据源(expenses.json)
{ "expenses": { "date": "8 Sep 2016", "accounts": [ { "title": "XYZ Corp (111)", "accountName": "XYZ Corp", "accountNumber": "111", "transactions": [ { "date": "21 Jun 2016", "name": "gas", "price": "17.50" }, { "date": "12 May 2016", "name": "shopping", "price": "111.99" }, { "date": "30 Apr 2016", "name": "movies", "price": "7.50" } ] }, { "title": "ABC Corp (222)", "accountName": "ABC Corp", "accountNumber": "222", "transactions": [ { "date": "2 Jun 2016", "name": "coffee", "price": "3.25" }, { "date": "21 May 2016", "name": "tea", "price": "1.90" }, { "date": "20 Apr 2016", "name": "juice", "price": "4.50" } ] } ] } }
主要报告(main.jrxml)
Subreport1(sub1.jrxml)
Subreport2(sub2.jrxml)
PDF使用Jasper Reports 6.3.0 Java API生成。
import net.sf.jasperreports.engine.JasperExportManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.query.JsonQueryExecuterFactory; import net.sf.jasperreports.engine.util.JRLoader; import java.io.FileInputStream; import java.util.HashMap; import java.util.Map; public class JasperTest { public static void main(String[] args) throws Exception { JasperReport jasperReport = (JasperReport) JRLoader.loadObjectFromFile("/Users/arul/JaspersoftWorkspaceV2/reports/main.jasper"); Map jasperParameters = new HashMap(); jasperParameters.put(JsonQueryExecuterFactory.JSON_INPUT_STREAM, new FileInputStream("/Users/arul/JaspersoftWorkspaceV2/data/expenses.json")); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, jasperParameters); JasperExportManager.exportReportToPdfFile(jasperPrint, "report.pdf"); } }
您将深入了解最初的json查询
Date
超出范围。
解决方案是保持费用范围
您将使用subDataSource("accounts")
表达式调用子报表1( sub1.jasper
)
但是,您现在只有1个详细的乐队记录(费用),要解决此问题,您可以引入另一个子报表。
而不是直接调用子报表2引入子报表1_2( sub1_2.jasper
)再次在帐户subDataSource("accounts")
上进行迭代,这将显示标题并包含子报表2( sub2.jasper
)和事务上的数据源.subDataSource("transactions")
主要报告( main.jrxml
)
子报告1_2( sub1_2.jasper
)
子报告1和2( sub1.jrxml
和sub2.jrxml
)
没有变化
结果