2

我在使用子报表时遇到 iReport 问题,我使用的是 XML 源。

XML 源

<bordereaux>
    <bordereau>
        <pages>
            <page>
                <numpage>1</numpage>
                <dosimetres>
                    <dosimetre>
                        <information>information</information>
                    </dosimetre>
                    <dosimetre>
                        ...
                    </dosimetre>
                    <dosimetre>
                        ...
                    </dosimetre>
                </dosimetres>
            </page>
            <page>
                ...
            </page>
            <page>
                ...
            </page>
            <page>
                ...
            </page>
        </pages>
    </bordereau>
    <bordereau>
        ...
    </bordereau>
    <bordereau>
        ...
    </bordereau>
<bordereaux>

问题描述

我的主要报告是在 <bordereau> 节点上进行迭代。
子报表(在主报表中)在 <page> 节点上进行迭代,在“详细信息部分”的底部有一个分页符。
(如果在每个 < dosimetre > 节点上进行迭代,则子报告中的子报告,但这对我的问题并不重要)

我需要做的是,在我的主报告的“页脚”部分,显示 <numpage> 节点的值。

我做了什么

我在每个报告中添加了 1 个名为“numPage”的变量,它们都是 java.lang.String

  • 我的子报告中的一个是“变量表达式”$F{numpage}。

  • 我的主报告中的一个通过“返回值”属性中的子报告链接到第一个

我得到了什么

我的主报表在我的 <bordereau> 节点
上很好地迭代 我的子报表在我的 <page> 节点上很好地迭代
如果我在子报表中打印 $F{numpage} 字段,我可以看到它。
如果我在子报表中打印变量 $V{numPage},我可以看到它。

但是,如果我在我的主报告中打印变量 $V{numPage},我只能看到它的最后一次“<page> 节点迭代”的值,否则我会得到一个漂亮而流畅的“null”

我不知道该怎么办......我试图玩变量的“重置类型”,玩文本字段的“评估时间”。但是每次尝试都没有效果...

再见

我希望我能很好地解释我的问题,我不是以英语为母语的人,所以我为糟糕的英语道歉......我的英语很糟糕......我应该感到难过!

非常感谢您的帮助。

尼古拉斯

4

2 回答 2

1

我知道这被问了一段时间,但我有一个类似的问题。我正在尝试获取各种子报告的返回值,以便可以更新页脚中的“参考”。

我相信这是因为子报告中的“返回值”仅在整个子报告完成时才返回,因此在此之前变量不可用。

我还没有找到解决这个问题的方法,并且已经尝试了重置类型、计算类型和评估时间。

编辑我发现这个问题的唯一解决方案是创建一个自定义脚本。您可以将 scriptlet 传递给子报告。该类的相同实例被传递给子报表,因此您可以在整个模板构建过程中随时设置和检索值。

为了在子报告中调用脚本中的方法,我在子报告中定义了一个变量,并且在表达式中我做了类似$P{SCRIPTLET}.setString("foo"). setString 方法必须返回一个 String 以便可以设置变量,然后您可以随时在主报告中调用另一个方法$P{REPORT_SCRIPTLET}.getString()来获取该值。

于 2014-06-30T14:01:11.170 回答
0

您是否正在尝试获得页码?如果是,您可以简单地从 iReport 面板中将页码字段拖放到主报表的页脚中。

于 2012-12-11T06:58:19.647 回答