Есть ли способ получить доступ к результатам SQL-запроса в виде выражения текстового поля, чтобы условно отобразить его в заголовке? - PullRequest
0 голосов
/ 31 августа 2018

Я хочу условно отобразить текстовое поле в заголовке, основываясь на существовании некоторого значения, извлеченного в одной из записей в полосе сведений.

Есть ли способ получить доступ к списку результатов набора данных из редактора выражений, чтобы я мог просматривать список результатов и проверять существование этого конкретного значения?

1 Ответ

0 голосов
/ 31 августа 2018

Я бы решил эту проблему, используя переменную, а затем время вычисления в текстовом поле.

Сначала определите переменную, которая проверяет существование этого конкретного значения , например, подсчитывая, сколько раз оно присутствует.

<variable name="SERIES_D_COUNT" class="java.lang.Integer" calculation="Sum">
   <variableExpression><![CDATA["D".equals($F{Series})?1:0]]></variableExpression>
</variable>

Затем установите на условно отображаемое текстовое поле , evaluationTime="Report"

С JasperReports api

Константа, указывающая, что выражение должно оцениваться на конец процесса заполнения.

Обратите внимание, вы можете , а не использовать printWhenExpression, это не имеет отложенной оценки. Если вам не нравится отображать какой-либо текст, вам нужно использовать аналогичное выражение

<textField evaluationTime="Report">
    <reportElement x="0" y="0" width="200" height="30" uuid="c5ce6914-e96a-4b7a-bcd9-b9febfb4d003"/>
    <textFieldExpression><![CDATA[($V{SERIES_D_COUNT}>0? "Series D is present " + $V{SERIES_D_COUNT} + " times":"")]]></textFieldExpression>
</textField>

Если вам нужен «плавающий» макет, следовательно, другое textField должно перемещаться, если значение присутствует, этот метод не может быть использован, так как администратору заливки нужно будет зарезервировать место, только содержимое (выражение) оценивается после отчета заполнены. В этих случаях вам нужно сделать подотчет и, например, повторно запросить базу данных.

Полный пример

<?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="TestAccessValue" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="4d3c7e04-2b50-46a0-b840-05ab72633357">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="ChartData"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <field name="Series" class="java.lang.String"/>
    <field name="X" class="java.lang.String"/>
    <variable name="SERIES_D_COUNT" class="java.lang.Integer" calculation="Sum">
        <variableExpression><![CDATA["D".equals($F{Series})?1:0]]></variableExpression>
    </variable>
    <title>
        <band height="35" splitType="Stretch">
            <textField evaluationTime="Report">
                <reportElement x="0" y="0" width="200" height="30" uuid="c5ce6914-e96a-4b7a-bcd9-b9febfb4d003"/>
                <textFieldExpression><![CDATA[($V{SERIES_D_COUNT}>0? "Series D is present " + $V{SERIES_D_COUNT} + " times":"")]]></textFieldExpression>
            </textField>
        </band>
    </title>
    <columnHeader>
        <band height="24" splitType="Stretch">
            <staticText>
                <reportElement x="0" y="0" width="100" height="20" uuid="8ff3bf66-0530-47d1-bd9e-c8cd392b418d"/>
                <text><![CDATA[Series]]></text>
            </staticText>
            <staticText>
                <reportElement x="100" y="0" width="100" height="20" uuid="b6e5470d-fcd8-4770-8dc4-bd194f05e15b"/>
                <text><![CDATA[X]]></text>
            </staticText>
        </band>
    </columnHeader>
    <detail>
        <band height="24" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="100" height="20" uuid="f50e1756-50da-40a3-89f3-7a906659feb1"/>
                <textFieldExpression><![CDATA[$F{Series}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="100" y="0" width="100" height="20" uuid="7adb0ce7-3bf5-42ed-b41d-2daee9ee52df"/>
                <textFieldExpression><![CDATA[$F{X}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>
...