JasperReports движок поддерживает вложенные типы - мы можем использовать типизированные коллекции.
Показать коллекцию в JSS - используя диалог для установки значения
Например, мы можем объявить параметр типа Коллекция следующим образом:
<parameter name="collectionParam" class="java.util.Collection" nestedType="java.lang.Long"/>
Smallпример отчета с типом Collection:
<?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="Blank_A4_2" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
<parameter name="collectionParam" class="java.util.Collection" nestedType="java.lang.Long"/>
<title>
<band height="30" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="550" height="30"/>
<textFieldExpression><![CDATA[$P{collectionParam} != null && !$P{collectionParam}.isEmpty() ? $P{collectionParam}.toArray()[0] : "empty"]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
Мы можем инициализировать коллекцию в Jaspersoft Studio ( JSS ) следующим образом:
1-й шаг -диалоговое окно параметров вызова:
2-й шаг - добавление элемента в Collection :
Мы можем проверить (построить) отчет с помощью действия Preview:
- в результате мы показываемпервый элемент Collection с помощью выражения:
<textFieldExpression><![CDATA[$P{collectionParam} != null && !$P{collectionParam}.isEmpty() ? $P{collectionParam}.toArray()[0] : "empty"]]></textFieldExpression>
Инициализация параметра типа Collection с использованием выражения по умолчанию
Мы можем инициализировать параметр Collection введите с помощью defaultValueExpression и, например, java.util.Arrays.asList () метод:
<parameter name="collectionParam" class="java.util.Collection">
<defaultValueExpression><![CDATA[java.util.Arrays.asList("a", "b", "c")]]></defaultValueExpression>
</parameter>
Использование в запросе
Параметр типа Коллекция может использоваться в запросе с помощью выражения $X{IN, <column_name>, <parameter_name>}
.
Пример:
<parameter name="param" class="java.util.Collection">
<defaultValueExpression><![CDATA[java.util.Arrays.asList("val")]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT * FROM table_name c WHERE $X{IN, c.attr, param}
</queryString>
Это выражение будет преобразовано во время выполнения механизмом JasperReports в запрос, подобный следующему:
SELECT * FROM table_name c WHERE c.attr IN ('val')
Мы также можем использовать параметр типа String при запросе всопряжение с оператором IN с использованием выражения $P!{}
.
Пример:
<parameter name="param" class="java.lang.String">
<defaultValueExpression><![CDATA["'val1', 'val2'"]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT * FROM table_name c WHERE c.attr2 IN ($P!{param})
</queryString>
Это выражение будет преобразовано во время выполнения на JasperReports движок в запрос, как это:
SELECT * FROM table_name c WHERE c.attr2 IN ('val1', 'val2')