24
Generowanie raportów 1 1. Wprowadzenie przykładowy problem, podstawowe własności narzędzi raportujących. 2. JasperReports struktura raportu, parametry, zmienne i pola, generowanie raportu (API). 3. iReport

Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Embed Size (px)

Citation preview

Page 1: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Generowanie raportów

1

1. Wprowadzenie

● przykładowy problem,

● podstawowe własności narzędzi raportujących.

2. JasperReports

● struktura raportu,

● parametry, zmienne i pola,

● generowanie raportu (API).

3. iReport

Page 2: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Wprowadzenie

2

Informacje zgromadzone w bazie danych są przede wszystkim wykorzystywane do

tworzenia analiz i raportów. Bezpośrednia analiza wyników zapytania SQL może

być trudna, szczególnie dla osób nie związanych zawodowo z obsługą baz danych.

Aby przedstawić wyniki w formie akceptowalnej dla tych osób używa się narzędzi

służących do generowania raportów.

Narzędzia przeznaczone do tworzenia raportów:

http://207.178.67.98/java/readerschoice2004/frameliveupdate.cfm?BType=19

Page 3: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Wprowadzenie

3

zamowieniazamowienia

id_zamowienia

data_zakupu

...

id_kontrahenta

towary

id_towaru

ilosc

cena

id_zamowienia

kontrahencikontrahenci

id_kontrahenta

nazwa

adres

...

Page 4: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Wprowadzenie

4

Przykładowe raporty:

1. Wartość sprzedaży w zadanym okresie:

SELECT SUM(t.ilosc*t.cena) FROM towary t JOIN zamowienia z ON t.id_zamowienia=z.id_zamowienia WHERE z.data<'...' AND z.data<'...'

2. Bestsellery:

SELECT t.id_towaru, SUM(t.ilosc) FROM towary t JOIN zamowienia z ON t.id_zamowienia=z.id_zamowienia WHERE z.data<'...' AND z.data<'...' GROUP BY t.id_towaru LIMIT ...

Page 5: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Wprowadzenie

5

3. Najlepsi klienci:

SELECT k.nazwa, SUM(t.ilosc*t.wartosc) FROM zamowienia z JOIN towary t ON t.id_zamowienia=z.id_zamowienia JOIN kontrahenci k ON k.kontrahent_id=z.kontrahent_id WHERE z.data<'...' AND z.data<'...' GROUP BY k.kontrahent_id LIMIT ...

Page 6: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Wprowadzenie

6

Narzędzie do generowania raportów powinno umożliwiać:

● stworzenie raportu na bazie zapytania SQL,

● eksport raportu do popularnych formatów danych (pdf, html, excel, csv, ...),

● obsługę zewnętrznych parametrów sterujących raprtem.

Istnieje wiele narzędzi służących do przygotowania raportów. Wśród darmowych na

wyróżnienie zasługuje JasperReports http://jasperreports.sourceforge.net/.

Page 7: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Wprowadzenie

7

Page 8: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

JasperReports

8

Podstawowe cechy JasperReports:

1. Samodzielna biblioteka w Javie, do wykorzystania we własnych programach.

2. Możliwość tworzenia podraportów.

3. Eksport raportów do formatów: PDF, XML, HTML, CSV, XLS, RTF, TXT.

4. Wykresy.

5. Obsługa lokalizacji.

7. Skalowalność – brak wewnętrznych ograniczeń na rozmiar raportu.

8. Rozszerzalność.

9. Dostępność narzędzi wspomagających.

10. Współpraca z wieloma mechanizmami dostępu do danych: JDBC, EJB, POJO,

Hibernate, XML.

Page 9: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

JasperReports

9

Struktura dokumentu XML:

<?xml version="1.0"?><!DOCTYPE jasperReportPUBLIC "-//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"><jasperReport name="bestsellery" ... >...</jasperReport>

Page 10: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Parametry

10

Parametry przekazywane z zewnątrz:

<parameter name="Pdate_from" isForPrompting="false"class="java.lang.String">

<defaultValueExpression><![CDATA[""]]>

</defaultValueExpression></parameter>

...<parameter name="Plimit" isForPrompting="false">

<defaultValueExpression><![CDATA["10"]]>

</defaultValueExpression></parameter>

Dostęp do parametru uzyskuje się stosując konstrukcję: $P{nazwa}.

Page 11: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Wbudowane parametry

11

Wbudowane parametry (wybrane):

REPORT_PARAMETERS_MAP – mapa wszystkich parametrów (java.util.Map).

REPORT_CONNECTION – połączenie z bazą danych (java.sql.Connection).

REPORT_DATA_SOURCE – źródło danych (JRDataSource).

REPORT_LOCALE – lokalizacja (java.util.Locale).

REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty (java.util.ResourceBundle).

REPORT_CLASS_LOADER - obiekt używany podczas wypełniania raportu do ładowania zasobów takich jak obrazki, fonty, podraporty (java.lang.ClassLoader).

IS_IGNORE_PAGINATION – jeśli ustawiony na java.lang.Boolean.TRUE raport nie będzie dzielony na strony.

Page 12: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Pola

12

Pola - atrybutów otrzymane w wyniku zapytania:

<field name="id_towaru" class="java.lang.Integer"/><field name="suma" class="java.lang.Double"/>

Dostęp do pola uzyskuje się stosując konstrukcję: $F{nazwa}.

Page 13: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Zmienne

13

Dodatkowe wewnęytrzne zmienne raportu:<variable name="Vlp" class="java.lang.Integer"

resetType="Report" calculation="Nothing"><variableExpression>

<![CDATA[new java.lang.Integer($V{Vlp}.intValue() +1)

]]></variableExpression><initialValueExpression>

<![CDATA[new java.lang.Integer(0)

]]></initialValueExpression>

</variable>Dostęp do zmiennej uzyskuje się stosując konstrukcję: $V{nazwa}.

Page 14: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Zapytanie SQL

14

Zapytanie SQL przekazuje się następująco:

<queryString><![CDATA[SELECT t.id_towaru, SUM(t.ilosc) AS suma

FROM towary tJOIN zamowienia z ON t.id_zamowienia=z.id_zamowienia WHERE z.data<'$P!{Pdate_from}' AND z.data<'$P!{Pdate_to}'GROUP BY t.id_towaru LIMIT $P!{Plimit}]]>

</queryString>

Jeśli parametr ma zostać użyty w zapytaniu SQL powinien być przekazany przez

$P!{parametr}.

Page 15: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Sekcje raportu

15

Raport składa się z następujących sekcji:● background – tło raportu,● title – nagłówek raportu,● pageHeader – nagłówek strony raportu,● columnHeader – nagłówek tabeli (nazwy atrybutów),● groupHeader – nagłówek grupy danych,● detail – zawartość raportu – sekcja jest powtarzana dla każdego rekordu danych,● GroupFooter – stopka grupy,● ColumnFoter – stopka tabeli,● PageFooter – stopka strony,● LastPageFooter – stopka ostatniej strony,● Summary - podsumowanie.

Page 16: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Sekcje raportu

16

Przykładowa sekcja:

<pageHeader><band height="30">

<rectangle><reportElement x="0" y="0" width="555"

height="25"/><graphicElement/>

</rectangle><staticText>

<reportElement x="0" y="0" width="555"height="25"/>

<textElement textAlignment="Center"><font fontName="Helvetica" size="18"/>

</textElement><text>Bastsellery</text>

</staticText></band>

</pageHeader>

Page 17: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Sekcje raportu

17

Sekcja detail:

<detail><band height="20" isSplitAllowed="true" >

<textField isStretchWithOverflow="true"><reportElement x="40" y="0" width="60"

height="15"/><box/><textElement/>

</textField><textFieldExpression class="java.lang.Integer">

<![CDATA[$V{Vlp})]]></textFieldExpression>...

</detail>

Page 18: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Korzystanie z raportu

18

Przygotowany dokument XML opisujący raport należy zapisać w pliku

(z rozszerzeniem jrxml).

Aby wygenerować raport należy go:

● skompilować,

● wypełnić,

● wyświetlić na ekranie (lub wyeksportować do pliku).

Page 19: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Kompilacja raportu

19

Do kompilacji raportu służą metody statyczne klasy:

net.sf.jasperreports.engine.JasperCompileManager.

np.

JasperCompileManager compileReportToFile("besteller.jrxml","bestseller.jasper");

lub

JasperReport jr = compileReport("besteller.jrxml");

pełna nazwa klasy JasperReport to: net.sf.jasperreports.engine.JasperReport

Page 20: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Wypełnienie raportu

20

Jeśli skompilowany raport jest w pliku najpierw należy go załadować:

Klasa: net.sf.jasperreports.engine.util.JRLoader. Przykład:

JasperReport jr = (JasperReport) JRLoader.loadObject("bestseller.jasper");

Wypełnienie raportu:

JasperPrint jp = JasperFillManager.fillReport(jr, map, con);

map – mapa parametrów (java.util.Map),

con – połączenie z bazą danych (java.sql.Connection).

Page 21: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Wyświetlenie raportu

21

Wypełniony raport (net.sf.jasperreports.engine.JasperPrint) można

wyświetlić:

JasperViewer.viewReport(jp, false);

lub wyeksportować, np:

net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfFile(jp, "bestseller.pdf");

Page 22: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Narzędzia współpracujące z JasperReports

22

Istnieje wiele narzędzi służących do graficznego projektowania raportów zgodnych z

JasperReports http://jasperreports.sourceforge.net/gui.tools.html. Najintensywniej

rozwijane to:

● iReport (http://ireport.sourceforge.net) – graficzny interfejs do JasperReports

● JasperAssistant (http://www.jasperassistant.com) – plugin do Eclipse (komercyjny)

Page 23: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

iReport

23

Page 24: Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE – lokalizacja (java.util.Locale). REPORT_RESOURCE_BUNDLE – zlokalizowane komunikaty

Podsumowanie

24

JasperReports to intensywnie rozwijane narzędzie służące do tworzenia raportów.

Korzystanie z niego ułatwia wiele narzędzi wspomagających graficzne

projektowanie raportów.