【问题标题】:null values in jasper report with xml remote datasource when report query returns empty set当报告查询返回空集时,带有xml远程数据源的jasper报告中的空值
【发布时间】:2014-10-23 06:47:28
【问题描述】:

我有一个类似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>

我想要“当没有数据时”所有部分,没有细节

但是当xml中没有row节点时,我在标题中得到了这个

Exempt report by null

但是dt在xml中还是存在的,我要Exempt report by 03.10.2014

我应该如何定义dt 字段?我应该更改报告查询吗?

我通过 REST api 与 jasper 服务器交互,只传递 jrxml 和 xml url,所以我只能更改报告模板 (jrxml)

【问题讨论】:

  • 恕我直言,将 $F{dt} 字段放在标题带中的方式不正确。你没有记录,所以你没有字段的值。尝试使用变量 $V{dt} 而不是字段
  • 是的,但是我怎样才能从 xml 中填写 $V{dt}
  • 我找不到使用变量的解决方案

标签: jasper-reports jasperserver


【解决方案1】:

将报告查询从data/row 更改为/data。 在这种情况下,报告将包含记录,因此 @dt 不会有空值。
但是此解决方案要求必须将 $F{dt} 放入 Detail 带。
在测试报告中,我认为节点&lt;data&gt; 只有一个(或零)节点&lt;row&gt;

测试 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>

如果存在带有许多&lt;row&gt; 的xml,则必须更改此报告。可能将子报表插入详细信息带并将$F{id)$F{text} 移动到子报表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多