I have a report that using a parameter to determine the report title. It is displaying null when there is no data. I've tried changing the variable $V{reportName} Evaluation Time, but no luck. Can anybody help me?
Thanks. PS: It is using mssql data adapter and the current querystring does not return any row. To return rows, change 2=1 to 1=1.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 5.6.1.final using JasperReports Library version 5.6.1 -->
<!-- 2017-05-02T07:59:20 -->
<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="Evaluate" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="a736ce53-7e76-4194-9086-96d2270a6250">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="SYDPC1744-EXPRESSR2"/>
<parameter name="ReportType" class="java.lang.String">
<defaultValueExpression><![CDATA["B"]]></defaultValueExpression>
</parameter>
<queryString language="SQL">
<![CDATA[select Col1 from (values (1),(2)) as a(Col1) where 2=1]]>
</queryString>
<field name="Col1" class="java.lang.Integer"/>
<variable name="ReportName" class="java.lang.String">
<variableExpression><![CDATA[$P{ReportType}.equals("A")? $V{reportTitleA}:$V{reportTitleB}]]></variableExpression>
</variable>
<variable name="reportTitleA" class="java.lang.String">
<variableExpression><![CDATA["Report A"]]></variableExpression>
</variable>
<variable name="reportTitleB" class="java.lang.String">
<variableExpression><![CDATA["Report Other"]]></variableExpression>
</variable>
<pageHeader>
<band height="49" splitType="Stretch">
<textField evaluationTime="Report">
<reportElement x="0" y="0" width="390" height="20" uuid="98c519b9-7350-4cd6-a71e-f2fb1c0e7b80"/>
<textFieldExpression><![CDATA[$V{ReportName}]]></textFieldExpression>
</textField>
</band>
</pageHeader>
<columnHeader>
<band height="14" splitType="Stretch"/>
</columnHeader>
<detail>
<band height="15" splitType="Stretch">
<property name="local_mesure_unitheight" value="pixel"/>
<property name="com.jaspersoft.studio.unit.height" value="px"/>
<textField>
<reportElement x="0" y="0" width="100" height="14" uuid="82ab5741-1138-4173-88f5-42ef07a6cb9f">
<property name="local_mesure_unitheight" value="pixel"/>
<property name="com.jaspersoft.studio.unit.height" value="px"/>
</reportElement>
<textFieldExpression><![CDATA[$F{Col1}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
Your problem was setting the <textFieldExpression>
and not the <initialValueExpression>
.
The <textFieldExpression>
is used for calculation. Only use it for calculation!
The <initialValueExpression>
is used for your initial value of this variable.
When there is no data jasperreports won't go through the calculation expression as there is no way, you could calculate using no data at all.
So just use the initial value expression...
Chaning the evaluation time of the element has no benefits at all in this case, so you can just skip it.
Also keep in mind, that by using a good order for your variables you can avoid many errors.
Here is the working code (excerpt):
<variable name="reportTitleA" class="java.lang.String">
<initialValueExpression><![CDATA["Report A"]]></initialValueExpression>
</variable>
<variable name="reportTitleB" class="java.lang.String">
<initialValueExpression><![CDATA["Report Other"]]></initialValueExpression>
</variable>
<variable name="ReportName" class="java.lang.String">
<initialValueExpression><![CDATA[$P{ReportType}.equals("A")? $V{reportTitleA}:$V{reportTitleB}]]></initialValueExpression>
</variable>
<pageHeader>
<band height="49" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="390" height="20" uuid="98c519b9-7350-4cd6-a71e-f2fb1c0e7b80"/>
<textFieldExpression><![CDATA[$V{ReportName}]]></textFieldExpression>
</textField>
</band>
</pageHeader>