1 Generowanie raportów 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
2 Wprowadzenie 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
3 Wprowadzenie zamowienia id_zamowienia data_zakupu... id_kontrahenta kontrahenci id_kontrahenta nazwa adres... towary id_towaru ilosc cena id_zamowienia
4 Wprowadzenie 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...
5 Wprowadzenie 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...
6 Wprowadzenie 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 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. 8
9 JasperReports Struktura dokumentu XML: <?xml version="1.0"?> <!DOCTYPE jasperreport PUBLIC "-//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"> <jasperreport name="bestsellery"... >... </jasperreport>
Parametry 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}. 10
11 Wbudowane parametry 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.
12 Pola 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 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}. 13
14 Zapytanie SQL Zapytanie SQL przekazuje się następująco: <querystring> <![CDATA[SELECT t.id_towaru, SUM(t.ilosc) AS suma FROM towary t JOIN 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}.
15 Sekcje raportu 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 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> 16
Sekcje raportu 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> 17
18 Korzystanie z raportu 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).
19 Kompilacja raportu 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
20 Wypełnienie raportu 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).
21 Wyświetlenie raportu 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");
22 Narzędzia współpracujące z JasperReports 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
24 Podsumowanie 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.