Oracle Report Builder Materiały szkoleniowe 1
Spis treści Spis treści... 2 Wstęp... 3 Wprowadzenie do Oracle Reports... 4 Tworzenie prostych raportów za pomocą kreatora... 6 Elementy raportu...7 Ręczne tworzenie raportów...12 Formuły i podsumowania...14 Parametryzacja raportów...16 Formatowanie warunkowe... 18 Wywołanie raportu z formularza...19 Co każdy programista raportów wiedzieć jeszcze powinien... 20 2
Wstęp Celem zawartego w tym dokumencie materiału jest przedstawienie możliwości tworzenia aplikacji z wykorzystaniem narzędzi firmy Oracle. W pracy tej szczególny nacisk został położony na tworzenie raportów z wykorzystaniem programu Report Builder. Materiału zawartego w tej pracy nie należy traktować jako kompletnego podręcznika wyczerpującego tematykę tworzenia wydruków w oparciu o wspomniany program. Autor ma jednak nadzieję, że będzie to dobry punkt wyjścia do dalszej nauki i tworzenia aplikacji z wykorzystaniem narzędzi firmy Oracle. 3
Wprowadzenie do Oracle Reports Oracle Reports jest pakietem oprogramowania, które pozwala na zcentralizowane przetwarzanie raportów i lepsze nimi zarządzanie. Konstruktor Raportów (Report Builder) jest jednym z komponentów tworzących Oracle Reports. Konstruktor Raportów zawiera: Konstruktor zapytań z graficzną reprezentacją poleceń SQL, definiujących dane raportu. Kreatory, które nadzorują proces projektowania raportu. Domyśle szablony raportów i style rozkładu, które mogą być modyfikowane jeżeli zajdzie taka potrzeba. Przeglądarkę Live Preview, która pozwala na edycję rozkładu raportów trybie WYSIWYG. Zintegrowany konstruktor wykresów, służący do tworzenia graficznej reprezentacji danych raportu. Możliwość generowania kodu pozwalającego dostosować sposób uruchamiania raportów do wymagań użytkownika. Standardowe formaty generowanych dokumentów to HTML, HTMLCSS, XML, PDF, PCL, Postscript i ASCII. Możliwość indywidualizacji raportów podczas uruchamiania. Możliwość wykonywania dynamicznych poleceń SQL i ciał procedur PL/SQL. Wsparcie opcji obiektowej (Oracle8 i kolejne). Komponenty Konstruktora Raportów Report Builder: Nawigator Obiektów jest hierarchicznym interfejsem służącym do przeglądania i edycji obiektów modułu. Daje następujące możliwości: Prezentacji obiektów za pomocą hierarchicznej struktury rozwijanych węzłów. Pole Find (Znajdź) i ikona, umożliwiają szukanie wprzód i do tyłu węzłów dowolnego poziomu lub pojedynczych elementów w węźle. Ikony na pionowym pasku narzędziowym dają szybki dostęp do najczęściej wykonywanych operacji z menu File. Przeglądarka Live Preview pozwala na podgląd i kontrolę stron wynikowych. Dodatkowo umożliwia bezpośrednio w oknie przeglądarki modyfikację wyglądu raportu. Model Danych pozwala na tworzenie i modyfikowanie obiektów modelu danych raportu. Obiekty graficzne reprezentują ich typ i wzajemne relacje. Model Rozkładu edytor Modelu Rozkładu umożliwia projektowanie stylu raportu, koloru, rozmiaru i kolejności formatowania wizualnych obiektów 4
aplikacji. Rozkłady mogą zawierać obiekty graficzne i obrazy bitmapowe kiedy aplikacja ma być uruchamiana w środowisku GUI. Paleta Właściwości wszystkie obiekty modułu aplikacji, włączając w to sam moduł posiadają specyficzne własności, które można wyświetlić i modyfikować w palecie właściwości. Możemy między innymi: kopiować i używać własności innych obiektów, szukać obiektów podobnie jak w nawigatorze. Edytor PL/SQL pozwala w bieżącym raporcie na tworzenie i kompilację podprogramów takich jak funkcje, procedury, pakiety. 5
Tworzenie prostych raportów za pomocą kreatora Report Builder umożliwia tworzenie różnych typów raportów: Tabelaryczny Formularzowy Etykieta wysyłkowa List formularzowy Nadrzędno-podrzędny (Master-Detail) Matrycowy (macierzowy) Macierz z grupą Kroki potrzebne do utworzenia przykładowego prostego raportu przy pomocy kreatora: Menu: Narzędzia->Kreator raportów Tytuł: Pracownicy Typ tabelaryczny Tekst zapytania SQL: select nazwisko, etat, placa_pod from pracownicy; Wyświetlane pola: nazwisko, etat, placa_pod Brak podsumowań Etykiety: Nazwisko, Etat, Płaca podstawowa Wcześniej zdefiniowany szablon: draft 6
Elementy raportu Oracle Report Builder Materiały szkoleniowe Report Builder umożliwia generowanie wydruków do następujących formatów wyjściowych: PDF (Portable Document Format) HTML (Hypertext Markup Language) XML (Extended Markup Language) RTF (Reach Format Text) Postscript Wewnętrzny format Report Builder Tekst Aby wygenerować raport do innego formatu niż format wewnętrzny Report Builder należy wybrać z menu opcję Plik->Generuj do pliku. Wygenerowanie raportu do wewnętrznego formatu Report Builder umożliwia opcja Plik-> Administracja->Kompiluj raport. Elementy modelu danych: Parametry systemu: Wykonywanie raportów w tle Liczba kopii Symbol waluty Symbol dziesiętny (decimal indicator) Miejsce przeznaczenia (nazwa pliku, nazwa drukarki, skrzynka pocztowa) Typ raportu - przeznaczenie (ekran, plik, mail, drukarka, lub ekran przy użyciu formatu postscript) Format raportu (tekstowy, binarny) Orientacja (portrait, landscape, default) Ekran podczas generacji wydruku Symbol grupowania cyfr (thousand's indicator) Parametry użytkownika Zapytania Grupy Kolumny formuł Kolumny podsumowań Kolumny wypełniające Połączenia danych 7
Edytor raportów przedstawia graficzną reprezentację obiektów składowych wydruku i powiązania między nimi: Elementy składowe modelu układu: Strony tytułowe Strony końcowe Ciało: ramki ramki powtarzane pola tekst Margines 8
Model układu Edytora raportów przedstawia wizualne rozmieszczenie elementów i ich zależności: Pozostałe elementy raportu: Formularz parametrów: Pola Szablon graficzny Szablon tekstowy Szablon obrazu Jednostki programu Dołączone biblioteki Wyzwalacze raportu: przed formularzem parametrów po formularzu parametrów przed raportem między stronami po raporcie 9
Powiązania pomiędzy modelem danych a układem rozkładu: Model danych Model układu Grupy Ramki powtarzane Kolumny Pola Pasek narzędziowy w modelu danych Edytora raportów: Zaznacz Zapytanie SQL Zapytanie Express Kolumna formuły Produkt krzyżowy Powiększ Zapytanie o odniesienie kursora Kolumna podsumowania Kolumna wypełniająca Połączenie danych Pasek narzędziowy w modelu danych Edytora raportów: 10
Zaznacz Obróć Powiększ Prostokąt zaokrągloany Elipsa Wielokąt Rysunek odręczny Ramka Pole Wykres Kotwica Wybierz ramkę Zmień kształt Linia Prostokąt Łuk Linia łamana Tekst Ramka powtarzana Plik połączony Przycisk Obiekt OLE2 Dodatkowy układ domyślny 11
Ręczne tworzenie raportów Przykład utworzenia raportu nadrzędno-podrzędnego (master-detail) prezentującego dane o pracownikach zatrudnionych w poszczególnych zespołach: W modelu danych wykonujemy następujące czynności: Tworzymy zapytania na zespołach podając wpisując następujący tekst: select id_zesp, nazwa, adres from zespoly order by nazwa Tworzymy za pomocą narzędzia Query Builder zapytanie na pracownikach: - Wybieramy tabelę Pracownicy - Zaznaczamy stosowne atrybuty (nazwisko, etat, id_szefa, zatrudniony, placa_pod, id_zesp) Zmieniamy w palecie właściwości odpowiednio nazwy zapytań i grup (tak jak przedstawia to rysunek poniżej) Tworzymy połączenie atrybutu z grupy nadrzędnej (id_zesp z grupy G_ZESPOLY) ze stosownym atrybutem grupy podrzędnej (id_zesp1 z grupy G_PRACOWNICY) W modelu układu wykonujemy następujące czynności: Tworzymy ramkę powtarzaną R_ZESPOLY i ustawiamy własności: Źródło->G_ZEPOLY, Pionowa elastyczność->zmienny W ramce R_ZESPOLY tworzymy pola: F_NAZWA_ZESPOLU (źródło -> nazwa), F_ADRES_ZESPOLU (źródło->adres) Usuwamy wypełnianie kolorem ramki i wyświetlanie linii w ramce i w polach 12
Tworzymy ramkę powtarzaną R_PRACOWNICY, ustawiamy własność Źródło na G_PRACOWNICY W ramce R_PRACOWNICY tworzymy pola: F_NAZWISKO (źródło-> nazwisko), F_ETAT (źródło->etat), F_DATA_ZATRUDNIENIA (źródło->zatrudniony), F_PLACA_POD (źródło->placa_pod) Usuwamy wyświetlanie linii w ramce i w polach Pogrubiamy czcionkę dla pól F_NAZWA_ZESPOLU i F_ADRES_ZESPOLU Na koniec powinniśmy uzyskać następujący efekt: 13
Formuły i podsumowania W rozdziale tym rozbudujemy poprzednio utworzony raport o formuły i podsumowania: W modelu danych Edytora raportów dodajemy w grupie G_PRACONICY kolumnę formuły CF_STAZ zawierającą następujący kod: function CF_STAZFormula return Number is begin return MONTHS_BETWEEN(SYSDATE,:ZATRUDNIONY)/12; end; W modelu układu Edytora raportów dodajemy pole F_STAZ zasilane z formuły CF_STAZ W modelu danych Edytora raportów dodamy podsumowania sumujące kwoty wynagrodzeń w ramach danego zespołu i w całym raporcie: Do grupy G_ZESPOLY dodajemy kolumnę podsumowań CS_SUMA_PLAC, ustawiamy dla niej własności: Funkcja->Suma, Źródło->PLACA_POD, Przywróć w->g_zespoly Na zewnątrz (poziom raportu) dodajemy kolumnę podsumowań CS_GLOBAL_SUMA_PLAC, ustawiamy dla niej własności: Funkcja-> Suma, Źródło->PLACA_POD, Przywróć w->report W modelu układu Edytora raportów dodajemy wizualizację pól podsumowań: 14
Wewnątrz ramki powtarzanej R_ZESPOLY umieszczamy pole F_SUMA_PLAC o źródle CS_SUMA_PLAC, przed polem umieszczamy napis Suma Na zewnątrz ramek umieszczamy pole F_GLOBAL_SUMA_PLAC zasilane z CS_GLOBAL_SUMA_PLAC Dodajemy nagłówki opisujące poszczególne kolumny Dodajemy elementy graficzne (kreski) Zmieniamy maskę dla daty na dd.mm.yyyy, a dla pola F_STAZ na NN0D00 Pogrubiamy czcionkę dla pól podsumowań Na koniec powinniśmy uzyskać następujący efekt: 15
Parametryzacja raportów W rozdziale tym pokazany zostanie sposób parametryzacji raportów. Dodany zostanie formularz parametrów umożliwiający wybranie zespołu, dla którego będzie wykonywany raport: W nawigatorze obiektów do parametrów użytkownika dodajemy parametr P_ZESPOL (Typ danych->liczba). Do listy wartości wpisujemy następujące polecenie: select id_zesp, nazwa from zespoly union select -1, '% - Wszystkie zespoły' from dual order by 2 Zaznaczamy pola Ogranicz listę do wcześniej podanej wartości i Ukryj pierwszą kolumnę W modelu danych Edytora raportów dodajemy warunek: where ((id_zesp = :P_ZESPOL) or (:P_ZESPOL = -1)) Do formularza parametrów dodajemy pole PF_ZESPOL, którego źródłem jest parametr P_ZESPOL Po uruchomieniu raportu powinien teraz pojawić się ekran pozwalający zdefiniować wartość parametru P_ZESPOL: 16
17
Formatowanie warunkowe W rozdziale tym zapoznamy się z formatowaniem warunkowym pól raportu. Formatowanie warunkowe realizowane jest za pomocą wyzwalacza formatu (ang. format trigger) dostępnego dla każdego elementu wizualnego raportu. Zwrócenie przez wyzwalacz formatu wartości FALSE jest równoznaczne z ukryciem elementu. Element ukrywa siebie wraz ze wszystkimi elementami w nim zawartymi. Do generacji wyzwalaczy formatujących można wykorzystać kreator Formatowanie warunkowe lub własność elementu Wyzwalacz formatu. Dla pola placa_pod zdefiniujemy formatowanie warunkowe, które dla wartości poniżej 500 zmieni kolor czcionki na czerwony i obramuje pole ciemnoczerwoną ramką: function F_placa_podFormatTrigger return boolean is begin if (:placa_pod <= '500') then srw.set_foreground_border_color('darkred'); srw.set_border_pattern('solid'); srw.set_foreground_fill_color('white'); srw.set_fill_pattern('solid'); srw.set_text_color('red'); end if; return (TRUE); end; 18
Wywołanie raportu z formularza W większości komercyjnych aplikacji raporty są nierozerwalnie połączone z formularzami systemu. Jest to podyktowane przez funkcjonalność aplikacji i możliwość parametryzacji raportów. Aby przekazać parametry z formularza do raportu należy utworzyć listę parametrów i dodać do niej stosowne parametry (może się to dziać w wyzwalaczu uruchamianym po naciśnięciu przycisku): declare pl_id ParamList; begin pl_id := Get_Parameter_List('paramrap'); if not Id_Null(pl_id) then Message('Usunięcie listy'); Destroy_Parameter_List(pl_id); end if; pl_id := Create_Parameter_List('paramrap'); if not Id_Null(pl_id) then Add_Parameter(pl_id, 'P_ZESPOL', TEXT_PARAMETER, to_char(10)); end if; Run_product(REPORTS, 'raport1', SYNCHRONOUS, RUNTIME, FILESYSTEM, pl_id, null); end; Parametry do listy dodajemy za pomocą procedury: Add_Parameter(pl_id, NAZWA_PARAMETRU',TYP_PARAMETERU, WARTOSC_PARAMETRU);,gdzie TYP_PARAMETRU może przyjmować wartości TEXT_PARAMETER lub DATA_PARAMETER. Raport wywołujemy za pomocą wbudowanej procedury: Run_Product(REPORTS, NAZWA_PLIKU_RAPORTU, ASYNCHRONOUS, RUNTIME, FILESYSTEM, pl_id, NULL); 19
Co każdy programista raportów wiedzieć jeszcze powinien W rozdziale tym wzmiankowane zostaną fakty, o których powinien wiedzieć każdy programista tworzący wydruki: Istnieje możliwość tworzenia stron początkowych, które zwyczajowo wykorzystujemy np. do poinformowania użytkownika o tym, co otrzyma w tworzonym raporcie. Istnieje możliwość tworzenia stron końcowych, które wykorzystujemy do realizacji np. ostatecznych podsumowań wygenerowanego raportu. Sekcja nagłówka Edytuj margines Sekcja główna Sekcja końcowa W odpowiednich miejscach raportu (np. marginesy) można za pomocą odwołań do zmiennych systemowych umieszczać informacje o ilości stron i dacie uruchomienia wydruku: &<CurrentDate> - data systemu operacyjnego w momencie zamknięcia formularza parametrów. &<PageNumber> - bieżący numer strony. &<TotalPages> - całkowita liczba stron. W celu wykorzystania dynamicznego SQL można wykorzystać procedurę do_sql z pakietu srw. W miarę możliwości należy tworzyć uniwersalne podprogramy w postaci wbudowanych w raporty jednostek programu lub w postaci dołączonych do raportu bibliotek. Takie postępowanie ułatwia przyszłą konserwację oprogramowania. W celu optymalizacji wydruków należy przenosić obciążenie z klienta na serwer (np. do kodu składowanego w PL/SQL). Umieszczenie w raporcie podsumowań i informacji o całkowitej ilości stron wpływa na zmniejszenie wydajności wykonywania raportu (wiąże się to z buforowaniem na dysku informacji niezbędnych do podsumowań). Istnieje możliwość definiowania szablonów, których zadaniem jest zapewnienie podobnego wyglądu wszystkim tworzonym w aplikacji wydrukom. Definiowanie szablonu polega na: 20
określeniu formatu wyświetlania dla ramek, poszczególnych typów danych (nagłówki i pola), podsumowań poszczególnych typów danych (nagłówki i pola) określeniu wyglądu marginesów zdefiniowaniu parametrów, wyzwalaczy i jednostek programu 21