7. Formularze master-detail 1. Utworzymy teraz jeden z bardziej złożonych formularzy dostępnych z kreatora formularz master-detail. Będzie on swoją strukturą przypominał utworzony wcześniej formularz dotyczący wykonawców i utworów. Różnica polegać będzie na tym, że tym razem powiązania dwóch regionów zostaną wygenerowane automatycznie. Nowo tworzony formularz będzie pozwalał na edycję notowań wraz z miejscami, jakie zajęły w nich poszczególne utwory. Niestety w chwili obecnej klucz główny w tabeli z miejscami (LP3_MIEJSCA) oparty jest na trzech atrybutach M_U_ID jako identyfikatorze utworu, który pojawił się w notowaniu, M_N_ID jako identyfikatorze samego notowania, a także M_LP miejscu utworu w notowaniu. Niestety takie rozwiązanie nie do końca pasuje do filozofii Oracle Application Express. Klucz główny nie jest w tym przypadku niemodyfikowalnym sztucznym kluczem głównym. W efekcie prowadziłoby to do nieprzyjemnych komplikacji podczas budowy formularza (w szczególności master-detail). Dlatego zanim rozpoczniemy jego budowę, naprawimy tabelę z miejscami. W tym celu: a. Pobierz ze strony WWW przedmiotu skrypt ALTER_LP3_MIEJSCA.sql i zapisz go w lokalnym folderze. Następnie przejdź do narzędzia SQL Scripts i załaduj ten skrypt. b. Następnie uruchom załadowany skrypt korygujący niepożądany klucz główny.
Tak przygotowani możemy rozpocząć budowę właściwego formularza. W tym celu wykonaj poniższe operacje: c. Przejdź do strony edycji Aplikacji LP3. Uruchom kreator stron korzystając z przycisku Create Page>. d. Jako typ tworzonej strony wybierz Form. Przejdź do następnego kroku kreatora. e. Jako typ formularza wybierz Formularz Master-Detail.
f. W pierwszym kroku dotyczącym szczegółów tworzonego formularza wskaż na tabelę LP3_NOTOWANIA jako tabelę master. A następnie wybierz wszystkie kolumny tabeli, jako te, które mają być wyświetlane na formularzu. Wybór wszystkich kolumn pozwoli nam w pełni decydować o ich funkcji lub w razie potrzeby je ukryć nie będziemy musieli zmieniać definicji źródła, aby dodać brakującą kolumnę. g. Jako tabelę detail wybierz LP3_MIEJSCA. Tu również wybierz wszystkie kolumny jako te, które mają być wyświetlane. h. Kluczem głównym w tabeli LP3_NOTOWANIA jest kolumna N_ID. Jako źródło danych dla tej kolumny, wykorzystywane podczas wstawiania nowego wiersza, wskaż sekwencję LP3_NOTOWANIA_SEQ.
i. Klucz główny w tabeli LP3_MIEJSCA po naszej poprawce jest niemodyfikowalnym sztucznym kluczem głównym. Niech źródłem wartości dla klucza będzie utworzona w ramach poprawki schematu sekwencja LP3_MIEJSCA_SEQ. j. W kroku dotyczącym opcji regionu master: wyraź zgodę na nawigację po kolejnych rekordach tabeli (bez konieczności powrotu do innej strony, np. raportu, celem zmiany edytowanego rekordu) kolejność wierszy w tabeli master ustal w oparciu o kolumnę N_DATA zrezygnuj z tworzenia strony będącej raportem dotyczącym tabeli master k. Kreator formularza Master-Detail umożliwia stworzenie klasycznego formularza M-D, w którym regiony Master i Detail znajdują się na jednej stronie, lub dwóch formularzy, które oddzielnie umożliwiać będą edycję tylko jednej z tabel. Wybierz pierwszą z opcji.
l. W związku z tym, że nie chcieliśmy tworzenia strony będącej raportem, w kroku edycji atrybutów strony musimy określić jedynie: Tytuł dla strony Master-Detail: Edycja notowań Tytuł regionu Master: Notowanie Tytuł regionu Detail: Miejsca utworów w notowaniu Ponadto, w tym samym kroku kreatora, wskaż element nadrzędny dla nowo tworzonej strony: Lista notowań. Zmień także element drogi powrotu związany z nowo tworzonym formularzem na Edycja notowania. m. Kolejny krok kreatora dotyczy kwestii związanych z zakładkami. Wybierz skorzystanie z zakładki istniejącej w ramach istniejącego zestawu zakładek. n. Następnie wskaż zakładkę Notowania, tak aby raport Master-Detail współdzielił tę zakładkę z raportem dotyczącym notowań.
o. W ostatnim kroku kreatora zatwierdź tworzenie strony, wykorzystując przycisk Create. p. Sprawdź działanie strony uruchamiając ją za pomocą przycisku Run Page. q. Formularz uruchomił się w trybie wstawiania nowego wiersza.
2. W chwili obecnej nie ma możliwości edycji istniejących notowań. Konieczne będzie powiązanie nowo utworzonego formularza z raportem Lista notowań. Korzystając z doświadczeń zdobytych w ramach poprzednich ćwiczeń wykonaj samodzielnie to zadanie (stwórz link na poziomie każdej krotki w raporcie Lista notowań umożliwiający wywołania formularza Edycja notowań w określonym kontekście, link może być stworzony w oparciu o kolumnę raportu ID (N_ID)). Na zakończenie przejdź do edycji dziesiątego notowania.
3. W związku z tym, że formularz Edycja notowań w dalszym ciągu znacząco odbiega od naszych wyobrażeń, wykonaj samodzielnie następujące zadania: a. Popraw etykiety wszystkich przycisków. b. Popraw etykiety wszystkich pól zarówno w regionie master jak i detail. c. Pozwól na wyświetlanie tylko pierwszych 50-ciu miejsc w ramach każdego notowania. d. Zmień format daty na analogiczną, jaka występuje w raporcie (jeśli jest inny). e. Zagwarantuj niemodyfikowalną kolejność miejsc zgodną z wartością kolumny M_LP możesz spróbować wykonać to zadanie na dwa sposoby zmieniając atrybuty kolumn raportu lub zmieniając treść zapytania. Sprawdź, który ze sposobów daje pożądane skutki. f. Zmień kolejność kolumn w regionie raportu detail. g. Zmień sposób paginacji miejsc notowania na taki, jaki był wykorzystywany na raporcie z prowadzącymi. h. Jeśli jest taka konieczność, popraw obiekty nawigacji (branch) uruchamiane w momencie zatwierdzania zmian na stronie.
4. Formularz w dalszym ciągu wymaga poprawek. Być może droga powrotna (breadcrumb) nie została utworzona we właściwy sposób. Ponadto, nie można wymagać od użytkowników znajomości wszystkich identyfikatorów prowadzących, wykonawców i utworów. Zaczniemy od modyfikacji drogi powrotnej. Aby ją zmienić, wykonaj poniższe czynności: a. Przejdź do edycji formularza Edycja notowań. b. Kliknij na link Breadcrumb w obszarze komponentów współdzielonych, aby przyjrzeć się definicji drogi powrotnej. W poniższym przypadku okazuje się, że prawdopodobnie dla strony Edycja notowań nie ma zdefiniowanych żadnego elementu drogi powrotnej lub został on zdefiniowany niewłaściwie. (Twój przypadek może być inny sytuacja obecna powstała w wyniku błędnego zadziałania kreatora.) c. Skasuj w polu Page wartość będącą identyfikatorem strony Edycja notowań, a następnie wykorzystaj przycisk Set w celu wyświetlenia wszystkich elementów drogi powrotnej o nazwie Breadcrumb. W efekcie wyświetlone zostały elementy drogi powrotnej, jednakże tylko te, które funkcjonują w hierarchii.
d. Aby wyświetlić wszystkie elementy drogi powrotnej niezależnie od zdefiniowanych hierarchii kliknij link Tabular View (znajduje się on na liście zadań po prawej stronie). Okazuje się, że dla naszej strony element drogi powrotnej istnieje, jednak nie został on osadzony w hierarchii. e. Aby to naprawić, kliknij link odpowiadający elementowi drogi powrotnej Edycja notowania. f. W obszarze Entry określ wartości następujących atrybutów: Parent Entry: Lista notowań Short name: Edycja notowań g. Zatwierdź zmiany przyciskiem Apply Changes i przełącz się na widok hierarchii elementów drogi powrotnej. Wyświetl wszystkie elementy (nie tylko te, które związane są jedną stroną).
h. Przejdź do edycji Aplikacji LP3. i. Przejdź do edycji strony Edycja notowań. j. Uruchom stronę sprawdzając wygląd drogi powrotnej. k. Sprawę identyfikatorów zostawimy na następny zestaw ćwiczeń.