2017-05-01 13 views
0

レポートのタイトルを決定するためにパラメータを使用するというレポートがあります。データがない場合はnullを表示しています。私は変数$ V {r​​eportName}の評価時間を変更しようとしましたが、運はありません。誰か助けてくれますか?データがないときにジャスパーレポート変数を評価するにはどうすればよいですか?

ありがとうございました。 PS:mssqlデータアダプタを使用していますが、現在のクエリ文字列は行を返しません。行を返すには、2 = 1を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> 

答えて

1

あなたの問題は<textFieldExpression>

なく<initialValueExpression>を設定しました。

<textFieldExpression>が計算に使用されます。 計算にのみ使用してください!

<initialValueExpression>は、この変数の初期値として使用されます。

データがない場合jasperreportsは計算式を実行しません。データがない場合は計算できません。あなたはそれをスキップすることができるように

だから初期値式を使用して...要素の評価時間をChaning

は、全くこの場合には利点がありません。

また、変数に適切な順序を使用することで、多くのエラーを回避することができます。

<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> 
+0

ありがとう:ここ

は、作業コード(抜粋)です。私がオフィスにいるときに試してみるよ。 – Jules

+0

これは、データがない場合にのみ機能します。データの有無に関わらず、初期値と可変式の両方に値を設定します。ありがとう。 – Jules

関連する問題