Implementacja modułu raportowania systemu

Transkrypt

Implementacja modułu raportowania systemu
Państwowa Wyższa Szkoła Zawodowa
w Tarnowie
Instytut Politechniczny
Kierunek: INFORMATYKA
Specjalność: Informatyka stosowana
Specjalizacja: Informatyka w telekomunikacji
Sławomir Węc
PRACA INŻYNIERSKA
Implementacja modułu
raportowania systemu ornitologicznego
Opiekun pracy:
dr inż. Robert Wielgat
Tarnów, 2011
Praca inżynierska – Węc S.
W tym miejscu pragnę gorąco podziękować Panu dr inż. Robertowi Wielgatowi,
opiekunowi mojej pracy oraz mgr inż. Tomaszowi Potempie za życzliwość i udzieloną
pomoc. Wskazówki, cenne rady, które przyczyniły się do powstania ostatecznej wersji
niniejszej pracy.
1
Implementacja modułu raportowania systemu ornitologicznego
Spis treści
1
Wstęp .............................................................................................................................4
1.1
2
Cel ...........................................................................................................................5
Narzędzia i technologie...................................................................................................6
2.1
JavaServer Pages....................................................................................................6
2.2
Java .........................................................................................................................7
2.3
JasperReports.........................................................................................................8
2.3.1 JasperServer ......................................................................................................9
2.3.2 iReport ..............................................................................................................9
2.4 Structured Query Language ................................................................................13
3
2.5
Środowisko IDE....................................................................................................14
2.6
Serwer WWW.......................................................................................................15
2.6.1 Serwer Apache ................................................................................................15
2.6.2 Konfiguracja ...................................................................................................16
Baza Danych.................................................................................................................18
3.1
PostgreSQL...........................................................................................................18
3.1.1 Zalety systemu PostgreSQL.............................................................................19
3.2 Narzędzia do współpracy z bazą ..........................................................................19
3.3
4
5
Schemat bazy danych ...........................................................................................19
Dane raportów ..............................................................................................................21
4.1
Przykładowe formularze MTO............................................................................21
4.2
Raport o współpracownikach: .............................................................................26
4.3
Raport obserwacji: ...............................................................................................27
Opis stworzonego interfejsu..........................................................................................29
5.1
Interfejs użytkownika...........................................................................................29
5.1.1 Struktura katalogów ........................................................................................30
5.2 Opis wybranych fragmentów kodu......................................................................32
6
7
5.2.1 Widok .............................................................................................................32
5.2.2 Pobieranie parametrów z formularza. ..............................................................34
5.2.3 Połączenie z bazą danych. ...............................................................................35
5.2.4 Zapisywanie raportu w formie pliku PDF ........................................................36
Raporty.........................................................................................................................38
6.1
Szablony................................................................................................................39
6.2
Zapytania SQL .....................................................................................................42
Format XML.................................................................................................................44
7.1
Struktura dokumentu XML.................................................................................45
7.2
Parametry .............................................................................................................46
7.3
Zapytanie SQL .....................................................................................................46
7.4
Pola........................................................................................................................46
2
Praca inżynierska – Węc S.
7.5
Zmienne ................................................................................................................46
7.6
Podraport..............................................................................................................47
8
Podsumowanie..............................................................................................................48
9
Bibliografia...................................................................................................................49
3
Implementacja modułu raportowania systemu ornitologicznego
1 Wstęp
Ochrona środowiska naturalnego ma coraz większe znaczenie dla człowieka. Bardzo
ważnym składnikiem otaczającego nas środowiska są ptaki. Człowiek z pewnością ma prawo
do korzystania z bogactw przyrody, ale coraz częściej są one nadmiernie eksploatowane, co
degraduje środowisko, a tym samym podstawy życia samego człowieka. Wiele jest sposobów
na zahamowanie procesów wyniszczających naszą przyrodę. Jedną z nich jest na pewno
ocena różnorodności biologicznej środowiska. Badanie naturalnych i wywołanych przez
człowieka zmian zróżnicowania genetycznego, gatunkowego, a także zróżnicowania siedlisk
oraz ekologicznych konsekwencji tych zmian pomagają w ochronie rzadkich i zanikających
gatunków zwierząt, w szczególności ptaków. Ptaki zawsze znaczyły bardzo wiele dla
człowieka, w swych początkach były dla niego źródłem pokarmu, a niektóre gatunki do dziś
są nieodzowne w naszej gospodarce. W chwili obecnej jednak większość gatunków pełni rolę
obiektów badań naukowych dla człowieka. Dzięki tym zwierzętom możemy łatwo
zaobserwować niekorzystne zmiany w środowisku zarówno fauny jak i flory, poprzez
określanie ich liczebności na danym obszarze. Wiele gatunków już wyginęło lub są na skraju
wyginięcia, do czego doprowadził rozwój cywilizacyjny człowieka. Dlatego też stworzono
Czerwoną Księgę, w której znajdują sie wszystkie zagrożone gatunki. Została ona
opracowana przez Międzynarodową Unię Ochrony Przyrody i Jej Zasobów (IUCNInternational Union for Conserwation of Nature and Natural Resources).
Tak więc, obserwacje ornitologiczne pozwalają określić stan degradacji środowiska.
Wpływ pojedynczych osób na ochronę ptaków jest nie wielki, gdyż przeważnie kończy sie na
zimowym ich dokarmianiu
i wywieszaniu skrzynek lęgowych. Większe możliwości mają
organizacje społeczne jaką jest Małopolskie Towarzystwo Ornitologiczne (MTO), które
zrzeszają ornitologów amatorów jak i osoby które zajmują sie tym zawodowo oraz grupy
pasjonatów i miłośników ptaków.
Wszelkie obserwacje, badania i informacje członkowie MTO zamieszczają na
papierowych formularzach, co jest bardzo czasochłonne i trudne do analizy. Dlatego też
powstał innowacyjny pomysł,
aby w sposób elektroniczny uzupełnić zbieranie i
magazynowanie danych, a także w późniejszym czasie całkowicie zastąpić rejestrację danych
na papierowych formularzach. Przedmiotem projektu jest stworzenie modułu systemu
4
Praca inżynierska – Węc S.
raportowania, którego implementacje oparto na funkcjonalności bazy danych jak i formularzy
MTO. W pracy wykorzystano wybrane przykłady raportów i formularzy.
1.1 Cel
Głównym celem tego projektu jest stworzenie sytemu raportowania, do którego dostęp
będą mieli nie tylko zawodowi ornitolodzy, ale wszyscy członkowie MTO. Ponadto raporty
są doskonałym sposobem na kontrolowanie własnej pracy przez ornitologów na rzecz
Towarzystwa, poprzez możliwość sprawdzenia i wydrukowania dokonanych przez siebie
obserwacji oraz możliwość znalezienia jakiejkolwiek nieścisłości w prowadzonych danych.
Innym, równie ważnym celem powstania tego projektu jest usprawnienie pracy pracownikom
MTO, zwłaszcza przy wyszukiwaniu potrzebnych danych w bazie czy nawet przy organizacji
wielu akcji obserwacyjnych.
5
Implementacja modułu raportowania systemu ornitologicznego
2 Narzędzia i technologie
2.1 JavaServer Pages
JSP
(ang.
JavaServer
Pages)
to
technologia
umożliwiająca
projektowanie
dynamicznych stron WWW. Technologia ta została dodana do narzędzi z grupy Java
Enterprise Edition pod koniec 1999 roku. W JSP strony są tworzone w formatach HTML,
XHTML, DHTML oraz XML z wykorzystaniem języka Java, wplecionego w kod HTML
danej strony.
Strona JSP w procesie translacji zostaje zamieniona na serwlet. Każdorazowe
wywołanie w przeglądarce strony JSP jest wykonywane przez skompilowany serwlet.
Stosując prekompilację (kompilacje wstępną) już podczas startu aplikacji wszystkie strony
JSP zostaną przetłumaczone na serwlety.
Rys.1. Proces wykonywania pliku JSP. Tłumaczenie (b) następuje jeśli plik JSP (a) jest nowy
lub dokonaliśmy zmian, jeśli nie to tłumaczenie jest pomijane .
6
Praca inżynierska – Węc S.
W JSP rozróżnia się następujące elementy:
treść statyczna - czyli czysty kod HTML, jest on przepisywany bez zmian do
generowanego dokumentu
dyrektywy JSP – informacje, które nadzorują proces generowania dokumentu
skryplety - kod w języku Java, który jest odpowiedzialny za proces generowania
dokumentu
akcje JSP - tagi XML wywołujące określone metody na serwerze.
2.2 Java
Java jest obiektowym językiem programowania.
Napisane w tym języku programy
mogą być uruchamiane na komputerach z różnymi systemami operacyjnymi, jak również na
telefonach komórkowych oraz w aplikacjach internetowych. Warunkiem jest instalacja
Wirtualnej maszyny Javy w danym środowisku. Przenośność to właśnie jedna z
charakterystycznych cech języka Java.
Java została stworzona przez grupę roboczą pod kierunkiem Jamesa Goslinga z firmy
Sun Microsystems. Programy źródłowe napisane w języku Java są następnie kompilowane do
postaci wykonywanej przez maszynę wirtualną, czyli kodu bajtowego. Podstawowe pomysły
zostały zaczerpnięte z języka Smalltalk, jak
na przykład zwalnianie zajętej pamięci oraz
maszyna wirtualna. Natomiast duża część składni i słów kluczowych została zapożyczona z
języka C i C++. Java często jest mylona z językiem JavaScript, a jedyną cechą, która je łączy
jest składnia podstawowych instrukcji.
Najważniejsze założenia języka Java to :
Obiektowość Javy
W przeciwieństwie do języka C++, Java jest silnie ukierunkowana na obiektowość.
Wszelkie dane i akcje na nich podejmowane są pogrupowane w klasy obiektów. O
obiekcie można myśleć jako o samoistnej części programu, która może
przyjmować określone stany i ma określone zachowania, które mogą zmieniać te
stany bądź przesyłać dane do innych obiektów. Wyjątkiem od całkowitej
obiektowości są typy proste (int, float itp.).
7
Implementacja modułu raportowania systemu ornitologicznego
Niezależność od architektury
Tą niezależność Java uzyskuje poprzez to, iż kod źródłowy napisany przez
programistę w Javie zostaje następnie skompilowany do neutralnych pod
względem architektury formatu plików obiektowych. Skompilowany kod może
być wykonywany niezależnie od systemu operacyjnego i procesora. Kompilator
Javy potrafi to uczynić ponieważ generuje zestaw instrukcji, które nie mają nic
wspólnego z konkretną architekturą komputera. Instrukcje są natomiast
zaprojektowane w ten sposób, aby były łatwe do zinterpretowania na każdej
maszynie i aby można było przełożyć je na język maszynowy w czasie
rzeczywistym.
Jednak z uwagi na to, że kod pośredni jest interpretowany, taki program jest
wolniejszy niż kompilowany bezpośrednio do kodu maszynowego. Z tego względu
maszynę wirtualną często uzupełnia się o kompilator Just-in-Time. Istnieją
również niezależne od Suna kompilatory Javy czyli GNU Compiler Collection o
nazwie GCJ. W rezultacie powstaje szybszy kod, ale można go uruchamiać na
jednej tylko platformie, a więc nie jest przenośny.
2.3 JasperReports
JasperReports jest to narzędzie raportujące Javy typu open source (otwarte
oprogramowanie), które umożliwia wyświetlenie na ekranie, drukowanie raportu lub jego
eksportowanie do różnych dokumentów w formatach takich jak: HTML, PDF, Excel,
Word czy OpenOffice. Ma możliwość zastosowania w aplikacjach Java, w tym Java EE
lub aplikacjach sieci Web, do generowania dynamicznej zawartości. Odczytuje także
instrukcje z pliku XML lub Jaspis.
JasperReports to biblioteka klas Javy, która może zostać wbudowana w dowolną
aplikację Java, ponieważ jest realizowana w 100% w kodzie Javy, aby bez problemu można
ją było umieścić w aplikacji. Dzięki standardom definicja raportu w XML pozwala
użytkownikom na tworzenie raportów o dowolnej długości i złożoności.
8
Praca inżynierska – Węc S.
Najważniejsze z funkcji JasperReports to:
 Możliwość eksportowania raportów do różnorodnych formatów.
 Korzystanie z wielu źródeł danych takich jak: JDBC, CALS Table Models,
JavaBeans, EJBQL, XML, Hibernate.
 Skrypty napisane w Javie mogą towarzyszyć w definicji raportu.
 Możliwość generowania podraportów.
 Elastyczny układ raportu.
 Możliwość generowania znaków wodnych.
2.3.1 JasperServer
JasperServer jest systemem opartym o technologię JEE, to także platforma dla
raportów oraz analiz OLAP. Pozwala tworzyć raporty ad hoc (tylko dla wersji Professional), a
także uruchamiać zarówno raporty statyczne jak i interaktywne analizy OAP. Przy jej pomocy
administrator może także nimi zarządzać. Na serwerze użytkownik może stworzyć nowy
raport ad hoc. Użytkownicy nie muszą wnikać w sposoby opisu połączeń do bazy danych,
ponieważ konfiguracja dostępu do danych dla tych raportów jest wcześniej przygotowana i
udostępniona przez administratorów.
Tworząc nowy raport wybieramy opcję „Utwórz raport”, a następnie z listy
zapisanych tematów lub dziedzin wybieramy odpowiadające dla naszego raportu pozycje i
wskazujemy typ raportu. Przed przystąpieniem do projektowania można także podać
parametry. Tworzenie raportu jest bardzo proste polega na przeciąganiu list i pól na obszar
raportu, przy czym na obszarze tym pola same dostosowują się do siebie tak, aby jak
najbardziej ułatwić to użytkownikowi. Wyświetlane są także od razu po przeciągnięciu dane
w tych polach.
Z poziomu serwera JasperServer można także publikować zwykłe raporty, zapisane w
stosowanym przez JasperReports formacie JRXML. Mogą to być szablony utworzone ręcznie
w edytorze XML, za pomocą narzędzia iReport, czy też innego lecz publikować je może tylko
administrator.
2.3.2 iReport
Kluczowym punktem w interfejsie JasperReports jest iReport, jest to program do
projektowania raportów, który daje użytkownikowi całkowitą kontrolę nad treścią jak i
9
Implementacja modułu raportowania systemu ornitologicznego
również nad wyglądem każdego raportu. Pliki stworzone przez iReport zawierają wszystkie
potrzebne informacje konfiguracyjne oraz takie jak na przykład zapytania SQL, które służą
do przejęcia danych oraz określenia parametrów wejściowych. Pliki Jasper maja możliwość
włączenia ich do aplikacji Java przy użyciu JasperReports API i w ten sposób łączyć się ze
źródłem danych i generować raporty, a jeśli jest potrzeba pobierać parametry wejściowe,
które mogą posłużyć na przykład do filtrowania rekordów w bazie. Następnie raport można
wyeksportować do każdego obsługiwanego formatu (np. PDF). Wszystkie te operacje można
bezpośrednio wykonać w iReport.
Przy projektowaniu bardziej złożonych raportów iReport jest nieodzowny. Tworzy on
w sposób wizualny definicje JRXML, potrafi też sprawdzić czy ta definicja jest bez błędów
obsługiwana przez bibliotekę JasperReport oraz uruchomić raport. iReport posiada kreator,
którym szybko utworzymy szablon raportu, co jest dość przydatne i pozwala na szybsze
przejście wstępnych czasochłonnych kroków, a także wybór określonego stylu. Można też
tworzyć ręcznie szablon od zera.
Rys.2. Okno główne iReport.
10
Praca inżynierska – Węc S.
Służy do tego ekran, na którym mamy do dyspozycji:
Główną płaszczyznę szablonu, podzieloną na poziome sekcje (bands) odpowiadające
częściom raportu o różnej powtarzalności:
o „title” - jej zawartość jest drukowana tylko raz na początku raportu
o „pageHeader” – jej zawartość pojawia się na każdej stronie
o columnHeader” – sekcja pojawia się na każdej stronie pod nagłówkiem strony
(nagłówek kolumn)
o “detail” – sekcja ta pojawia się tyle razy, ile wyników zwróciło zapytanie SQL
o “columnFooter” –stopka kolumny pojawia się pod kolumną na każdej stronie
tuż pod sekcją “detail”
o “pageFooter” – stopka strony pojawia się na każdej stronie na samym jej dole
o “lastPageFooter” - sekcja stopki ostatniej strony raportu (jeśli ta sekcja ma
wysokość
większą niż zero, to zastępuje sekcje „pageFooter” na ostatniej stronie raportu)
o “summary” - sekcja podsumowania umieszczona jest na końcu raportu pod
ostatnim
wierszem w sekcji „detail” i przed „columnFooter” i „pageFooter”.
Taki podział występuje w wielu narzędziach do projektowania szablonów i
wydaje się trywialny, lecz do bardziej skomplikowanych szablonów można zawsze
umieścić na układzie jeden lub więcej podraportów i to znacznie zwiększa jego
możliwości. Podraporty umożliwiają pobieranie danych z innych tabel. Tworzy się je
w taki sam sposób jak zwykły raport. Po utworzeniu podraportu podłączamy go do
głównego raportu. W tym celu należy z głównego menu wybrać narzędzie podraport i
w taki sam sposób jak wszystkie inne pola umieścić podraport na głównym raporcie.
Następnie w kreatorze wpisuje się zapytanie SQL dla naszego podraportu i wybieramy
pola, które znajdą się w naszym podraporcie. Później jest wybierana ścieżka dla pliku
naszego podraportu: czy ma być ona podana przez parametr i może
być wtedy
zapisany dowolnie na dysku, czy też bardziej statycznie w tym samym folderze co
główny raport. W oknie właściwości dostępne są poza zakładkami Common i All
jeszcze dwie Subreport i Subreport (Other). W zakładce Subreport w polu
„Connection Data /Source Expression” należy wybrać „użyj połączenia” i poniżej w
11
Implementacja modułu raportowania systemu ornitologicznego
pole wpisać $P{REPORT_CONNECTION}. Zakładka „Subreport Parameters” na
zakładce Subreport (Other) służy do przekazania parametrów zmiennych i wartości
pól pobranych z bazy do podraportu. Aby dodać przekazywanie nowej wartości należy
kliknąć nowy i w pojawiające się okno wpisać nazwę parametru w podraporcie (w
utworzonym podraporcie musi znajdować się parametr o takiej samej nazwie) i
wyrażenie określające przekazywaną wartość. W zależności od tego w jakiej sekcji
umieścimy podraport pojawi się on jeden lub więcej razy. Jeśli zostanie umieszczony
w sekcji „detail” to przy każdym zwracanym wierszu z głównego zapytania zostaną
przekazane do podraportu aktualne zmienne i zostanie wygenerowany nowy podraport
i umieszczony na głównym raporcie. Podobnie będzie miało miejsce z podraportem
umieszczonym w nagłówku lub stopce grupy(jeśli grupa będzie się zmieniała). Dla
pozostałych sekcji podraport wykona się tylko raz i raz zostanie wyświetlony. Plik z
podraportem powinien być umieszczony w katalogu głównym programu iReport lub
powinna być podana do niego pełna ścieżka dostępu w parametrze.
Okno pokazujące aktualnie otwarte pliki szablonów. iReport pozwala pracować z
wieloma szablonami jednocześnie.
Okno struktury dokumentu. Pokazuje ono strukturę w postaci drzewa, w podziale na
poszczególne sekcje. Są to wszystkie parametry, pola danych, zmienne i elementy
układu szablonu. Oczywiście jak można się tego spodziewać, po zaznaczeniu elementu
w drzewie struktury, zostaje on jednocześnie zaznaczony na układzie. Niestety nie da
się przeciągać elementów w ramach samego drzewa, co, choć niesie ze sobą różne
problemy do rozstrzygnięcia, jest dość naturalne i byłoby wygodne.
Paletę właściwości zaznaczonego obiektu.
Okno bibliotek zawierające stosowane najczęściej wyrażenia, takie jak liczba stron,
czy aktualna data.
Na samej górze ekranu, pod menu, znajdują się paski narzędzi, które ułatwiają
formatowanie elementów układu. Wybierać można spośród wszystkich możliwości
dosuwania,
centrowania,
dostosowywania
rozmiaru,
zmiany
odstępów
pomiędzy
poszczególnymi polami. Dzięki temu nie traci się czasu na próby osiągnięcia dostatecznej
precyzji ruchów myszy, a na koniec, na żmudne kopiowanie wartości współrzędnych w oknie
właściwości. W iReport
działają również takie standardowe funkcje jak wybór wielu
12
Praca inżynierska – Węc S.
elementów poprzez zaznaczenie myszą całego obszaru, przesuwanie elementów przy pomocy
kursorów.
iReport jest bardzo zintegrowany z Javą, gdyż dla każdego pola danych, nawet wtedy,
gdy źródłem jest zapytanie SQL, musi zostać określona klasa tego pola, parametru czy
zmiennej. Oczywiście same źródła danych i zapytanie mogą być także definiowane poprzez
kod Javy i to na wiele sposobów. Dla samych tylko źródeł bazodanowych JDBC oprócz SQL
można zdecydować się na HQL (język zapytań używany w Hibernate) i EJBQL. Źródłami
danych mogą być też JavaBeans, Hibernate, Hibernate wraz ze Spring, własny interfejs
JRDataSourceProvider i inne.
Konieczność użycia kodu Javy, może doprowadzić w projektach do braku separacji
warstwy generowania raportów dla danego systemu od samego kodu tego systemu.
Konieczność częstej pracy z kodem może prowadzić też do wniosku, że tak naprawdę
używanie takiego narzędzia jak iReport wcale nie jest wygodne, bo oznacza pracę w dwóch
środowiskach: IDE Javy i iReport. Niezależnie od rozważań na temat separacji raportowania
w aplikacji, należy uznać, że iReport jest narzędziem zapewniającym wszystko, co niezbędne
do stworzenia szablonu raportu, a w dodatku stabilnym i nie stwarzającym problemów.
2.4 Structured Query Language
SQL (ang. Structured Query Language) jest strukturalnym językiem zapytań
używanym do tworzenia, modyfikowania baz danych oraz do umieszczania i pobierania
informacji z bazy. Język SQL jest językiem deklaratywnym. Decyzję o sposobie
przechowywania i pobrania danych pozostawia się systemowi zarządzania bazą danych
(DBMS). SQL został standardem w komunikacji z serwerami relacyjnych baz danych. Język
ten stał się bardzo popularny
we współczesnych systemach relacyjnych baz danych, a
powstał on w IBM w latach 70. Z technicznego punktu widzenia SQL jest podjęzykiem
danych, gdyż nie może służyć do tworzenia kompletnych programów a jedynie do
komunikowania się z bazą danych.
Wyróżnia się trzy formy SQL :
 Interakcyjny - służy do bezpośredniego pobierania lub wprowadzania danych do bazy.
13
Implementacja modułu raportowania systemu ornitologicznego
 Statyczny - pisany jest razem z aplikacją w której jest używany podczas jej działania i
nie ulega zmianom.
 Dynamiczny - generowany jest w trakcie działania aplikacji, jeśli wcześniej nie było
możliwości określenia treści potrzebnych zapytań.
Używanie SQL polega na zadawaniu pytań do bazy danych. Wyróżnia się trzy główne
podzbiory zapytań :
DML (język manipulacji danymi) - służy do wykonywania operacji na danych
DDL (język definicji danych) - służy do operowania na strukturach bazy
DCL (język kontroli nad danymi) - służy do nadawania uprawnień bazodanowych
W SQL zdarzają się sytuacje nadużyć w przypadku tworzenia zapytań z
wykorzystaniem parametrów pochodzących z zewnątrz aplikacji, ponieważ jest to język
interpretowany. Dlatego zadaniem autora aplikacji jest też zadbanie o sprawdzanie
poprawności, czyli walidację danych wejściowych stanowiących część zapytania, gdyż ktoś
może być w stanie dopisać do zapytania jakieś komendy.
2.5 Środowisko IDE
IDE, czyli zintegrowane środowisko programistyczne, którego głównym celem jest
przyśpieszenie budowy aplikacji. Najczęściej wykorzystywanymi aplikacjami tego typu są
NetBeans firmy Sun i Eclipse firmy IBM. Obydwie aplikacje pierwotnie powstały dla języka
Java, ale z biegiem czasu dodano wsparcie dla innych języków w tym PHP. Eclipse ma wiele
pożytecznych cech, ale odznacza się także powolnym działaniem. NetBeans ma możliwość
doinstalowania wtyczki iReport i to właśnie ten system posłużył do stworzenia aplikacji.
NetBeans jest projektem typu "open source" o coraz większej popularności i stale
wzrastającej społeczności użytkowników. O wielkim sukcesie NetBeans świadczy fakt, że z
projektem tym współpracuje już prawie 100 firm na całym świecie. Projekt NetBeans został
uruchomiony w czerwcu 2000 roku przez firmę Sun Microsystems będącą od tej pory
głównym jego sponsorem.
14
Praca inżynierska – Węc S.
Na Rys.3. Widok okna głównego IDE NetBeans.
2.6 Serwer WWW
Serwerem obsługującym aplikacje jest Apache. Jest to najpopularniejszy i zarazem
darmowy system dostępny dla wielu systemów operacyjnych (m.in. UNIX, GNU/Linux,
BSD, Mac OS X, Microsoft Windows).
2.6.1 Serwer Apache
Apache jest najszerzej stosowanym serwerem HTTP w Internecie. W maju 2006 jego
udział wśród serwerów wynosił prawie 65%. W połączeniu z interpreterem języka
skryptowego PHP i bazą danych MySQL, Apache stanowi jedno z najczęściej spotykanych
środowisk w firmach oferujących miejsce na serwerach sieciowych.
Najważniejsze cechy serwera i obsługiwane moduły
 wielowątkowość
 skalowalność
 bezpieczeństwo
15
Implementacja modułu raportowania systemu ornitologicznego
 kontrola dostępu/uwierzytelnianie: mod_access
 CGI
 proxy typu HTTP, FTP, CONNECT: mod_proxy*
 SSI: mod_include
 Content-Negotation: mod_negotation
 moduł URL-Rewriting: mod_rewrite
 SSL: mod_ssl
 możliwość osadzania interpreterów języków skryptowych, np. mod perl,
mod_php czy mod_python
2.6.2 Konfiguracja
Najnowsze wersje serwera Apache posiadają interfejs graficzny GUI. Program Apache
parsuje plik konfiguracyjny httpd.conf (oraz inne zdefiniowane przez użytkownika, bądź sam
program).
Plik konfiguracyjny dystrybucji Apache z serii 2.0 zawiera sekcje:
Global Environment
 środowisko serwera
 podstawowe parametry sieciowe
 lista dołączanych modułów
'Main' server configuration
 położenie dokumentów
 połączenie
 aliasy
 określenie dostępu do zasobów
 formaty i położenie dzienników serwera
 moduły CGI
 opcje automatycznego indeksowania katalogów
 Content Negotation (ang. negocjacja treści)
 własne dokumenty błędów serwera (dyrektywy ErrorDocument)
 konfiguracja modułu mod_proxy
16
Praca inżynierska – Węc S.
Virtual Hosts
 odwrotny DNS
 lista i konfiguracja ewentualnych hostów wirtualnych obsługiwanych przez maszynę
Niektóre większe moduły (np. mod_SSL) mogą posiadać własne sekcje w pliku
httpd.conf bądź oddzielny plik dla własnych ustawień. Aby zmiany dokonane w plikach
konfiguracyjnych zostały uwzględnione, konieczne jest zrestartowanie procesu serwera.
17
Implementacja modułu raportowania systemu ornitologicznego
3 Baza Danych
Baza danych na potrzeby MTO została stworzona przez studentów poprzednich
roczników. Została ona stworzona w PostgreSQL, wybór tego sytemu bazodanowego miał na
celu jak największą zgodność
ze standardem SQL oraz zachowaniu niskich wymagań
sprzętowych.
3.1 PostgreSQL
Rys.4. Logo PostgreSQL
PostgreSQL jest jednym z czołowych darmowych systemów zarządzania relacyjnymi
bazami danych. Jedna z mocnych stron systemu PostgreSQL wywodzi się z jego architektury.
Tak jak komercyjne bazy danych, PostgreSQL można wykorzystywać w środowisku klientserwer. Ma to wiele zalet zarówno z punktu widzenia użytkowników, jak i programistów.
Sercem instalacji PostgreSQL jest proces serwera bazy danych. Aplikacje, które chcą
uzyskać dostęp do danych przechowywanych w bazie, muszą wykonać operacje poprzez
proces bazy danych. Nie mają one możliwości uzyskania dostępu do danych bezpośrednio,
nawet jeżeli działają na tym samym komputerze, co proces serwera.
To rozdzielenie pomiędzy klientem a serwerem pozwala na dystrybucję aplikacji. Do
oddzielenia klientów od serwerów można wykorzystać sieć i opracować aplikację-klienta w
środowisku, które odpowiada użytkownikom. Na przykład można zaimplementować bazę
danych w systemie UNIX i stworzyć program-klienta, który działa w środowisku Miscrosoft
Windows.
18
Praca inżynierska – Węc S.
3.1.1
Zalety systemu PostgreSQL
Do ogromnych zalet tego systemu należą:
 Obsługa wielu typów indeksów
 Mechanizm wyzwalaczy przyłączanych do tabel lub do widoku.
 Mechanizm MVCC zarządzający transakcjami
 Możliwość pisania funkcji w różnych językach programowania
 Widoki modyfikujące realizowane za pomocą reguł
 Możliwość wykorzystania rzadko spotykanych typów danych
 Możliwość tworzenia większości obiektów bazodanowych m.in.: indeksy,
agregaty
3.2 Narzędzia do współpracy z bazą
Programy, używane do współpracy z bazą danych w projekcie to :
 pgAdmin
 phpPgAdmin - administracja za pomocą przeglądarki internetowej
 Toad Data Modeler - projekt bazy danych, pozwala użytkownikom narzędzia
do wizualnego przeglądania bazy.
Baza danych,
z której generujemy raporty, została stworzona na podstawie
przeanalizowania formularzy MTO tak samo jak raporty. Baza danych jest bardzo złożona,
gdyż ma dostarczać bardzo szczegółowych danych i dlatego mamy 111 tabel połączonymi
141 relacjami.
3.3 Schemat bazy danych
Widok schematu całej bazy z programu Toad Data Modeler:
19
Implementacja modułu raportowania systemu ornitologicznego
20
Praca inżynierska – Węc S.
4 Dane raportów
Specyfikacja wymagań została oparta na formularzach używanych przez MTO. Raporty
zostały zbudowane po przeanalizowaniu odpowiednich pól w prezentowanych formularzach.
Najważniejszymi formularzami były
zestawienia obserwacji, na których notuje się listy
stwierdzonych gatunków z podaniem odpowiedniej kategorii i rangi oraz lokalizacji.
4.1 Przykładowe formularze MTO
Rys.5. Zestawienie obserwacji sezon jesienno – zimowy str.1
21
Implementacja modułu raportowania systemu ornitologicznego
Rys.6. Zestawienie obserwacji sezon jesienno – zimowy str.2
22
Praca inżynierska – Węc S.
Rys.7. Karta współpracownika.
23
Implementacja modułu raportowania systemu ornitologicznego
Rys.8. Zestawienie obserwacji sezon wiosenno-letni str.1
24
Praca inżynierska – Węc S.
Rys.9. Zestawienie obserwacji sezon wiosenno – letni str.2
25
Implementacja modułu raportowania systemu ornitologicznego
Moduł raportowania w aplikacji będzie pobierał parametry z formularza stosownie do
generowanego raportu, który zostanie utworzony w formacie pliku PDF. Dzięki takiej
wyszukiwarce użytkownik będzie mógł skonkretyzować jakich danych szuka. Przykładowe
parametry, dzięki którym wyszukiwarka będzie uściślała obszar danych dla konkretnego
raportu jak i dane jakie maja być wyświetlane w tychże raportach są następujące:
4.2 Raport o współpracownikach:
Wyszukiwarka:
 Województwo;
 Gmina;
 Nazwisko;
 Imię;
 Rok urodzenia;
 Miejscowość;
 Data przystąpienia do MTO;
 Data rezygnacji z członkowstwa w MTO;
 Płeć;
Zawartość raportu:
 Nazwisko;
 Imię;
 Datę urodzenia;
 Datę rejestracji w projekcie;
 Datę rezygnacji w projekcie;
 Adres:
o Województwo;
o Powiat;
o Gmina;
o Ulica;
o Numer domu;
o Kod pocztowy;
26
Praca inżynierska – Węc S.
 Dane kontaktowe:
o Numer telefonu;
o Strona WWW;
o E-mail;
 Skąd się dowiedział/a o działalności MTO;
 Model posiadanej lornetki;
 Powiększenie lornetki
 Zawód wyuczony;
 Zawód wykonywany;
4.3 Raport obserwacji:
Wyszukiwarka:
 Data rozpoczęcia ekspedycji;
 Data zakończenia ekspedycji;
 Województwo;
 Gmina;
 Typ siedliska;
 Gatunek;
Zawartość raportu:
 Województwo;
 Numer jednostki fizjograficznej;
 Rok;
 Numer powierzchni atlasowej;
 Nazwisko obserwatora;
 Imię obserwatora;
 Data rozpoczęcia wyprawy;
 Data zakończenia wyprawy;
 Godzina rozpoczęcia wyprawy;
 Godzina zakończenia wyprawy;
 Obserwowany gatunek;
27
Implementacja modułu raportowania systemu ornitologicznego
 Ranga obserwacji;
 Kategorie obserwacji;
 Czas i datę rozpoczęcia obserwacji;
 Czas i datę zakończenia obserwacji;
 Typ siedliska;
 Nazwa miejsca obserwacji;
 Koordynaty GPS miejsca obserwacji;
28
Praca inżynierska – Węc S.
5 Opis stworzonego interfejsu
5.1 Interfejs użytkownika
Implementacji interfejsu użytkownika dokonano w technologii JSP i Java. Model stron
został napisany w języku Java, a następnie dzięki serwletowi, który jest sercem aplikacji
zostaje wyświetlony według widoku zapisanym w pliku JSP.
Rys.10. Przykładowy widok. Wyszukiwanie współpracowników MTO
Moduł
przeglądarki
raportowania
internetowej,
stąd
jest
brak
aplikacją
obsługiwaną
konieczności
z
poziomu
instalowania
zwykłej
odpowiedniego
29
Implementacja modułu raportowania systemu ornitologicznego
oprogramowania. Dzięki takiemu rozwiązaniu jest możliwość podglądu informacji zawartych
w bazie o każdej porze.
Na Rys.11 mamy zaprezentowany kolejny formularz pomagający użytkownikowi w
wygenerowaniu raportu zawierającego dane, które go interesują, poprzez zawężenie ilości
danych zwracanych przez raport.
Rys.11. Widok formularza raportu obserwacji.
5.1.1 Struktura katalogów
Struktura plików jest uzależniona od środowiska IDE. Dzieli się ona na:
 Web Pages – w tym katalogu znajduje się wszystkie pliki dotyczące widoku
stron
Images – katalog, w którym znajdują się obrazy aplikacji
META – INF – przechowuje pliki konfiguracyjne
30
Praca inżynierska – Węc S.
WEB –INF – przechowuje pliki jsp
Css –katalog zawierający style
raport.jsp – plik startowy aplikacji
 Source Packages –katalog zawiera klasy aplikacji w odpowiednich pakietach,
co ułatwia ich importowanie
Inne – pakiet zawierający takie klasy jak np. connect, MojRaport
Modele – w tym pakiecie znajdują się modele stron
Serwety – pakiet dla serwletów
 Libraries – katalog z własnymi bibliotekami wykorzystywanymi w aplikacji
 Configuration Files – katalog zawierający wszytkie pliki konfiguracyjne
Rys.12. Struktura plików w Netbeans.
31
Implementacja modułu raportowania systemu ornitologicznego
5.2 Opis wybranych fragmentów kodu
5.2.1 Widok
Kodu opisujący sposób wyświetlania modelu strony w jsp.
<%@page contentType="text/html" pageEncoding="Iso-8859-2"%>
<%@ page import="inne.*" %>
<%@ page import="modele.M_Raport.*" %>
<%@ page import="java.util.*" %>
<jsp:useBean id="obsRaport" class="modele.M_Raport" scope="request"/>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Iso-8859-2">
<link rel="stylesheet" href="css/style.css" type="text/css" />
<title>Raporty</title>
</head>
<body>
<div id="container">
<%
List<String> listaParam = obsRaport.pobierzRaport();
Iterator<String> it = listaParam.iterator();
String domyslna = "raport_" + String.valueOf(obsRaport.getNrRaport());
String nazwa;
%>
<center>
<img src="Images/logo.JPG" alt="ban"/>
<h2>Wybierz raport jaki chcesz wygenerowac:</h2>
<form action="raport" method="get" enctype="text/plain;charset=iso-8859-2">
<%for (int i = 0, nr = 1; i < obsRaport.rozmiar(); i++, nr++) {%>
<h4> <input type="radio" name="nazwa" onclick="this.form.submit()" value="<%=nr%>" <%=
obsRaport.zaznaczony(i)%> /><%=obsRaport.pobierzNazwe(i)%>
</h4>
<%}%>
</form>
<br><br>
32
Praca inżynierska – Węc S.
<form action="raport" method="post" enctype="text/plain;charset=iso-8859-2">
<TABLE cellSpacing="0" cellPadding="0" border="2" bgcolor="#F2EBDF" >
<TR height="40" bgcolor="red">
<TH colspan="2" ><h4><%=obsRaport.pobierzNazwe()%></h4></TH>
</TR>
<%
int i = 0;
while (it.hasNext()) {
nazwa = it.next();
if (obsRaport.data(i++)) {
%>
<TR>
<TD width="150"><%=nazwa%></TD>
<TD>
<select id="<%=nazwa + "_dzien"%>" name="<%=nazwa + "_dzien"%>">
<%=obsRaport.generujHtmlDzien()%>
</select>
<select id="<%=nazwa + "_miesiac"%>" name="<%=nazwa + "_miesiac"%>">
<%=obsRaport.generujHtmlMisiac()%>
</select>
<select id="<%=nazwa + "_rok"%>" name="<%=nazwa + "_rok"%>">
<%=obsRaport.generujHtmlRok()%>
</select>
</TD>
</TR
<%} else {%>
<TR>
<TD width="100"><%=nazwa%></TD>
<TD ><INPUT type="text" name="<%=nazwa%>" value="" />
</TD>
</TR>
<%}
}%>
<TR>
<TD >Nazwa Pliku:</TD>
<TD ><INPUT type="text" name="nazwaPliku" value="<%=domyslna%>"/> </TD>
</TR>
<TR height="25" bgcolor="#B89F7D">
33
Implementacja modułu raportowania systemu ornitologicznego
<TD colspan="3" ><center><INPUT type="submit" value="Pobierz"></center></TD>
</TR>
</TABLE>
<INPUT type="hidden" name="raport" value="<%=obsRaport.szablon()%>" />
</form>
</center>
</div>
</body>
</html>
5.2.2 Pobieranie parametrów z formularza.
Fragment kodu odpowiedzialny za pobranie parametrów z formularza metodą doPost
oraz zamiana wartości parametru jeśli jest null.
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("Iso-8859-2");
HashMap parametry = new HashMap();
Enumeration names = request.getParameterNames();
parametry.put("nazwa","%");
M_Raport rap = (M_Raport)request.getAttribute("obsRaport");
HashMap rok_ur_od = new HashMap();
HashMap rok_ur_do = new HashMap();
HashMap data_czl_od = new HashMap();
HashMap data_czl_do= new HashMap();
HashMap start_ek = new HashMap();
HashMap end_ek = new HashMap();
while (names.hasMoreElements())
{
String name = (String) names.nextElement();
String wartosc = request.getParameter(name);
if(wartosc == null || wartosc.trim().isEmpty())
wartosc ="%";
34
Praca inżynierska – Węc S.
5.2.3 Połączenie z bazą danych.
Klasa odpowiedzialna za połączenie z bazą danych.
package inne;
import java.sql.*;
public class Connect {
private String driver = "org.postgresql.Driver";
private String host = "193.193.92.204:5432";
private String dbname = "ornitolog_test_2";
private String user = "postgres";
private String url = "jdbc:postgresql://" + host + "/" + dbname;
private String pass = "birdsmondc300d";
private Connection connection;
public Connect () {
connection = makeConnection();
}
public Connection getConnection(){
return(connection);
}
public void close() {
try {
connection.close();
}
catch (SQLException sqle) {
System.err.println("Blad przy zamykaniu polaczenia: " + sqle);
}
}
private Connection makeConnection(){
try {
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user, pass);
return(connection);
}
35
Implementacja modułu raportowania systemu ornitologicznego
catch(ClassNotFoundException cnfe) {
System.err.println("Blad ladowania sterownika: " + cnfe);
return(null);
}
catch(SQLException sqle) {
System.err.println("Blad przy nawiązywaniu polaczenia: " + sqle);
return(null);
}
}
}
5.2.4 Zapisywanie raportu w formie pliku PDF
Poniższy kod jest odpowiedzialny za wczytanie szablonu raportu, jego kompilacje za
pomocą klasy „net.sf.jasperreports.engine.JasperCompileManager”, a następnie przekazanie
parametrów do raportu poprzez klasę „net.sf.jasperreports.engine.JasperFillManager” i jego
wyeksportowanie do pliku PDF klasą „net.sf.jasperreports.engine.JasperExportManager”.
package inne;
import java.util.HashMap;
import java.sql.Connection;
import net.sf.jasperreports.engine.*;
public class MojRaport {
private String sciezka = "c:/ireports/";
private String szablon = sciezka + "szablon/";
private String wynik = sciezka + "pdf/";
private HashMap parametry;
private Connection con;
public MojRaport (HashMap parametry, Connection con) {
this.con = con;
this.parametry = parametry;
szablon += parametry.get("raport") + ".jrxml";
}
public String pdf (String nazwa) {
String nazwaPliku = nazwa + ".pdf";
String zapisany = wynik + nazwaPliku;
JasperReport jasperDesign = null;
JasperPrint jasperPrint = null;
try {
36
Praca inżynierska – Węc S.
System.out.println("Sciezka do szablonu:" + szablon);
jasperDesign = JasperCompileManager.compileReport(szablon);
} catch (JRException e){
System.out.println("Error JR :: IREPORTS:Raport:CreatePdf :: (RJ): bład kompilacji raportu" +
e.toString());
System.out.println("-nie odnaleziono szablonu");
return null;
}
try {
jasperPrint = JasperFillManager.fillReport(jasperDesign, parametry, con);
} catch (JRException e){
System.out.println("Error JR :: IREPORTS:Raport:CreatePdf :: (RJ): bład wypełnienia raportu" +
e.toString());
}
try {
JasperExportManager.exportReportToPdfFile(jasperPrint, zapisany);
} catch (JRException e){
System.out.println("Error JR :: IREPORTS:Raport:CreatePdf :: (RJ): bład exportu raportu do pdf"
+ e.toString());
}
return nazwaPliku;
}
public Connection zwolnijPolaczenie()
{
Connection temp = con;
con = null;
return temp;
}
}
37
Implementacja modułu raportowania systemu ornitologicznego
6 Raporty
Rys.13. Widok wygenerowanego raportu.
Zaprojektowanie raportów w taki sposób, aby spełniały swoje zadanie umożliwiając
łatwą ich obsługę przez użytkownika, zajęło dużą część ogółu czasu poświęconego na pracę
nad projektem. Wynikło to ze względu na założenie, iż moduł raportowania ma dostarczać
bardzo szczegółowych danych z bazy, która jest bardzo złożona, cały czas poprawiana i
udoskonalana, aby jak najlepiej odzwierciedlała specyfikacje MTO, przez co koncepcja
38
Praca inżynierska – Węc S.
raportów od początków ich istnienia zmieniała się niejednokrotnie. Głównym problemem,
który towarzyszył tworzeniu raportów był fakt, iż taka duża ilość szczegółowych danych z
formularzy ornitologów i obserwatorów została rozbita na wiele tabel o różnych relacjach, co
utrudniało dostęp do niektórych danych. W niniejszym rozdziale zostały przedstawione
raporty, te ważniejsze opisane oraz przedstawione problemy i sposoby ich rozwiązania.
6.1 Szablony
Poniżej przedstawiono szablon raportu o współpracownikach. Wszystkie pola zostały
umieszczone w sekcji detail, aby raport był jak najlepiej czytelny przy takiej ilości
zwracanych danych oraz w razie zwracania większej ilości osób w jednym raporcie.
Rys.14. Obraz szablonu z programu iReport.
39
Implementacja modułu raportowania systemu ornitologicznego
Na Rys.15 jest przedstawiony jeden z bardziej złożonych szablonów, a na Rys.17 mamy
wygenerowany już gotowy raport. Ten raport jest bardziej rozbudowany, gdyż składa się z
większej ilości danych, jednego prostego podtaportu oraz drugiego bardziej złożonego aniżeli
wcześniej przedstawiony. Raport korzysta z większej ilości tabel, używa zmiennych do
obliczania sumy gatunków oraz do liczenia wypraw, przekazuje również parametry do
podraportu, który zwraca też dodatkowo zmienną.
Rys.15. Szablon raportu zestawienia obserwacji.
Rys.16. Szablon podraportu zestawienia obserwacji.
40
Praca inżynierska – Węc S.
Rys.17. Raport zestawienia obserwacji.
41
Implementacja modułu raportowania systemu ornitologicznego
6.2 Zapytania SQL
Poniżej przedstawione są zapytania SQL do bazy danych, które zostały użyte do
wygenerowania tych raportów.
Zapytanie SQL do raportu o współpracownikach.
SELECT bw.last_name AS Nazwisko, bw.first_name AS Imie, bw.membership_begin AS Czlonkowstwo_od,
bw.membership_end AS Czlonkowstwo_do, bw.date_of_birth AS data_ur,
ad.street AS Ulica, ad.number AS Nr_domu, ad.postal_code AS Kod_pocztowy,
p.province_name AS Wojewodztwo, c.county_name AS Powiat, cm.commune_name AS Gmina,
bw.phone AS Telefon, bw.website AS WWW, bw.e_mail AS Email,
bw.information_source AS Skad_sie_dowiedzial,
bw.profession AS Zawod_wyuczony, bw.practised_profession AS Zawod_wykonywany,
bw.birdwatcher_pk AS fk
FROM birdwatcher_t bw
JOIN province_t p ON bw.province_fk = p.province_pk
JOIN commune_t cm ON bw.commune_fk = cm.commune_pk
JOIN address_t ad ON bw.address_fk = ad.address_pk
JOIN county_t c ON bw.county_fk = c.county_pk
WHERE p.province_name ILIKE $P{Województwo}
AND cm.commune_name ILIKE $P{Gmina}
AND bw.first_name ILIKE $P{Imię}
AND ((bw.date_of_birth >= CAST($P{Data_urodzenia_od} AS DATE)) AND
(bw.date_of_birth <= CAST($P{Data_urodzenia_do} AS DATE)))
AND ad.locality ILIKE $P{Miejscowość}
AND ((bw.membership_begin >= CAST($P{Data_czlonkostwa_od} AS DATE)) AND
(bw.membership_end <= CAST($P{Data_czlonkostwa_do} AS DATE)))
AND bw.gender ILIKE $P{Płeć}
ORDER By Nazwisko, Imie
Podraport:
Select eq.model AS model, bin.zoom AS zomm, eq.manufacturer AS marka, eq.type
42
Praca inżynierska – Węc S.
from
birdwatcher_equipment_t be
JOIN equipment_t eq ON be.equipment_fk = eq.equipment_uk
JOIN binoculars_t bin ON be.equipment_fk = bin.equipment_uk
where be.birdwatcher_fk = $P{fk}
Zapytania SQL do raportu o obserwacjach.
SELECT bw.last_name AS Nazwisko, bw.first_name AS Imie, p.province_name As wojewodztwo,
e.start_date As data_roz, e.end_date As data_zak, e.start_time As czas_roz,
e.end_time As czas_zak,
e.start_date AS rok, e.expedition_pk As fk
from birdwatcher_t bw
JOIN expedition_birdwatcher_t ebw ON bw.birdwatcher_pk = ebw.birdwatcher_fk
JOIN expedition_t e ON ebw.expedition_fk = e.expedition_pk
JOIN province_t p ON p.province_pk = e.province_fk
JOIN commune_t com ON com.commune_pk = e.commune_fk
Where
e.start_date >= CAST ( $P{start_ekspedycji} AS DATE)
AND e.end_date <= CAST ($P{end_ekspedycji} AS DATE)
AND p.province_name ILIKE $P{Województwo}
AND com.commune_name ILIKE $P{Gmina}
ORDER BY rok
Pierwszy podraport:
Select ph.physiographic_unit As nr_j_fizjograficznej, a.atlas_unit As nr_powierzchni
From expedition_physiographic_unit_t eph
JOIN physiographic_unit_t ph ON eph.physiographic_unit_pk = ph.physiographic_unit_pk,
expedition_atlas_unit_t ea
JOIN atlas_unit_t a ON a.atlas_unit_pk = ea.atlas_unit_fk
where eph.expedition_pk = $P{fk}
AND ea.expedition_fk = $P{fk}
43
Implementacja modułu raportowania systemu ornitologicznego
Drugi podraport:
select
op.observation_point As punkt_obserwacji, op.gps_h AS gps_h,
op.gps_v As gps_v, oc.observation_category AS kategoria,
oc.rank_pk AS ranga,
s.polish_name As gatunek,
hp.value AS typ_siedliska,
o.start_date AS start_ob, o.end_date AS end_ob, o.start_time AS czas_od,
o.end_time AS czas_do, hc.category_name AS category
from
expedition_observation_t eo
JOIN observation_t o ON o.observation_pk = eo.observation_fk
JOIN observation_point_t op ON o.observation_point_fk = op.observation_point_pk
JOIN observation_category_t oc ON o.observation_category_fk = oc.observation_category_pk
JOIN species_t s ON o.species_fk = s.species_pk
JOIN habitat_t h ON op.habitat_fk = h.habitat_pk
JOIN habitat_parameter_habitat_t hph ON h.habitat_pk = hph.habitat_pk
JOIN habitat_parameter_t hp ON hph.parameter_pk = hp.parameter_pk
JOIN habitat_category_t hc ON hp.category_fk = hc.category_pk
where
eo.expedition_fk = $P{fk}
AND s.polish_name ILIKE $P{Gatunek}
AND hc.category_name ILIKE $P{Typ_siedliska}
ORDER BY start_ob
7 Format XML
W tym rozdziale zostały umieszczone najciekawsze fragmenty raportów w uniwersalnym
języku formalnym przeznaczonym do reprezentowania różnych danych w strukturalizowany
sposób. XML, bo o nim mowa jest niezależny od platformy, dzięki temu umożliwia
bezproblemowy przepływ dokumentów między różnymi systemami, co przyczyniło sie do
popularności tego języka.
44
Praca inżynierska – Węc S.
7.1 Struktura dokumentu XML
<?xml version="1.0" encoding="ISO-8859-2" ?>
<!DOCTYPE
jasperReport
PUBLIC
"//JasperReports//DTD
Report
Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport
name="s2"
...<group name="Group" >
<groupExpression><![CDATA[]]></groupExpression>
<groupHeader>
</groupHeader>
<groupFooter>
</groupFooter>
</group>
<background>
</background>
<title>
<band height="132" isSplitAllowed="true" >
</band>
</title>
<pageHeader>
</pageHeader>
<columnHeader>
</columnHeader>
<detail>
<band height="247" isSplitAllowed="true" >
</band>
</detail>
<columnFooter>
<band height="2" isSplitAllowed="true" >
</band>
</columnFooter>
<pageFooter>
</pageFooter>
<summary>
</summary>
</jasperReport>
45
Implementacja modułu raportowania systemu ornitologicznego
7.2 Parametry
Parametry przekazywane z zewnątrz:
<parameter name="start_ekspedycji" isForPrompting="true" class="java.lang.String"/>
<parameter name="Województwo" isForPrompting="true" class="java.lang.String"/>
Dostęp do parametru uzyskuje sie poprzez konstrukcję $P{nazwa}, przykładowo może to być
$P{start_ekspedycji}
7.3 Zapytanie SQL
Zapytanie SQl przekazuje sie następująco:
<queryString><![CDATA[SELECT bw.last_name AS Nazwisko,
bw.first_name AS Imie,
...
>
</queryString>
7.4 Pola
Pola danych otrzymywanych w wyniku zapytania:
<field name="nazwisko" class="java.lang.String"/>
<field name="imie" class="java.lang.String"/>
Dostęp do pola uzyskuje się stosując $F{nazwa}, w tym przypadku będzie to $F{nazwisko}.
7.5 Zmienne
Dodatkowa zmienna.
<variable name="suma" class="java.lang.Integer" resetType="None" calculation="Nothing">
</variable>
Do pola można odwołać się stosując $V{nazwa}.
46
Praca inżynierska – Węc S.
7.6 Podraport
Jak można zauważyć na dołączonym poniżej fragmencie kodu, podraporty w bardzo
prosty sposób można umieścić w raporcie głównym. Wynika to z tego, iż są one niczym
innym jak innymi raportami, które zagnieżdża się we właściwych sekcjach raportu.
<subreport isUsingCache="true">
<reportElement
<subreportParameter name="fk">
<subreportParameterExpression><![CDATA[$F{fk}]]></subreportParameterExpression>
</subreportParameter>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]>
</connectionExpression>
<returnValue subreportVariable="REPORT_COUNT" toVariable="suma"/>
<subreportExpression
class="java.lang.String"><![CDATA["C:\\ireports\\szablon\\s2_subreport1.jasper"]]>
</subreportExpression>
</subreport>
47
Implementacja modułu raportowania systemu ornitologicznego
8 Podsumowanie
Stworzony projekt ograniczył sie do poprawnego zaprojektowania dynamicznych
raportów oraz utworzenia przykładowych formularzy ich obsługujących. Informacje
Małopolskiego Towarzystwa Ornitologicznego, które będą przechowywane w bazie danych
są złożone i różnorodne, więc duża część czasu nad pracą została poświecona na analizę i
zaprojektowanie elastycznych raportów, które będą dostarczać dużą ilość potrzebnych
informacji zawartych w bazie danych. Raporty niejednokrotnie zmieniały swoją postać ze
względu na to, iż dane jakie miały dostarczać nie były nigdy wcześniej ustalane oraz baza
była wciąż udoskonalana i przebudowywana w celu gromadzenia większej ilości
szczegółowych danych.
Otrzymane w ten sposób raporty są kompleksowe, czyli przewidziano w nich
wszystkie pola, których użytkownik może potrzebować, a zarazem projekt stał sie podstawą
dla dalszych prac nad docelową kompletną aplikacją dla Małopolskiego Towarzystwa
Ornitologicznego.
48
Praca inżynierska – Węc S.
9 Bibliografia
 JasperReports for Java Developers. David R. Heffelfinger, 2006
 Java, podstawy. Cay S. Horstmann, Gary Cornell, Helion, 2008
 Java Servlet i Java Server Pages. Marty Hall, 2002
 SQL. Od podstaw. Paul Wilton, John Colby, Helion, 2007
 NetBeans Docs & Support: http://www.netbeans.org/kb/index.html
 JasperReports Docs:
http://jasperforge.org/website/jasperreportswebsite/trunk/documentation.html?header=
project&target=jasperreports
 http://www.wikipedia.org/
49

Podobne dokumenty