JasperReports 1.3.2
Рубрика: JasperReports | 18 April 2007, 08:26 | juriy
30-го марта вышел новый релиз JasperReports http://www.jasperforge.org/index.php?option=com_content&task=view&id=286&Itemid=214 . Кроме исправления ошибок и улучшения существующей функциональности JasperReports 1.3.2 представил две новых языковых конструкции $P!{…} и $X{…}.
Оба новых элемента нацелены на поддержку динамических запросов в шаблоне отчета. Напомню, что в предыдущих релизах в элементе queryString можно было использовать значения параметров ($P{…}). В таком случае параметры трактовались как bind переменные (знаки “?” в PreparedStatement). Другими словами, существенно изменить структуру запроса было нельзя.
С выходом JasperReports 1.3.2 ситуация изменилась. С помощью синтаксиса $P!{имя_параметра} в запрос можно передавать параметры, которые будут трактоваться, как текст запроса.
Вторая конструкция $X{…} упрощает работу с выражениями IN (…) и NOT IN(…) – когда количество параметров неизвестно до момента наполнения отчета.
Ниже приведен фрагмент примера из стандартной поставки JasperReports 1.3.2:
[xml]
…
ORDER BY $P!{OrderClause}]]>
…
[/xml]
[java]
…
List excludedCities = new ArrayList();
excludedCities.add(“Boston”);
excludedCities.add(“Chicago”);
excludedCities.add(“Oslo”);
parameters.put(“ExcludedCities”, excludedCities);
parameters.put(“OrderClause”, “City”);
if (TASK_FILL_IGNORE_PAGINATION.equals(taskName)) {
parameters.put(JRParameter.IS_IGNORE_PAGINATION, Boolean.TRUE);
}
JasperFillManager.fillReportToFile(fileName, parameters, getConnection());
System.err.println(“Filling time : ” + (System.currentTimeMillis() – start));
System.exit(0);
…
[/java]
Если с синтаксисом $P!{…} все довольно просто (по сути, он ничем не отличается от $P{…}, то $X{…} я рассмотрю немного детальнее.
Итак, $X{…}, как впрочем и $P{} используется исключительно в элементе queryString. Синтаксис $X{…} – такой:
$X{IN, имя_поля, включения}
$X{NOTIN, имя_поля, исключения}
Литералы IN и NOTIN указывают какое действие следует выполнить: включение (IN) или исключение (NOTIN).
имя_поля – название поля в запросе, над которым следует произвести действие.
включения, исключения – это List значений, которые необходимо включить/исключить.

Крута! Спасибо! То, что искали!
Thanks!
Подскажите, а как правильно в репорте, использующий в качестве источника данных XML написать запрос. Я написал вот таким образом но у меня что то не получилось
//ITEMS/ITEM[@ITEMNO $X{NOTIN, @ITEMNO, ExcludedITEM}]
пробовал также
//ITEMS/ITEM[$X{NOTIN, @ITEMNO, ExcludedITEM}]