如何通过iReport将数据集从主报表传递到子报表?

时间:2015-02-11 09:14:26

标签: java groovy jasper-reports odoo

我想将数据集从主报表传输到iReport中的子报表。 在Odoo version7中,我就是这样使用的。

<parameter name="param_obj" class="java.lang.Object" isForPrompting="false"/>
<subreport>
   <reportElement x="0" y="0" width="555" height="13"/><subreportParameter name="tl_cAsset">
     <subreportParameterExpression><![CDATA[$P{tl_cAsset}]]>  </subreportParameterExpression>
   </subreportParameter>
   <dataSourceExpression><![CDATA[$P{param_obj}]]></dataSourceExpression>
   <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "acc_balance_current_assets2.jasper"]]></subreportExpression>
</subreport>

现在我使用Odoo版本8和新版本的jasper_reports模块。所以我将一些jar文件从jasper_reports模块传输到iReport IDE。后来...来自odoo version7的所有报告都导致了Groovy错误。这就是我在iReport中将Groovy语言改为Java语言的原因。但是......所有子报告都不起作用,因为param_obj参数没有将数据集带到子报告中。

如果我将dataSourceExpression从param_obj更改为$ P {REPORT_DATA_SOURCE} 这样的内置参数:

<dataSourceExpression><![CDATA[$P{REPORT_DATA_SOURCE}]]></dataSourceExpression>

,我得到了这样的错误:

Failed to invoke method execute in class com.nantic.jasperreports.JasperServer: Field "Name-name" not found in data source. 

子报告没有从参数数据源获取字段。

应该怎么样?我不知道如何将主数据集传递给子报表。 如果您不介意,请逐步解释。

PS。我使用了XPath查询语言,并为该数据集使用了xml模板文件。

1 个答案:

答案 0 :(得分:0)

使用字段标记代替参数标记
这意味着,您可以替换:

<parameter name="param_obj" class="java.lang.Object" isForPrompting="false"/>

使用:

<field name="param_obj" class="java.lang.Object" />

如果不正常,您可以在here.

中尝试其他方式