Jasperreports - 如何让JSON填充子报表

时间:2013-02-18 16:36:38

标签: json jasper-reports subreport

我正在尝试使用Jasper / iReport在主报表中填充相同数据的表格。我如何让Json继续?

在编辑表数据源中,我尝试过:

((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE})

new ((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE})

$P{REPORT_DATA_SOURCE}

$P{REPORT_CONNECTION}

所有这些都编译,但实际上都没有生成表。有任何想法吗?对于JSON,没有类似cloneDataSource()的方法,那么替代方案是什么?

我的最终目标很简单:传入JSON数据并使用它生成图表,然后有一个显示相同信息的表。我已经在这方面工作了好几天,贾斯帕给了我一个艰难的时刻。请帮忙!

3 个答案:

答案 0 :(得分:8)

在使用子报告时我遇到了类似的问题。似乎JSON数据源被主报告使用,因此您需要调用subDataSource()来为您的子报告获取新的数据源,也可能用于表格 - 但尚未对此进行测试...

数据源表达式:((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource()

答案 1 :(得分:1)

如果有人使用JasperReports新的图书报告功能(版本6+中提供)并且您想使用JsonDataSource,这是将json有效负载传递到子报告的方法:

<p:subreportPart xmlns:p="http://jasperreports.sourceforge.net/jasperreports/parts" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/parts http://jasperreports.sourceforge.net/xsd/parts.xsd">
  <subreportParameter name="REPORT_DATA_SOURCE">
    <subreportParameterExpression><![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource()]]></subreportParameterExpression>
  </subreportParameter>
  <subreportExpression><![CDATA["PROFILES_cover.jasper"]]></subreportExpression>
</p:subreportPart>

您还可以通过提供节点位置作为subDataSource(java.lang.String selectExpression)方法的参数来传递json有效内容的子集。例子:

.subDataSource("Northwind.Customers")

.subDataSource("Northwind.Customers(Country == USA)")

答案 2 :(得分:0)

只需在主报告中添加数据源表达式:

->select('...', '..', '.')

它为我工作。希望它会有所帮助。