当前位置: 首页 > 知识库问答 >
问题:

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

刘成礼
2023-03-14

我想在iReport中将数据集从主报表转移到子报表。在Odoo版本中,我就这样使用过。

<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 和版本 8 的新jasper_reports模块。所以我将一些jar文件从jasper_reports模块转移到iReport IDE。后。。。来自Odoo版本7的所有报告都导致了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. 

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

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

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

共有1个答案

越伟泽
2023-03-14

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

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

使用:

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

如果不好,您可以在此处尝试其他方式。

 类似资料:
  • 我已经创建了表的结构,在第2页中,源数据是一个JSON,包含产品及其属性列表。我想将JSON数据显示到表中,实际上有一个包含表的子报表,但不知道如何将JSON数据传递到子报表,并根据JSON数据中的productList键进行填充。报告从接收用户数据的java类填充。 我不知道如何填写第 2 页的表格,有人可以帮助我吗? 这是我在Jaspersoft Studio 6.10中的代码 主报告 子报表

  • 我有一个从DB中检索一些字段的主报告。在主报告下,我创建了一个数据集,它从另一个表中提取了一个字段值,例如X。现在我在这个主报表中包含了一个子报表。是否可以将字段X传递给子报表? 结构: 注意:字段X基本上是我需要传递给子报表的平均值,该值根据主报表查询返回的结果数量打印多次。 我正在使用Jaspersoft Studio ver 5.6.0 如果不可能,将此平均值字段传递给子报表的其他选项是什么

  • 我需要您的帮助,将csv数据源传递给subReports。 我将非常感谢您的建议或解决方案。 我使用的是iReport 5.0专业版。 我有一个非常复杂的报告,该报告从多个(大约10个)csv文件中获取数据。 我已经为报告的每个部分创建了子报告,每个子报告作为一个单独的报告运行良好。 但是当我尝试将所有子报表集成到主报表中时,我无法将数据源传递给子报表。 在Main报告中,我创建了一个名为CSVD

  • 我想在子报表上计算一些总计,并在主报表中使用。这怎么做? /Marco

  • 我将页码信息从主报表传递到页脚子报表。在主报表中,我已经声明了子报表参数pageTot和pageNum。它们通过向导映射到主报告$V{PAGE _ COUNT}和$V{PAGE _ NUMBER}中的参数。在子报表中,我声明了两个参数pageNum和pageTot。在它们的参数属性中,我取消了将use作为提示,并将它们都设置为java.lang.integer类型。然后,我替换了文本字段的文本字段