我在使用子报告时遇到iReport问题,我正在使用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>
我的主要报告正在迭代&lt; bordereau&gt;节点。
子报告(在主报告中)正在迭代&lt;页面&gt;节点,在“详细信息”部分的底部有分页符
(如果在每个&lt; dosimetre&gt;节点上迭代,子报表中的子子报表,但在我的问题中并不重要)
我需要做的是,在我的主报告的“页脚”部分中,显示&lt; numpage&gt;节点
我在每个报告上添加了一个名为“numPage”的变量,两个都是java.lang.String
我的子报告中的那个用于“变量表达式”$ F {numpage}。
我的主报告中的一个链接到我的子报告中的第一个“返回值”属性
我的主要报告很好地迭代我的&lt; bordereau&gt;节点
我的子报告很好地迭代我的&lt;页面&gt;节点
如果我在子报表中打印$ F {numpage}字段,我可以看到它
如果我在子报表中打印变量$ V {numPage},我可以看到它。
但是如果我在主报告中打印变量$ V {numPage},我只能看到它的最后一个“&lt; page&gt;节点迭代”的值,否则我会得到一个漂亮而流畅的“null”
我不知道该做什么......我试着玩变量的“重置类型”,以便使用文本字段的“评估时间”。 但每一次尝试都是无效的......
我希望我很好地解释了我的问题,我不是英语母语人士,所以我为糟糕的英语道歉......我的英语很糟糕......我应该心疼!
非常感谢您的帮助。
尼古拉斯
答案 0 :(得分:1)
我知道有人问这个问题,但我遇到了类似的问题。我试图获取各种子报告的返回值,以便我可以在页脚中更新“引用”。
我认为这是因为子报告中的“返回值”仅在整个子报告完成时返回,因此在此之前变量不可用。
我还没有找到解决方法,并尝试过重置类型,计算类型和评估时间。
编辑我发现此问题的唯一解决方案是创建自定义scriptlet。您可以将scriptlet传递给子报告。该类的相同实例将传递给子报告,因此您可以在构建模板的任何时候设置和检索值。
要调用scriptlet中的方法,从子报告中,我在子报告中定义了一个变量,在表达式中我做了类似$P{SCRIPTLET}.setString("foo")
的操作。 setString方法必须返回一个String以便可以设置变量,然后您可以调用主报告$P{REPORT_SCRIPTLET}.getString()
中的另一个方法来随时获取该值。
答案 1 :(得分:0)
您是否尝试获取页码?如果是,您只需从主报告页面页脚中的iReport调色板中删除页码字段。