Skip to content

Instantly share code, notes, and snippets.

@bashkirtsevich
Last active March 15, 2017 09:33
Show Gist options
  • Save bashkirtsevich/5a880577ca26aa16af427fdffb488ec1 to your computer and use it in GitHub Desktop.
Save bashkirtsevich/5a880577ca26aa16af427fdffb488ec1 to your computer and use it in GitHub Desktop.
Jasper links

Установка Jasper iReport

  • Скачиваем iReport
  • Скачиваем jre-7u67-windows-x64.tar.gz
  • Распаковываем архив в папку с iReport
  • Открываем на редактирование файл:
\iReport-5.6.0\etc\ireport.conf
  • Прописываем в файле следующее:
jdkhome=".\jre1.7.0_67"

Установка Jaspersoft Studio

Jaspersoft Studio.exe
  • Работаем и не заморачиваемся

Результаты исследования

Плюсы

  • Простота установки сервера
  • Нет необходимости устанавливать java
  • Отчет формируется в виде html-файла
  • Возможность установки размеров листа в пикселах
  • Возможность создания и использования стилей в рамках одного отчета
  • Элемент ввода даты поддерживает раскрывающийся календарь и тип данных Date и Date/Time, нет необходимости в модификации запроса
  • Дизайнер автоматически похватывает описание полей из комментариев
  • Возможность вставки таблиц с привязкой к датасетам, тем самым нет необходимости руками размещать элементы полей на листе
  • Адекватные диаграммы, в т.ч. диаграмма ганта работает по датам, так же может быть отражать данные по доп. измерению
  • Диаграммы могут строиться векторно

Минусы

  • На официальном сайте отсутсвует среда разработки OLAP-кубов, судя по всему подходит дизайнер от mondrian, возможно наследует те же проблемы разработки (но оно и не нужно, см. плюсы)
  • Сложная настройка для запуска iReports (см. инструкцию по установке Jasper iReport)
  • Дизайнер OLAP-кубов от Mondrian
  • OLAP отчеты в зачаточном состоянии, крайне неудобные в использовании
  • Не удалось реализовать передачу параметра с множественной отметкой в табличный подзапрос, нужен эксперт по Java/Groovy

Туториалы

Ошибка при открытии опубликованного отчета

После публикации отчета Jasper может начать ругаться непонятными ошибками, внимательно читая которые можно понять, что что-то не так с валидацией SQL-запроса. Решается это следующим образом:

  • Открываем в текстовом редакторе файл
jasperreports-server-cp-6.3.0\apache-tomcat\webapps\jasperserver\WEB-INF\classes\esapi\security-config.properties
пример: 
C:\jasper\jasperreports-server-cp-6.3.0\apache-tomcat\webapps\jasperserver\WEB-INF\classes\esapi\security-config.properties
  • Редактируем регулярное выражение параметра валидации
security.validation.sql.comments.regexp=^\s*(?i)(with\s+.*)?(select|call|exec(ute)?)\s+[^;]+$
  • Отключение валидации (опционально, не рекомендуется):
security.validation.sql.on=false

Запрос с множественной отметкой

  • В запросе пишем:
SELECT * from customer where $X{IN,customer_id,param_customerID}
  • Создаем параметр с именем:
Name : param_customerID
Class : java.lang.Integer
  • Создаем элемент управления с множественной отметкой для связи с параметром:
Type : Multi Select Query
Query :
SELECT DISTINCT 
        customer_id FROM customer 
ORDER BY customer_id

Параметр типа date range

You can use DateRange type to define ranges like day-1, week, year, quarter etc. and use this ranges as a query parameters.

For example lets say you have following parameter:

<parameter class="net.sf.jasperreports.types.date.DateRange" name="dateRange"><defaultvalueexpression><!--[CDATA[new net.sf.jasperreports.types.date.DateRangeBuilder("WEEK").toDateRange()]]--></defaultvalueexpression>
</parameter>

and following query:

<querystring>
<!--[CDATA[select * from test_table where $X{EQUAL, orderDate, dateRange}]]-->
</querystring>

when you will run such query you will get similar SQL:

SELECT * FROM test_table WHERE orderDate >= "START DAY OF CURRENT WEEK" AND orderDate <= "END DAY OF CURRENT WEEK"

As an expression for DateRangeBuilder you can use following syntax:

"DAY+/-n" - (for example "DAY+1", "DAY-23" - no spaces and all uppercase) means n-th day after (or before) current day,

"WEEK+/-n", "QUARTER+/n", "SEMI+/-n", "YEAR+/-n"

This type is compatible with Date type thus if you will create filed of such type then you will be asked to fill it you can enter either relative date expression as described above or regular date.

Also you can read javadoc for DateRangeBuilder class in sources of JasperReports library to find all possible cases how to use it.

Ссылки

Wiki

Разное

Видео

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment