Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE...
Transcript of Generowanie raportów - users.uj.edu.plusers.uj.edu.pl/~ciesla/java/java_07.pdf · REPORT_LOCALE...
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
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
Wprowadzenie
3
zamowieniazamowienia
id_zamowienia
data_zakupu
...
id_kontrahenta
towary
id_towaru
ilosc
cena
id_zamowienia
kontrahencikontrahenci
id_kontrahenta
nazwa
adres
...
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 ...
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 ...
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/.
Wprowadzenie
7
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.
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>
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}.
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.
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}.
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}.
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}.
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.
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>
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>
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).
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
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).
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");
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)
iReport
23
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.