我正在尝试使用 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 数据并使用它生成图表,然后有一个显示相同信息的表格。 我已经为此工作了好几天,贾斯珀让我很难过。 请帮忙!
我在使用子报告时遇到了类似的问题。似乎 JSON 数据源被主报告消耗,因此您需要调用
subDataSource()
来为您的子报告以及表格获取新的数据源 - 但尚未测试过...
数据源表达:
((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource()
如果有人正在使用 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)")
只需在主报告中添加数据源表达式即可:
<subreport>
<reportElement x="-6" y="0" width="570" height="59" uuid="ac54a12b-8022-49a1-bc90-90cff664e3a1" />
<dataSourceExpression>
<![CDATA[((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("footer")]]>
</dataSourceExpression>
<subreportExpression>
<![CDATA["footer.jrxml"]]>
</subreportExpression>
</subreport>
它对我有用。希望它会有所帮助。
对于 JasperReports 7.0.1+,现在是
((net.sf.jasperreports.json.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource()
而不是 ((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource()