我有title
部分的报告
"免于报告" + $ F {dt}
我按如下方式定义dt字段:
<field name="dt" class="java.lang.String">
<fieldDescription><![CDATA[ancestor::data/@dt]]></fieldDescription>
</field>
我的xpath2
查询
/data/row
我使用xml远程数据源,这里是输入(这是来自远程服务,我无法更改)
<data dt="03.10.2014">
<!-- some data like <row id="42" label="text" />, but now it is empty -->
</data>
我想要&#39;什么时候没有数据&#39;所有部分,没有细节
但是当xml中没有row
个节点时,我会在标题中找到它
Exempt report by null
但dt
仍然存在于xml中,我想要Exempt report by 03.10.2014
我应该如何定义dt
字段?我应该更改报告查询吗?
我通过REST api与jasper服务器交互,只传递jrxml和xml url,所以我只能更改报告模板(jrxml)
答案 0 :(得分:0)
将报告查询从data/row
更改为/data
。
在这种情况下,报告将包含记录,因此@dt将不具有空值。
但是这个解决方案要求$ F {dt}必须放入细节带。
在测试报告中,我认为节点<data>
只有一个(或零)节点<row>
。
测试xml
<?xml version="1.0" encoding="UTF-8"?>
<root>
<data dt="03.10.2014">
<row id="42" label="text42"/>
</data>
</root>
报告(在iReport 4.8.0中制作)
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="emptyXML" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="66c63e65-62f4-4fd9-aa1a-78c5c7d72620">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<queryString language="xPath">
<![CDATA[/root/data]]>
</queryString>
<field name="dt" class="java.lang.String">
<fieldDescription><![CDATA[@dt]]></fieldDescription>
</field>
<field name="id" class="java.lang.String">
<fieldDescription><![CDATA[row/@id]]></fieldDescription>
</field>
<field name="label" class="java.lang.String">
<fieldDescription><![CDATA[row/@label]]></fieldDescription>
</field>
<background>
<band splitType="Stretch"/>
</background>
<title>
<band height="79" splitType="Stretch"/>
</title>
<detail>
<band height="40" splitType="Stretch">
<textField>
<reportElement uuid="e9831b27-7468-4117-803b-11026ee72942" x="57" y="0" width="100" height="20"/>
<textElement/>
<textFieldExpression><![CDATA[$F{dt}]]></textFieldExpression>
</textField>
<textField isBlankWhenNull="true">
<reportElement uuid="dd52ac3a-9d1a-427b-8cb8-c5e50c0afec0" x="57" y="20" width="100" height="20" isRemoveLineWhenBlank="true"/>
<textElement/>
<textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
</textField>
<textField isBlankWhenNull="true">
<reportElement uuid="3d1e10ec-4e7a-472c-9d87-8170cf21681b" x="174" y="20" width="100" height="20" isRemoveLineWhenBlank="true"/>
<textElement/>
<textFieldExpression><![CDATA[$F{label}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
如果存在包含许多<row>
的xml,则必须更改此报告。可能会将子报表插入到详细信息区域中,并将$F{id)
和$F{text}
移动到子报表中。