• Nie Znaleziono Wyników

Oracle Application Express

N/A
N/A
Protected

Academic year: 2021

Share "Oracle Application Express"

Copied!
40
0
0

Pełen tekst

(1)

1

Oracle Application Express

Dla Oracle Application Express 5.1

Cześć 1. Rejestracja użytkownika i utworzenie obszaru roboczego

1. Uruchom w przeglądarce internetowej stronę logowania Oracle Application Express (APEX).

Adres strony to https://admlab2.cs.put.poznan.pl/ords/dblab02_students. Aby móc pracować w narzędziu musisz mieć przydzielony tzw. obszar roboczy (środowisko do budowy aplikacji). Kliknij na łącze Request a Workspace aby uruchomić proces rejestracji nowego użytkownika i tworzenia dla niego obszaru roboczego.

2. Na następnym ekranie wybierz typ obszaru roboczego: Application Development. Naciśnij przycisk Next >.

(2)

2

3. Podaj swoje imię i nazwisko oraz adres e-mail. Następnie podaj nazwę obszaru roboczego, który będzie dla Ciebie utworzony. Nazwa powinna być w formie WS_<skrót nazwy kierunku><numer indeksu>, np. WS_INF12345 dla studentki/ta o numerze indeksu 12345 na kierunku Informatyka.

Naciśnij przycisk Next >.

4. Zaznacz pozycję Use an existing schema from the database, następnie podaj nazwę schematu w bazie danych, z którego korzystasz w trakcie zajęć. Naciśnij przycisk Next >.

(3)

3

5. Podaj uzasadnienie prośby o utworzenie obszaru roboczego. Naciśnij przycisk Next >.

6. Przepisz kod weryfikacyjny i naciśnij przycisk Submit Request.

(4)

4

7. Proces rejestracji został zakończony. Poczekaj, aż administrator zaaprobuje Twoją prośbę. Wtedy na podany w trakcie procesu rejestracji adres e-mail otrzymasz informacje o parametrach logowania do Oracle APEX.

(5)

5

Część 2. Budowa prostej aplikacji na podstawie danych z pliku CSV

1. Uruchom w przeglądarce internetowej stronę logowania Oracle Application Express (Oracle APEX) i zaloguj się do swojego obszaru roboczego (jeśli logujesz się po raz pierwszy, możesz zostać poproszona/y o zmianę domyślnego hasła).

Po pomyślnym zalogowaniu zostanie wyświetlony główny panel narzędzia.

(6)

6

2. Dane, które ma przetwarzać Twoja aplikacja, znajdują się w pliku csv o nazwie ksiazki.csv (plik znajduje się na stronie WWW przedmiotu). Pobierz plik ksiazki.csv i zapisz go w lokalnym folderze. Zbudujemy teraz prostą aplikację, która będzie działała z danymi, pobranymi z tego pliku.

3. Przejdź do narzędzia do budowania aplikacji o nazwie Application Builder. Następnie naciśnij przycisk Create.

4. Nasza aplikacja będzie aplikacją biurkową (ang. desktop) – zaznacz przyciski Desktop. Aplikacja będzie bazować na danych pobranych z pliku csv, dlatego kliknij na łącze From a spreadsheet.

(7)

7

5. Załadujemy teraz dane z pliku. Dane te zostaną umieszczone w bazie danych, we wskazanej relacji. Zaznacz opcję Upload file, comma separated (*.csv) or tab delimited i naciśnij przycisk Next >.

6. Kolejny ekran kreatora pozwala na:

 wskazanie pliku zawierającego dane do wczytania (przycisk Przeglądaj...) – wskaż plik ksiazki.csv,

 określenie znaku oddzielającego kolejne wartości w pliku (pole Separator) – w naszym przypadku będzie to przecinek,

 określenie, czy pierwszy wiersz pliku zawiera nagłówki kolumn (przycisk wyboru First row contains column names) – plik ksiazki.csv zawiera nagłówki kolumn,

 wskazanie sposobu kodowania znaków w pliku (pole File Character Set) – w naszym przypadku strona kodowa to Eastern European Windows 1250.

Po wypełnieniu pól wskazanymi wartościami naciśnij przycisk Next >.

(8)

8

7. Plik ksiazki.csv zostaje poddany analizie, jej wynik zostaje zaprezentowany na kolejnym ekranie kreatora. Wskaż teraz nazwę schematu, w którym zostanie utworzona tabela z danymi pobranymi z pliku (powinien to być Twój domyślny schemat) oraz nazwę tabeli (KSIAZKI).

Następnie naciśnij przycisk Next >.

8. Kolejny ekran kreatora pozwala na wskazanie nazwy tworzonej przez nas aplikacji (Application Name) i wybór sposobu prezentacji danych (Report Type). Wpisz Księgozbiór jako nazwę aplikacji, jako typ raportu wybierz Interactive Report. Następnie naciśnij przycisk Create Application.

(9)

9

9. Po pomyślnym zakończeniu działania kreatora narzędzie powinno wyglądać jak poniżej.

Kreator utworzył trzy strony: ekran logowania (101 – Login Page), ekran z listą książek (1 – Ksiazki) i ekran-formularz do edycji danych książek (2 – Ksiazki).

10. Uruchom aplikację, naciskając przycisk Run Application. Na ekranie logowania wpisz dane uwierzytelniające, jakie podałaś/eś podczas logowania do narzędzia. Aplikacja powinna wyglądać jak na poniższym rysunku.

(10)

10 11. Sprawdź funkcjonalność aplikacji:

 zmień sposób sortowania danych – wybierz sposób sortowania klikając na nagłówek kolumny,

 wyświetl tylko powieści – wpisz „powieść” w polu wyszukiwania,

 przejdź do ekranu edycji danych książki – kliknij na ikonę edycji w wybranym wierszu i np.

zmień liczbę stron; po zakończeniu edycji naciśnij przycisk Apply Changes,

 dodaj dane nowej książki – naciśnij przycisk Create, wpisz dane, opisujące książkę i naciśnij przycisk Create,

 usuń dane o książce, którą przed chwilą zdefiniowałaś/eś – w tym celu przejdź do jej edycji i naciśnij przycisk Delete.

12. Zamknij aplikację, wróć do głównej strony narzędzia Application Builder.

(11)

11

Część 3. Analiza i modyfikacja schematu bazy danych

1. Sprawdzimy teraz, jakie obiekty zostały utworzone w schemacie bazodanowym, który wskazaliśmy w trakcie działania kreatora budowy aplikacji. Przejdź do strony głównej Oracle APEX, następnie naciśnij przycisk SQL Workshop.

2. Uruchom narzędzie Object Browser, służące do przeglądania schematu bazy danych. Następnie wyświetl strukturę relacji KSIAZKI. Relacja ta zawiera dane, pobrane z pliku ksiazki.csv. Strony aplikacji odwołują się do tej relacji

Zwróć uwagę, że kreator dodał kolumnę ID, będącą kluczem głównym – tej kolumny nie było w pliku ksiazki.csv.

(12)

12

3. Zmień typ wyświetlanych obiektów na sekwencje (ang. Sequences).

Sekwencja KSIAZKI_SEQ została utworzona w celu generowania wartości dla kolumny ID relacji KSIAZKI.

4. Sprawdź pozostałe obiekty. Zanalizuj kod wyzwalacza bi_KSIAZKI.

5. Wróć do ekranu, wyświetlającego strukturę relacji KSIAZKI. Zwróć uwagę, że relacja KSIAZKI jest nieznormalizowana: wartości opisujące dane autora i gatunek książki zawarte są wprost w relacji KSIAZKI. Dokonamy teraz normalizacji tej relacji.

6. Kliknij przycisk Create Lookup Table. Następnie zaznacz kolumnę AUTOR jako tą, która ma zostać przeniesiona z relacji KSIAZKI do nowej relacji. Naciśnij przycisk Next >.

(13)

13

7. Określ nazwę nowotworzonej relacji na AUTORZY, a nazwę sekwencji na AUTORZY_SEQ. Naciśnij przycisk Next >.

8. Potwierdź utworzenie nowej relacji przyciskiem Create Lookup Table.

9. Zanalizuj zmiany w schemacie bazy danych, m. in. w relacji KSIAZKI, jakie zostały zrealizowane w wyniku procesu normalizacji. Sprawdź dane relacji.

10. Przeprowadź drugą część procesu normalizacji relacji KSIAZKI – utwórz osobną relację dla gatunków książek. Zrób to analogicznie, jak dla danych autora.

(14)

14

11. Po zakończeniu normalizacji powinnaś/powinieneś mieć w swoim schemacie następujące obiekty:

 relacje: AUTORZY, GATUNKI, KSIAZKI,

 sekwencje: AUTORZY_SEQ, GATUNKI_SEQ, KSIAZKI_SEQ,

 wyzwalacze: T_AUTORZY, T_GATUNKI, bi_KSIAZKI.

12. Na zakończenie popraw strukturę relacji AUTORZY. Kolumna AUTOR zawiera imię i nazwisko autora. Zmień strukturę relacji w taki sposób, aby imiona i nazwiska autorów znajdowały się w osobnych kolumnach, o nazwach, odpowiednio, IMIE i NAZWISKO, oraz typie VARCHAR2(100).

Modyfikację wykonaj w ten sposób, aby w odpowiedni sposób przenieść dane z kolumny AUTOR do kolumn IMIE i NAZWISKO. Do modyfikacji struktury relacji możesz użyć funkcji narzędzia Object Browser lub wykonać odpowiednie polecenia SQL DDL w narzędziu SQL Commands. Do modyfikacji danych wykonaj odpowiednie polecenia SQL DML w narzędziu SQL Commands.

Po zakończeniu modyfikacji struktura relacji AUTORZY ma być następująca:

 AUTOR_ID, number, NOT NULL, klucz podstawowy,

 IMIE, varchar2(100), NOT NULL,

 NAZWISKO, varchar2(100), NOT NULL, a jej zawartość to:

AUTOR_ID IMIE NAZWISKO 1 Adam Mickiewicz 2 Henryk Sienkiewicz 3 Bolesław Prus

4 Władysław Reymont 13. Wróć do głównej strony Oracle APEX.

(15)

15

Cześć 4. Modyfikacja struktury aplikacji

1. Przejdź do narzędzia Application Builder. Następnie spróbuj uruchomić aplikację Księgozbiór.

Oczywiście próba uruchomienia kończy się błędem – dokonaliśmy zmian w schemacie bazy danych, natomiast aplikacja pozostała niezmodyfikowana i odwołuje się do poprzedniej wersji schematu. Poprawimy teraz aplikację, aby uwzględniała zmiany schematu.

2. Kliknij na przycisk edycji pierwszego modułu aplikacji o nazwie 1 – Ksiazki. Jest to strona wyświetlająca listę książek.

Zostanie uruchomione narzędzie do edycji struktury modułu.

3. Kliknij na pozycję Ksiazki w drzewie struktury strony (lewy panel). Jest to tzw. region strony, wyświetla on listę książek. Następnie we własnościach regionu (prawy panel) znajdź grupę Source i własność SQL Query. Naciśnij przycisk z prawej strony tej własności.

(16)

16

Wyświetlone okno pokazuje treść zapytania SQL, które odczytuje z bazy danych informacje do wyświetlenia na stronie. Zmień zapytanie na poniższe:

(17)

17 select "ID",

"IMIE" || ' ' || "NAZWISKO" as AUTOR,

"TYTUL",

"ROK_WYDANIA",

"GATUNEK",

"LICZBA_STRON"

from "#OWNER#"."KSIAZKI"

join "#OWNER#"."AUTORZY" using(AUTOR_ID) join "#OWNER#"."GATUNKI" using(GATUNEK_ID)

4. Po zmianie tekstu zapytanie możesz dokonać sprawdzenia jego poprawności, naciskając przycisk Validate.

Jeśli zapytanie jest poprawne, zatwierdź je, naciskając przycisk OK.

5. Spróbuj uruchomić stronę, naciskając przycisk Save and Run Page.

Teraz strona powinna uruchomić się bez błędu.

6. Spróbuj wyświetlić dane wybranej książki. Ta strona (formularz edycji danych) też wymaga dokonania odpowiednich zmian. Wróć do narzędzia.

7. Przejdź do ekranu struktury formularza edycji danych książki (o nazwie 2 – Ksiazki). Możesz to zrobić, posługując się narzędziem wyszukiwania stron aplikacji.

Wybierz stronę o numerze 2.

(18)

18

8. Strona formularza nie jest oparta na zapytaniu, tu jawnie trzeba zmienić definicję pól strony.

W lewym panelu rozwiń węzeł Items regionu Ksiazki. Musimy zmienić definicję pól P2_AUTOR i P2_GATUNEK.

9. Na początek zaznacz pole P2_AUTOR. Następnie we własnościach pola dokonaj następujących zmian:

 zmień nazwę pola na „P2_AUTOR_ID”,

 zmień typ pola (własność Type) na „ukryte” (ang. Hidden),

 sprawdź, czy własność Database Column zmieniła się automatycznie na AUTOR_ID.

Zapisz zmiany, naciskając przycisk Save.

10. Wykonaj analogiczne zmiany dla pola P2_GATUNEK.

(19)

19

11. Spróbujemy teraz uruchomić aplikację. Nie możemy tego zrobić bezpośrednio z aktualnie wyświetlanego ekranu struktury formularza, gdyż ten formularz jest modalnym dialogiem.

Przejdź do ekranu struktury raportu z listą książek i uruchom go. Następnie spróbuj wyświetlić szczegółowe dane jednej z książek.

Formularz działa, jednak informacje o autorze i gatunku książki nie są na razie wyświetlane (ukryliśmy je w poprzednim punkcie).

12. Dodamy teraz do formularza edycji książki pola, umożliwiające wybór autora i gatunku książki.

Zamknij formularz i przejdź do jego własności (strona o numerze 2). Rozwiń węzeł Items regionu Ksiazki w lewym panelu strony.

13. Przejdź do własności pola P2_AUTOR_ID, następnie określ wartości następujących własności:

 Identification -> Type: wybierz Select List,

 Label -> Label: wpisz „Autor”,

 List of Values -> Type: wybierz SQL Query,

 wpisz zapytanie w polu SQL Query:

select nazwisko || ' ' || imie as autor, autor_id from autorzy

order by autor

 List of Values -> Display Extra Values: zaznacz No,

 List of Values -> Display Null Values: zaznacz Yes,

 List of Values -> Null Display Value: wpisz „-- wybierz autora –“,

Zmień pozycję pola, przesuwając je w oknie Layout pod pole P2_TYTUL. Zapisz zmiany.

Następnie uruchom aplikację i sprawdź, czy można teraz wybrać autora książki.

(20)

20

14. Analogicznie zmień własności pola P2_GATUNEK_ID. Formularz po zmianach powinien wyglądać jak przedstawiono poniżej.

15. Wróć do ekranu własności strony 2. W lewym panelu zaznacz węzeł Page 2. Ksiazki i zmień wartości jej następujących własności:

 Identification -> Name: wpisz „Dane Ksiazki”,

 Identification -> Title: wpisz „Dane książki”.

Następnie zmień wartości własności Label dla poszczególnych pól formularza. Formularz po zmianach powinien wyglądać jak przedstawiono poniżej.

(21)

21

16. Przejdź do ekranu struktury raportu z listą książek. Dokonaj następujących zmian:

 zmień nazwę strony na „Lista Ksiazek”, a jej tytuł na „Lista książek”,

 ukryj kolumnę ID (nie usuwaj jej!),

 popraw etykiety pozostałych kolumn (dodaj polskie znaki diakrytyczne, itd.),

 określ domyślne sortowanie danych ma być realizowane wg tytułów książek (dodaj klauzulę ORDER BY do zapytania).

Raport po zmianach powinien wyglądać jak poniżej.

(22)

22

17. Wróć do ekranu głównego narzędzia Application Builder.

(23)

23

Cześć 5. Definiowanie dodatkowych stron

1. Dodamy teraz do aplikacji funkcjonalność, która pozwoli na definiowanie nowych autorów i edycję danych istniejących autorów. Aby rozpocząć działania kreatora, naciśnij przycisk Create Page >.

2. Określ typ nowej strony jako formularz (zaznacz Form) a następnie raport z formularzem (zaznacz Report with Form on Table).

(24)

24 3. Określ wartości własności strony:

 Report Type (typ raportu): wybierz Interactive Report,

 Report Page Name (nazwa strony raportu): wpisz „Lista autorów”,

 Form Page Name (nazwa strony formularza): wpisz „Dane autora”,

 Breadcrumb (ścieżka nawigacji w hierarchii stron): wybierz KSIAZKI Breadcrumb,

 Parent Entry (strona nadrzędna w hierarchii): wybierz Home (Page 1),

 Entry Name (nazwa strony w hierarchii stron): wpisz „Lista autorów”.

4. Zdefiniuj łącze do strony w menu nawigacyjnym aplikacji.

(25)

25

5. Wskaż relację, której dane będzie obsługiwała definiowana strona (relacja AUTORZY). Wybierz kolumny relacji, które mają być prezentowane na raporcie.

6. Wybierz sposób obsługi relacji przez AUTORZY przez formularz do edycji danych:

 wskaż identyfikację rekordów przez klucz główny,

 wybierz wszystkie kolumny relacji AUTORZY do umieszczenia w formularzu,

 wskaż kolumnę AUTOR_ID jako klucz główny relacji AUTORZY,

 wskaż, że wartości dla kolumny AUTOR_ID będą generowane za pomocą sekwencji AUTORZY_SEQ.

(26)

26

7. Naciśnięcie przycisku Create kończy działanie kreatora. W jego wyniku otrzymaliśmy dwie strony:

 stronę – raport z listą autorów:

 oraz stronę – formularz do edycji danych wybranego autora:

(27)

27

8. Sprawdź działanie stron: spróbuj dodać nowego autora, zmodyfikować dane autora istniejącego.

Spróbuj również usunąć dane autora, dla którego zdefiniowano jakieś książki. Czy operacja usunięcia zakończyła się powodzeniem? Jeśli nie, dlaczego?

9. Posługując się ekranami własności zdefiniowanych przed chwilą stron doprowadź je do jak najlepszej postaci:

 ukryj pola ID,

 popraw etykiety pól,

 dostosuj rozmiary pól w formularzu (zmień typ pola).

10. Ostatnia strona naszej aplikacji posłuży do wyświetlania i edycji danych o gatunkach. Tym razem będzie to strona typu „interaktywna tabela” (ang. interactive grid). Przejdź do głównego ekranu narzędzia i naciśnij przycisk Create Page >.

11. Jako typ strony wskaż formularz (wybierz Form) a następnie edytowalną interaktywną tabelę (wybierz Editable Interactive Grid).

(28)

28

12. Określ nazwę strony jako Lista gatunkow, wybierz ścieżkę nawigacyjną KSIAZKI Breadcrumb, jako element nadrzędny wskaż Home (Page 1), a nazwę określ jak „Lista gatunków”.

(29)

29

13. Dodaj odwołanie do strony do menu nawigacyjnym. Pozycja ma nosić nazwę „Lista gatunków”.

14. Wskaż relację GATUNKI jako źródło danych dla strony. Określ klucz główny tej relacji jako GATUNEK_ID. Dodaj do strony wszystkie kolumny relacji GATUNKI.

(30)

30

15. Naciśnięcie przycisku Create kończy działanie kreatora. Uruchom stronę i sprawdź jej funkcjonalność.

Uwaga! Jeśli w formularzu, który zbudowałaś/eś, wyświetlane są poziome paski przewijania (mimo tego, że dane nie przekraczają rozmiaru strony), można je usunąć w następujący sposób:

 w uruchomionym formularzu wybierz pozycję Columns z menu Actions,

 zaznacz kolumnę Gatunek i ustaw niedużą wartość (np. 150) we własności Minimum Column Width (Pixel),

 naciśnij przycisk Save,

 zapisz bieżącą postać formularza jako domyślną, wybierając pozycję Report -> Save z menu Actions.

(31)

31

Część 6. Definiowanie pól niebazowych

1. Wyposażymy teraz naszą aplikację w pola, których wartości są wyliczane dynamicznie w trakcie działania aplikacji. Na początek dodamy do ekranu z danymi autora pole, które wyświetli liczbę książek, jaką autor napisał. Pole będzie wypełniane przez wynik zapytania SQL.

2. Przejdź do narzędzia do edycji struktury strony 4 – Dane autora i kliknij prawym klawiszem myszy w węzeł Items w regionie Dane autora. Następnie z menu kontekstowego wybierz pozycję Create Page Item. Zostanie dodane nowe pole o nazwie P4_NEW. Przejdź do własności tego pola.

3. Określ wartości następujących własności:

 Identification -> Name: wpisz „P4_LICZBA_KSIAZEK”,

 Identification -> Type: wybierz Display Only,

 Label -> Label: wpisz „Liczba książek”,

 Settings -> Save Session State: wybierz No,

 Settings -> Show Line Breaks: wybierz No,

 Source -> Type: wybierz SQL Query (return single value),

 Source -> SQL Query: wpisz:

select count(*) from ksiazki

where autor_id = :P4_AUTOR_ID

 Source -> Used: wybierz Always, replacing any existing value in session state.

Zapisz zmiany i uruchom aplikację.

4. Sprawdź, czy nowozdefiniowane pole wyświetla poprawne informacje.

5. Inną metodą wypełnienia wartości pola, które nie ma bezpośredniego źródła w relacji w bazie danych, jest zdefiniowanie tzw. dynamicznej akcji. Posłużymy się tą metodą, aby do strony z danymi wybranego autora dodać pole, pokazujące średnią liczbę stron książek autora.

(32)

32

6. Przejdź do narzędzia do edycji struktury strony 4 – Dane autora i kliknij prawym klawiszem myszy w węzeł Items w regionie Dane autora. Następnie z menu kontekstowego wybierz pozycję Create Page Item. Zostanie dodane nowe pole o nazwie P4_NEW. Przejdź do własności tego pola.

7. Określ wartości następujących własności:

 Identification -> Name: wpisz „P4_SREDNIA_LICZBA_STRON”,

 Identification -> Type: wybierz Display Only,

 Label -> Label: wpisz „Średnia liczba stron”,

 Settings -> Save Session State: wybierz No,

 Settings -> Show Line Breaks: wybierz No,

 Source -> Type: wybierz Item,

 Source -> Item: wybierz P4_SREDNIA_LICZBA_STRON.

8. W lewym panelu narzędzia wybierz zakładkę dynamicznych akcji (ang. Dynamic Actions).

Wartość dodanego przed chwilą pola powinna zostać wyliczona w momencie załadowania strony. Rozwiń węzeł Events i kliknij prawym klawiszem myszy na węźle Page Load. Z menu kontekstowego wybierz pozycję Create dynamic action. Zostanie utworzona akcja o nazwie New.

Zaznacz ją i przejdź do panelu jej własności (prawy panel narzędzia). Określ wartości następujących własności:

 Identification -> Name: wpisz „Policz średnią liczbę stron”,

 When -> Event: wybierz Page Load.

9. Wróć do lewego panelu i zaznacz węzeł Show pod węzłem Policz średnią liczbę stron -> True.

Zdefiniujemy teraz akcję, która będzie wykonywana przy zajściu zdarzenia (czyli załadowaniu strony). W prawym panelu określ wartości następujących własności:

 Identification -> Action: wybierz Set Value,

 Settings -> Set Type: wybierz SQL Statement,

 Source -> SQL Query: wpisz:

select nvl(avg(liczba_stron), 0) from ksiazki

where autor_id = :P4_AUTOR_ID

 Settings -> Items to Submit: wybierz P4_AUTOR_ID,

 Affected Elements -> Selection Type: wybierz Items,

 Affected Elements -> Items: wybierz P4_SREDNIA_LICZBA_STRON.

Zapisz zmiany i uruchom aplikację.

(33)

33

10. Sprawdź, czy nowozdefiniowane pole wyświetla poprawne informacje.

11. Pojedyncza dynamiczna akcja może zostać użyta do wypełnienia wartości kilku pól (np. jeśli ich wartości mogą zostać wyliczone przez pojedyncze zapytanie). Zmienimy definicję pola P4_LICZBA_KSIAZEK w taki sposób, aby jego wartość była wyliczona za pomocą akcji Policz średnią liczbę stron.

12. Przejdź do własności pola P4_LICZBA_KSIAZEK. Zmień wartości dla poniższych własności:

 Source -> Type: wybierz Item,

 Source -> Item: wybierz P4_LICZBA_KSIAZEK.

13. Przejdź do własności elementu Set Value dynamicznej akcji Policz średnią liczbę stron. Zmień zapytanie na następujące:

select nvl(avg(liczba_stron), 0), count(*) from ksiazki

where autor_id = :P4_AUTOR_ID

a we własności Affected Elements -> Item(s) dodaj pole P4_LICZBA_STRON (wartość własności powinna teraz zawierać dwa pola: P4_SREDNIA_LICZBA_STRON, P4_LICZBA_KSIAZEK). Zapytanie teraz wylicza dwie wartości, zostają one przesłane do dwóch pól.

Zapisz zmiany i uruchom aplikację.

(34)

34

Część 7. Walidacja danych w aplikacji

1. Dodamy teraz do naszej aplikacji mechanizm walidacji poprawności danych, jakie użytkownik definiuje i edytuje w aplikacji.

2. Na początek określmy, aby przy definiowaniu danych nowej książki użytkownik musiał podać jej tytuł, dane o autorze i gatunku. Za obowiązkowość występowania wartości w polu odpowiada własność Validation -> Value Required. Przejdź do ekranu edycji strony 2 – Dane Ksiazki i ustaw tą własność na wartość Yes dla pól P2_TYTUL, P2_AUTOR_ID i P2_GATUNEK_ID strony 2 – Lista autorow.

3. Sprawdź działanie tego mechanizmu – spróbuj np. dodać książkę bez wskazania jej autora.

4. W powyższy sposób możemy zdefiniować jedynie podstawowe testy poprawności danych (np. wymuszenie obowiązkowości wartości w polu czy też zawieranie wartości pola w zdefiniowanym przedziale). Jeśli jednak chcemy zdefiniować bardziej zaawansowane testy poprawności albo wpłynąć na postać komunikatu w podstawowych testach, musimy zdefiniować tzw. walidacje. Na początek zdefiniujemy walidację sprawdzającą, czy definiując nową książkę użytkownik podał liczbę stron większą od 0, przy czym definicja liczby stron nie jest wymagana (czyli użytkownik może zdefiniować książkę bez określonej liczby stron).

5. W narzędziu do edycji strony 2 – Dane ksiażki w lewym panelu przejdź do zakładki Processing.

Kliknij prawym klawiszem myszy w węzeł Validating i wybierz z menu kontekstowego opcję Create Validation. Zaznacz dodaną walidację o nazwie New i określ wartości jej następujących własności:

 Identification -> Name: wpisz „Liczba stron większa od 0”,

 Validation -> Type: wybierz SQL Expression,

 Validation -> SQL Expression: wpisz:

:P2_LICZBA_STRON is null or :P2_LICZBA_STRON > 0

 Error -> Error Message: wpisz „Liczba stron powinna być większa o 0!”,

 Error -> Display Location: wybierz Inline with Field,

 Error -> Associated Item: wybierz P2_LICZBA_STRON.

(35)

35

6. Sprawdź działanie walidacji – spróbuj dodać książkę z ujemną liczbą stron lub zmień na ujemną liczbę stron w zdefiniowanej już książce.

7. Teraz dodamy mechanizm uniemożliwiający usunięcie autora, którego książki znajdują się w księgozbiorze. Aktualnie próba wykonania takiej operacji powoduje zgłoszenie naruszenia ograniczenia integralnościowego typu klucz obcy z relacji KSIAZKI.

Taki komunikat może nie być zrozumiały dla użytkownika aplikacji. Musimy zdefiniować walidację, która przy próbie usunięcia autora sprawdzi, czy istnieją zdefiniowane dla niego książki. Jeśli tak, wówczas operacja usunięcia zostanie anulowana a użytkownik otrzyma zrozumiały dla niego komunikat.

(36)

36

8. Otwórz narzędzie do edycji struktury strony 4 – Dane autora. W zakładce Processing dodaj nową walidację i ustaw wartości następujących własności:

 Identification -> Name: wpisz „Usuwanie autora”,

 Validation -> Type: wybierz PL/SQL Function (returning Error Text),

 Validation -> PL/SQL Function Body Rreturning Error Text: wpisz:

declare

v_wynik char(1);

begin

select '1' into v_wynik from ksiazki

where autor_id = :P4_AUTOR_ID;

raise too_many_rows;

exception

when no_data_found then return null;

when too_many_rows then

return 'Autor '|| :P4_IMIE || ' ' || :P4_NAZWISKO ||

' posiada zdefiniowane książki! Usunięcie wstrzymane!';

end;

 Error -> Display Location: wybierz Inline in Notification.

 Server Side Condition -> When Button Pressed: wybierz DELETE.

9. Sprawdź działanie walidacji – spróbuj usunąć autora, dla którego zdefiniowano jakieś książki.

10. Kolejna walidacja będzie wymuszała zachowanie unikalności autorów. Co prawda w relacji AUTORZY nie mamy aktualnie zdefiniowanego klucza unikalnego (czyli w relacji AUTORZY da się zdefiniować dwukrotnie autora o takim samym imieniu i nazwisku), jednak sama aplikacja może

„pilnować” unikalności danych relacji.

(37)

37

11. Przejdź ponownie do zakładki Processing narzędzia do edycji struktury strony 4 – Dane autora i zdefiniuj nową walidację. Określ wartości następujących własności:

 Identification -> Name: wpisz „Nowy autor”,

 Validation -> Type: wybierz No Rows returned,

 Validation -> SQL Query wpisz:

select * from autorzy where imie = :P4_IMIE

and nazwisko = :P4_NAZWISKO

 Error -> Message: wpisz „Taki autor już jest zdefiniowany!”,

 Error -> Display Location: wybierz Inline in Notification.

 Server Side Condition -> When Button Pressed: wybierz CREATE.

12. Sprawdź działanie walidacji – spróbuj dodać autora, który już istnieje w relacji AUTORZY.

13. Zdefiniowana przed chwilą walidacja zabezpiecza przez zdefiniowaniem nowego autora, powielającego dane autora już istniejącego. Jednak nie zadziała w sytuacji, gdy spróbujemy zmodyfikować dane istniejącego autora w taki sposób, aby były one identyczne z danymi innego autora. Aby osiągnąć taki skutek, musimy zdefiniować jeszcze jedną walidację. Jej własności są analogiczne jak własności walidacji Nowy autor, jedynie zmienia się zapytanie:

select * from autorzy where imie = :P4_IMIE

and nazwisko = :P4_NAZWISKO and autor_id <> :P4_AUTOR_ID

i przycisk, po naciśnięciu którego walidacja ma zostać uruchomiona (przycisk SAVE). Spróbuj zdefiniować tą walidację i sprawdź jej działanie.

(38)

38

14. Zdefiniujmy analogiczny mechanizm na stronie do edycji gatunków (nazwa: 5 – Lista gatunkow).

Ponieważ jest to strona typu „edytowalna interaktywna tabela”, musimy to zrobić w inny sposób.

15. Przejdź do ekranu definicji struktury strony 5 – Lista gatunkow. W lewym panelu otwórz zakładkę Processing, następnie zaznacz węzeł Save Interactive Grid Data pod węzłem Processing.

Zaznaczony obiekt odpowiada za wysyłanie do bazy danych odpowiednich poleceń SQL DML w sytuacji, gdy użytkownik zażąda dodania nowego gatunku, usunięcia lub modyfikacji danych istniejącego gatunku. Zastąpimy domyślny mechanizm własnym kodem PL/SQL, który będzie konstruował odpowiednie polecenia SQL DML. Zmień wartości następujących własności:

 Settings ->Target Type: wybierz PL/SQL Code,

 Settings -> PL/SQL Code to Insert/Update/Delete: wpisz:

begin

case :APEX$ROW_STATUS when 'C' then

insert into gatunki(gatunek_id, gatunek) values (:GATUNEK_ID, :GATUNEK)

returning gatunek_id into :GATUNEK_ID;

when 'U' then update gatunki

set gatunek = :GATUNEK

where gatunek_id = :GATUNEK_ID;

when 'D' then delete gatunki

where gatunek_id = :GATUNEK_ID;

end case;

end;

Powyższy kod, w zależności od rodzaju operacji, zleconej przez użytkownika (wartość zmiennej APEX$ROW_STATUS) konstruuje odpowiednie polecenie DML i wysyła je do bazy danych. Zapisz zmiany i uruchom stronę. Spróbuj dodać nowy gatunek i usunąć gatunek istniejący.

16. Na razie ręcznie zaimplementowaliśmy domyślny mechanizm strony, teraz uzupełnimy go o pierwszą walidację: sprawdzenie, czy z usuwanym gatunkiem nie są związane jakieś książki. W tym celu w kodzie z punktu poprzedniego dodaj zaznaczone na czerwono elementy:

declare

v_temp char(1);

begin

case :APEX$ROW_STATUS when 'C' then

insert into gatunki(gatunek_id, gatunek) values (:GATUNEK_ID, :GATUNEK)

returning gatunek_id into :GATUNEK_ID;

when 'U' then update gatunki

set gatunek = :GATUNEK

where gatunek_id = :GATUNEK_ID;

when 'D' then begin

select '1' into v_temp from ksiazki where gatunek_id = :GATUNEK_ID;

raise too_many_rows;

(39)

39 exception

when no_data_found then delete gatunki

where gatunek_id = :GATUNEK_ID;

when too_many_rows then APEX_ERROR.ADD_ERROR

(p_message => 'Istnieją książki gatunku "'||:GATUNEK ||'"! Usunięcie anulowane!',

p_display_location =>

APEX_ERROR.C_INLINE_IN_NOTIFICATION);

end;

end case;

end;

Przed wysłaniem do bazy danych polecenia DELETE sprawdzamy, czy w relacji książki nie zdefiniowano rekordów, odwołujących się do usuwanego rekordu. Jeśli takich rekordów nie znaleziono, konstruujemy polecenie DELETE. Jeśli są, wyświetlamy komunikat o błędzie.

17. Sprawdź działanie strony. Spróbuj usunąć gatunek, dla którego zdefiniowano książki.

18. W analogiczny sposób zdefiniuj mechanizm weryfikacji unikalności nazwy przy definicji nowego gatunku lub przy zmianie nazwy gatunku istniejącego. Wskazówka: zapytanie sprawdzające unikalność nazwy przy definicji nowego gatunku może wyglądać jak poniżej:

select '1' into v_temp from gatunki where gatunek = :GATUNEK;

Natomiast przykład zapytania, sprawdzającego unikalność nazwy przy modyfikacji istniejącego gatunku powinno być rozbudowane o dodatkowy warunek (dlaczego?):

select '1' into v_temp from gatunki where gatunek = :GATUNEK

and gatunek_id <> :GATUNEK_ID;

(40)

40

Dodatkowe informacje

Powyższy tutorial przedstawia jedynie podstawy pracy z narzędziem Oracle Application Express.

Zainteresowani poznaniem zaawansowanych mechanizmów budowania aplikacji bazodanowych mogą skorzystać z poniższych materiałów.

 Dokumentacja użytkownika Oracle Application Express:

http://www.oracle.com/technetwork/developer-tools/apex/documentation/index.html

 Tutorial firmy Oracle:

https://docs.oracle.com/database/apex-5.1/AETUT/AETUT.pdf

Cytaty

Powiązane dokumenty

Ostatnim etapem odzyskiwania licencji jest otworzenie przez program Automation License Manager, otrzymanego w odpowiedzi na wiadomość z korku 8 pliku aktywacyjnego,

Z menu &gt; Drukarki i skanery (lub Drukowanie i skanowanie, Drukarka i faks) wybierz pozycję Preferencje systemowe, a następnie wybierz drukarkę.Kliknij Opcje i

Dzięki asymetrycznym tylnym drzwiom otwieranym pod kątem 180°, pojemności użytkowej wynoszącej 3,3 m 3 oraz 1,91 m długości załadunki (z pełną przegrodą), Nowy EXPRESS

Wystarczy jednak przeczytać zaledwie jeden wers wcześniej przed tekstem przytoczonym przez Sędziaka, aby przekonać się, że Jezus wcale nie zakładał, iż

Jeśli w polu Numer konta widoczny jest tylko link ustaw, oznacza to, że w systemie nie ma jeszcze Twojego numeru konta bankowego i powinieneś go wprowadzić.. Kliknij zatem w ten link

e Naciskaj przycisk Menu, aż zostanie wyświetlone polecenie Drukuj zadanie, a następnie naciśnij przycisk Select (Wybierz).. (Polecenie Drukuj Wszystko powoduje natychmiastowe

Z menu &gt; Drukarki i skanery (lub Drukowanie i skanowanie, Drukarka i faks) wybierz pozycję Preferencje systemowe, a następnie wybierz drukarkę.Kliknij Opcje i

Zaznacz wiersz lub wiersze z komórkami nagłówkowymi i wybierz z menu kontekstowego (prawy klawisz myszki lub klawisz Menu) opcję Właściwości tabeli, a następnie zakładkę