У сучасному світі візуалізація даних є одним із найважливіших аспектів в розробці програмного забезпечення. Jasper Report, як інструмент для створення звітів, надає можливість розробникам гнучко працювати з даними та представляти їх у вигляді зручних та зрозумілих звітів.
Одним із поширених завдань у створенні звітів є конкатенація рядків із піддатасету. Розглянемо цей процес докладніше із застосуванням Jasper Report та мови програмування Java.
Уявімо, що ми маємо джерело даних у вигляді JSON-об’єкта, де вказані учасники комітету з їхніми іменами:
1 2 3 4 5 6 |
{ "committee":[ { "name": "Ім'я Прізвище По-батькові" }, { "name": "Ім'я1 Прізвище1 По-батькові1" } ] } |
Нам потрібно показати ці імена двома способами: в табличному вигляді (що є стандартним для Jasper Report) та у вигляді рядка з комами між іменами.
Щоб отримати рядок із піддатасету у вигляді “Ім’я Прізвище По-батькові, Ім’я1 Прізвище1 По-батькові1”, можна використати функцію конкатенації рядків. У Jasper Report це можна зробити за допомогою виразів у полі Text Field Expression або за допомогою Java-коду.
Перший спосіб – використати вирази. Для цього використаємо функцію join з бібліотеки Apache Commons для Java:
1 |
<![CDATA[$F{committee}.stream().map(c -> c.get("name")).collect(Collectors.joining(", "))]]> |
У цьому виразі ми спочатку перетворюємо піддатасет у потік (stream), потім витягуємо значення “name” для кожного елемента, а потім збираємо їх у рядок, розділений комами.
Інший спосіб – використати Java-код безпосередньо в звіті. Для цього створимо нове поле у звіті і додамо до нього наступний Java-код:
1 2 3 4 5 6 |
<![CDATA[ public String getCommitteeNames() { List<Map<String, String>> committee = (List<Map<String, String>>)this.getFieldValue("committee"); return committee.stream().map(c -> c.get("name")).collect(Collectors.joining(", ")); } ]]> |
Після цього можна викликати цей метод у полі Text Field Expression:
1 |
<![CDATA[$P{REPORT_SCRIPTLET}.getCommitteeNames()]]> |
Обидва способи дозволяють отримати рядок з піддатасету у вигляді, який вам потрібен, з використанням інструментів, доступних у Jasper Report та мові програмування Java.