Prosty interfejs WEBowy dla hurtowni – Oracle Apex

Instalacja poprzez PL/SQL Gateway

Instalacja poprzez PL/SQL Gateway odbywa się już po stronie serwera bazodanowego. Nie potrzebujemy w tej instalacji serwerów aplikacji, apex zainstalowany w ten sposób podnosi się razem z instancją bazy danych. Niestety taka instalacja powoduje że wszystkie obciążenia wynikające z ruchu HTTP do i z aplikacji obciążają serwer bazy danych. Cała operacja przebiega z poziomu serwera na którym jest baza danych. Pobieramy najnowszego APEXa (na dzień 28-03-2013 był jest to APEX w wersji 4.2) i rozpakowujemy go na dysku. Następnie przechodzimy do tego rozpakowanego katalogu z poziomu linii poleceń.

Uruchamiamy skrypt apexins z poziomu SQL*Plusa jako użytkownik SYS. Istotne jest to, byśmy uprzednio przeszli w konsoli do katalogu w którym znajduje się rozpakowany APEX. Po nazwie skryptu podajemy jeszcze 4 parametry:

  1. Nazwa skryptu

  2. Tablespace w którym zostanie zainstalowany APEX.

  3. Tablespace w którym będą lądowały obrazki uploadowane przez użytkowników

  4. Nazwa tablespace tymczasowego który będzie wykorzystywany podczas instalacji

  5. Wirtualny katalog w którym przechowywane będą obrazki.

Podczas instalacji będą wprowadzane do bazy danych , niezbedne informacje. Sama instalacja może potrwać kilka – kilkadziesiąt minut.

Nawet jeśli skrypt chwilami „zawiśnie” , nie przejmujemy się. Na końcu powinniśmy dostać komunikat „Procedura PL/SQL została zakończona pomyślnie”, oraz powinno nas wylogować z SQL*PLusa.

Kolejnym krokiem będzie załadowanie obrazków z dysku do bazy danych. Logujemy się ponownie do SQLPLUSa (pozostając cały czas w katalogu w którym rozpakowaliśmy apexa). Następnie uruchamiamy skrypt apxldimg.sql z parametrem wskazującym na katalog znajdujący się piętro niżej w stosunku do katalogu w którym rozpakowany jest APEX. Jeśli np. na moim przykładzie rozpakowałem APEXA (wszystkie jego podkatalogi i pliki) do katalogu „c:\dane\apex „, to jako parametr podaję „c:\dane”. Ten element jest bardzo istotny dla powodzenia całej instalacji. Niestety jest słabo opisany w dokumentacji Oracle , a to doprowadza do błędów.

Po zatwierdzeniu powinniśmy zobaczyć jak Oracle tworzy sobie katalog wirtualny. Na końcu znajdzie się komunikat „Katalog został utworzony”. Jeśli dostaniesz jakikolwiek błąd, sprawdź dokładnie ścieżki. Jeśli to zignorujesz, to potem nie będziesz w stanie zalogować się do APEXA ( pomijając już fakt niewyświetlania przez niego żadnych obrazów). Apex już na etapie okna logowania korzysta z plików CSS które właśnie teraz są ładowane, a bez których formularz logowania po prostu nie działa.

Na koniec poinformuje nas o załadowaniu obrazów i wróci do konsoli SQL*Plusa:

Przyszedł czas na konfigurację portu na którym APEX ma być dostępny i hasła do Admina. Pozostając w katalogu w którym rozpakowaliśmy APEXa, uruchamiamy skrypt @apxconf Podajemy hasło do konta administratora APEXa. Może nam się pojawić komunikat o wymaganej złożoności hasła tak jak poniżej:

Zostaniemy wyrzuceni z SQL*Plusa, logujemy się więc ponownie i ponownie uruchamiamy skrypt. Podajemy hasło zgodne z wymaganiami. Akceptujemy domyślny port (8080) na którym ma być dostępny APEX, lub podajemy inny.

Musimy teraz odblokować następujących użytkowników:

-xdb

-apex_040200

-anonymous

Dodatkowo ustawiamy hasła dla użytkownika APEX_040200.

Zauważ że nazwa użytkownika APEX_040200 jest związana z wersją APEXa. Instaluję wersję 4.2 , dlatego mój użytkownik nazywa się APEX_040200 , w wersji 3.2 nazywał się APEX_030200.

Jeśli więc instalujesz inną wersję, zastosuj się do tej konwencji. Odblokowanie i ustawienie haseł użytkownikom należy wykonać jeszcze przed pierwszym logowaniem do APEXa. Jeśli tego nie wykonamy , lub zrobimy to źle nie będziemy mogli się zalogować do apexa mimo podania właściwego hasła, lub zobaczymy taki komunikat:

Czas na pierwsze logowanie do APEXa. Wchodzimy pod adres: http://localhost:8080/apex

Jeśli podczas instalacji podaliśmy inny port niż 8080, to podajemy go w miejsce 8080 w adresie.

Logujemy się jako użytkownik ADMIN i podajemy hasło które ustawiliśmy podczas uruchamiania skryptu apxconf.sql

Będziemy musieli zmienić hasło (na szczęscie da się je zmienić na takie samo ;) )

Zostaniemy poinformowani o zmianie hasła, klikamy przycisk „return”.

Zostaniemy ponownie przekierowani do ekranu logowania. Logujemy się do Workspace „INTERNAL” jako użytkownik „Admin” z tym dopiero co zmienionym hasłem.

Po zalogowaniu powinniśmy zobaczyć taki ekran:

Tworzenie przestrzeni roboczej

Aby móc tworzyć jakiekolwiek aplikacje, trzeba w pierwszej kolejności utworzyć przestrzeń roboczą w które się aplikacje znajdą. W ramach jednej przestrzeni roboczej możemy mieć wiele aplikacji. Użytkownicy utworzeni w ramach grupy roboczej będą wspólni dla wszystkich aplikacji w tej grupie.

Aby utworzyć grupę roboczą, po zalogowaniu się do grupy roboczej „INTERNAL” jako administrator , nacisnij „Create Workspace”

Wprowadź nazwę dla tej grupy roboczej:

Nasze aplikacje będą musiały się poruszać w jakimś kontekście – tj. jako jakiś użytkownik bazodanowy. Będziemy więc mieli możliwość dostępu do takich obiektów , do jakich dostęp ma ten użytkownik. Jeśli chcemy wykorzystać istniejące konto, w opcji „Re-use existing schema” wybieramy „YES”. Z rozwijalnej listy (przy „Schema name”) wybieramy domyślny schemat. Jeśli na potrzeby przestrzeni chcemy mieć zupełnie pusty, nowy schemat, wybieramy „No” w opcji „Re-use existing schema” i podajemy nazwę schematu który ma zostać utworzony, a także hasło do niego.

W dalszej kolejności podajemy nazwę i hasło administratora przestrzeni. Tworzymy w ten sposób użytkownika który będzie zarządzał całą przestrzenią roboczą i użytkownikami w niej.

Po naciśnięciu „Next” dostaniemy podsumowanie.

A po zatwierdzeniu podsumowanie.

Zarządzanie administratorami i użytkownikami w przestrzeni roboczej

Aby tworzyć lub zarządzać użytkownikami w przestrzeni roboczej, klikamy „Manage Workspaces”,

a następnie „ManageDevelopers and Users” z poziomu administratora instancji Apex. Użytkownikami i administratorami przestrzeni roboczej możemy też zarządzać jako administrator przestrzeni utworzony na etapie kreowania przestrzeni.

Zobaczymy listę istniejących użytkowników. Z tego poziomu możemy też edytować użytkowników.

Aby utworzyć użytkownika, klikamy „Create User” w prawym górnym rogu.

Wprowadzamy nazwę użytkownika, jego dane, hasło. Jeśli chcemy aby użytkownik był administratorem przestrzeni wybieramy „Yes” przy opcji „User is an administrator”. W takim przypadku, nowo utworzony użytkownik poza generowaniem aplikacji, będzie mógł tworzyć innych użytkowników. Jeśli ma to być programista, wybieramy „No” przy opcji „User is an administrator”, a przy opcji „User is a developer” wybieramy „Yes”. Jeśli ma to być użytkownik końcowy , który nie będzie mógł tworzyć użytkowników ani aplikacji , a jedynie będzie mógł korzystać z istniejących aplikacji , wybieramy „No” przy obu opcjach.

Tworzenie administratora:

Tworzenie programisty:

Tworzenie użytkownika końcowego:

Z listy dostępnej po kliknięciu trójkąta przy opcji „Workspace” wybieramy przestrzeń w której użytkownik ma zostać utworzony.

W dalszej kolejności wybieramy domyślny schemat dla tego użytkownika.

Na koniec klikamy „Create” aby utworzyć tego użytkownika.

Tworzenie aplikacji

Aby stworzyć aplikację, logujemy się do nowo stworzonego workspace jako administrator lub developer.

Podczas pierwszego logowania zostaniemy poproszeni o zmianę hasła. Na szczęście możemy ustawić takie samo jak dotychczasowe. Konieczność zmiany hasła przy pierwszym logowaniu jest opcją podczas tworzenia użytkownika (domyślnie wybraną).

Po zalogowaniu wybieramy „Application Builder”

Na razie mamy tylko jedną aplikację przykładową. Aby stworzyć własną, klikamy „Create” znajdujące się w prawym górnym rogu.

Nasza aplikacja będzie korzystała z tabel baz danych, więc spośród dostępnych opcji wybieramy „Database”.

W dalszym kroku wybieramy „From Scratch”

W kolejnym kroku musimy zrobić dwie rzeczy. Wybrać nazwę aplikacji (musi być unikalna w ramach przestrzeni roboczej), oraz domyślny schemat dla aplikacji. Aplikacja korzystając z bazy danych, będzie musiała robić to jako jakiś użytkownik bazodanowy. W tym kroku wybieramy spośród dostępnych dla danej przestrzeni roboczej. Wszystkie operacje na bazie będą wykonywane w kontekście tego użytkownika, i takie też będziemy mieli uprawnienia.

W następnym kroku dodajemy strony które mają się w aplikacji pojawić. To będzie tylko wstępny zestaw stron, potem można je edytować i dodawać nowe.

Dodamy sobie pustą stronę powitalną i dwa proste raporty. Wybieramy blank, ustalamy nazwę strony a następnie klikamy „add page”

Strona pusta pojawiła nam się już na liście, dodamy teraz prosty raport oparty o zawartość tabeli. Wybieramy spośród dostępnych opcji „Report”. W opcji „Table name” klikamy przycisk przy polu i wybieramy tabelę z której chcemy przeglądać dane w aplikacji. W opcji „Implementation” mamy do wyboru „Interactive” albo „Classic”. Wybieramy „Interactive”, ponieważ na naszej stronie z raportem zostanie automatycznie dodana wyszukiwarka, możliwość filtrowania , sortowania , eksportu do XLS, CSV oraz kilka innych ciekawych opcji.

Klikamy „Add page”.

Zbudujemy teraz stronę z raportem opartym o zapytanie SQL. Zaznaczamy „Report”, ale tym razem opcję „Page Source” zmieniamy na „SQL Query”.

Możemy od razu w oknie „Query” napisać zapytanie, jednak wygodniej jest najpierw napisać zapytanie jakimś edytorze SQL i po upewnieniu się że działa przenieść do APEXa.

Dodajemy tą stronę i przechodzimy do następnego kroku. Więcej stron dodamy nieco później.

W kolejnym kroku wybieramy rodzaj menu dla aplikacji. Zaznaczmy jeden poziom menu. Opcja z dwoma poziomami nie zawsze działa tak jak powinna...

Przechodzimy dalej. Tutaj wybieramy rodzaj autoryzacji dostępu do aplikacji. Mamy 3 opcje. Pierwsza (tą wybieramy) to dostęp dla użytkowników których utworzyliśmy na etapie tworzenia przestrzeni roboczej. Druga to pełen dostęp dla wszystkich (bez logowania), trzecie to dostęp w oparciu o użytkowników bazodanowych.

W dalszym kroku wybieramy wygląd aplikacji. Wybieramy ten który nam się najbardziej podoba :D

Na koniec pojawi nam się ekran podsumowania. Zatwierdzamy tworzenie aplikacji. W razie potrzeby cofamy się i zmieniamy parametry.

Dostaniemy potwierdzenie stworzenia aplikacji:

Nieco niżej będzie lista podstron w aplikacji.

Uruchamiamy aplikację poprzez naciśnięcie „Run Application”. Pojawi nam się ekran logowania do aplikacji

Logujemy się jako któryś z użytkowników stworzonych na etapie kreowania przestrzeni roboczej. Możemy się również zalogować jako administrator przestrzeni.

Po zalogowaniu pojawi nam się pierwsza stworzona strona – w tym przypadku nasza pusta strona powitalna:

W prawym górnym rogu znajdują się zakładki menu z naszymi postronami:

Wybrałem zakładkę z raportem na podstawie zawartości tabeli:

W związku z wyborem opcji „Interactive Report” mamy też dodane kilka ciekawych możliwości:

Przy każdym wierszu , mamy ikonkę widoku szczegółowego:

Po jej kliknięciu zobaczymy ekran z danymi z jednego wybranego wiersza.

Podstrona z raportem na podstawie zapytania SQL:

Dodawanie raportów

Aby dodać nową podstronę z raportem wybieramy „Create page”. Następnie wybieramy report:

Jeśli chcemy mieć w raporcie opcje filtrowania etc. zaznaczamy „Interactive Report”. W innym przypadku „Classic Report”.

W kolejnym kroku wybieramy nazwę podstrony:

Dalej nazwę pod jaką strona ma być dostępna z menu:

Podajemy zapytanie na podstawie którego ma zostać stworzony raport:

Strona podsumowania:

Uruchamiamy stronę porzez kliknięcie „Run page”

Nasza nowa podstrona prezentuje się tak:

Do menu została dodana nowa pozycja:

Edycja stron

Jeśli zechcemy zmienić stronę, np. zapytanie w raporcie, wybieramy „Application Builder”, wchodzimy do naszej aplikacji:

Z listy dostępnej po kliknięciu prawym przyciskiem myszy na wybranej podstronie wybieramy „Edit”.

Pojawi nam się ekran edycji strony:

Z menu dostępnego pod prawym przyciskiem myszy na podelemencie „Lista” (czy też jakkolwiek nazwaliśmy nasz raport) elementu „body” „Wybieramy „Edit”

Przechodzimy w ten sposób do podstrony gdzie mamy możliwość edycji parametrów podstrony m.in. zapytania :

Wykresy

Aby dodać stronę z wykresem klikamy „Create Page” i wybieramy opcję „Chart”.

W następnym kroku wybieramy rodzaj wykresu. Zaczniemy od najbardziej podstawowego wykresu HTML. Będzie to zwykły wykres słupkowy oparty o tabelkę HTML :) Plus jest taki, że nie będziemy wtedy potrzebowali wtyczki flash w przeglądarce, a ponadto taki wykres generuje się szybko. Zaznaczamy więc opcję „HTML Chart”.

W kolejnym kroku wybieramy nazwę strony:

Dalej projektujemy zapytanie na podstawie którego zostanie wygenerowany wykres:

Będziemy jednak musieli zapytanie nieco przerobić na potrzby wymagań Apexa. Zapytanie będzie musiało zwracać 3 kolumny. Pierwsza do link do strony na którą aplikacja ma przejść po kliknięciu słupka na wykresie, druga ma zawierać nagłówki (tytuły) dla słupków, trzecia to dane liczbowe na podstawie których będzie generowana wysokość słupków.

Przechodzimy dalej i zatwierdzamy stronę z podsumowaniem:

Uruchamiamy stronę:

Nasz wykres wygląda tak:

Stworzymy teraz słupkowy wykres flash. Takie wykresy mogą być np. trójwymiarowe, liniowe , wyglądają znacznie lepiej .Niestety wolniej się ładują niż wykresy HTML i wymagają wtyczki Flash w przeglądarce. Aby stworzyć stronę z takim wykresem, wybieramy „Create Page” i następnie „Chart” (tak jak wcześniej).

Tym razem jednak wybieramy opcję „Flash Chart”.

Mamy teraz do wyboru kilka wersji wykresów. Wybieramy kolumnowy:

Zaznaczamy „3D Column”. Generalnie wszystkie te wykresy działają tak samo, zapytania się nie różnią między różnymi wykresami. Różnica jest jedynie w sposobie prezentacji.

Wybieramy nazwę dla podstrony:

Nagłówek linka do tej podstrony w menu:

Tytuł wykresu:

Podajemy zapytanie źródłowe dla wykresu (może być to samo co wcześniej):

Zatwierdzamy podsumowanie

Po uruchomieniu podstrony będziemy musieli nieco poczekać na załadowanie wykresu, cóż taka cecha flasha :) Jeśli więc preferujemy szybki dostęp do informacji, wybieramy wykresy HTML.

Nasz nowy wykres wygląda już o wiele lepiej :

Stworzymy teraz wykres liniowy. Ponownie dodajemy nowa stronę i wybieramy opcję „Chart”

Znowu wybieramy wykres flashowy:

Jednak tym razem wybieramy wykres typu „Line”

W wersji 4.2 wykresów liniowych mamy jeden typ, toteż po długiej medytacji i rozpatrywaniu tej oszałamiającej listy możliwości spośród jednej opcji wybieramy tą jedną :)

Tradycyjnie wybieramy nazwę dla strony:

Nagłówek dla opcji w menu:

Nazwę wykresu:

 

Zapytanie źródłowe dla wykresu:

Efekt końcowy:

Wykorzystanie procedur PL/SQL

Z poziomu Apexa mamy też możliwość wywoływania procedur składowanych. Dzięki własnościom formularzy, możemy też do wywoływanych procedur przekazać parametry.

Tworzę przykładową procedurę składowaną z trzema parametrami:

Tworząc stronę wybieram formularz:

Tym razem wybieram „Form on a Procedure”

Wybieram schemat w którym znajduje się procedura którą chcę wywoływać:

Następnie procedurę:

Nazwę strony i etykiety na przyciskach zatwierdzenia i wycofania formularza:

Etykietę dla linka w menu:

Strony do których aplikacja ma przejść po zatwierdzeniu lub anulowaniu formularza:

Etykiety które pojawią się w formularzu dla parametrów procedury. Mogę również udostępnić tylko wybrane parametry. Ciekawą opcją jest „Display Type”. Daje nam możliwość wyboru typu pola.

Opcje:

  • Date Picker to mini kalendarz który umożliwi nam wygodne wprowadzanie dat

  • Display Only to parametr którego nie będziemy mogli zmieniać

  • Hidden to parametr ukryty. Nie będzie go widać w formularzu

  • Password to pole tekstowe którego treść zostanie przy wprowadzaniu „wykropkowana”

  • Tekstaera to duże pole tekstowe – np. do dodawania komentarzy czy opisów

Zatwierdzamy ekran podsumowania, lub wycofujemy się by dokonać niezbednych poprawek:

Poniżej efekt końcowy. Ponieważ do 2 parametrów wybrałem pole typu „Date Picker”, mam możliwość wyboru daty z wygodnego w użyciu kalendarza:

 

Elementy nawigacyjne – listy

Podczas tworzenia aplikacji dodawaliśmy kolejne podstrony i linki w menu do nich. Szczerze przyznam że nasze menu nie wygląda specjalnie estetycznie i dobrze byłoby to troszeczkę przerobić. Zrobimy sobie trzy zakładki:

  • strona startowa , gdzie będzie lista wszystkich dostępnych raportów i formularzy

  • raporty , gdzie będzie lista wyłącznie raportów

  • formularze , gdzie będzie wyłącznie lista formularzy.

Aby stworzyć listę wybieramy „Skared Components”:

Następnie element „lists”:

Naciskamy przycisk „Create” w prawym górnym rogu strony która nam się wyświetli:

Wybieramy sposób prezentacji naszej listy:

Pojawi nam się strona służąca wprowadzeniu pozycji listy. Po lewej wpisujemy etykiety elementów listy, po prawej wybieramy strony do których linki elementów listy mają kierować:

Zatwierdzamy stworzenie formularza:

Na liście elementów współdzielonych pojawi nam się nowo stworzona lista:

Chcemy teraz dodać tą listę do strony głównej, przechodzimy więc do edycji strony:

… gdzie dodaję nowy region do strony:

jako typ regionu wybieram „List”:

Wybieram nazwę dla regionu:

W kolejnym kroku wybieram listę którą chcę dopiąć do regionu:

Po zatwierdzeniu, na stronie edycji zobaczymy nowy region:

Efekt końcowy:

W podobny sposób utworzyłem sobie również listę dla formularzy i dodałem ją do strony powitalnej:

Wszystkie elementy „Shared Components” (w tym właśnie listy) mogą być wielokrotnie wykorzystywane na wielu stronach.

Zarządzanie menu

Chcemy nieco uporządkować interfejs programu. W poprzednim rozdziale stworzyliśmy już elementy współdzielone z listami, teraz pozmieniamy kilka pozycji w menu. Ponieważ chcieliśmy usunąć z menu nadmiar linków, a mieć tylko trzy, czyli „strona główna” , „raporty”, „formularze” przechodzimy do edycji menu.

Aby to zrobić , z sekcji „navigation” panelu „shared components” wybieramy link „tabs”:

Zobaczymy taki ekran:

Z prawego górnego rogu wybieramy przycisk „Manage Tabs”:

Przejdziemy tym sposobem do widoku edycji menu:

Klikamy a link z menu który chcemy edytować lub usunąć:

Naciskamy ikonę ołówka która się pojawi. Przejdziemy dzięki temu do ekranu edycji pozycji menu:

Z prawego górnego rogu wybieramy przycisk „Delete”:

Tym sposobem kasujemy kolejne pozycje z menu, aż zostaną nam tylko te które chcemy zostać. W tym przypadku będzie to tylko jeden link :(

Do aplikacji dodajemy pustą stronę , na której znajdzie się lista raportów:

Tym razem jednak wskazujemy by system nie dodawał linka do tej strony do menu:

Po ukończeniu tworzenia strony przechodzimy do jej edycji i dodajemy nowy region z listą (tak jak wcześniej):

Po dodaniu nowego regionu wracamy do widoku edycji strony. Z menu dostępnego po naciśnięciu prawym przyciskiem myszy na nazwie strony wybieramy „Edit”:

W tym widoku podpinamy istniejące menu do nowej strony:

Strona powstała i zawiera naszą listę z raportami:

W menu jest jak dotąd tylko jedna opcja:

Wracamy do edycji menu i klikamy link „Add” w celu dodania nowej pozycji do menu:

Podajemy etykietę dla linka w menu:

Oraz stronę do której link z menu ma kierować:

W kolejnym kroku wybieramy kolejność w której pozycja ma się pojawić w menu. Pozycje menu są sortowane wg wartości pola „Sequence”.

Nowa pozycja zostaje dodana do menu:

Po uruchomieniu aplikacji:

W ten sam sposób tworzę też drugą stronę, tym razem z formularzami i dodaję ją do menu.

Instalacja poprzez PL/SQL Gateway

Instalacja poprzez PL/SQL Gateway odbywa się już po stronie serwera bazodanowego. Nie potrzebujemy w tej instalacji serwerów aplikacji, apex zainstalowany w ten sposób podnosi się razem z instancją bazy danych. Niestety taka instalacja powoduje że wszystkie obciążenia wynikające z ruchu HTTP do i z aplikacji obciążają serwer bazy danych. Cała operacja przebiega z poziomu serwera na którym jest baza danych. Pobieramy najnowszego APEXa (na dzień 28-03-2013 był jest to APEX w wersji 4.2) i rozpakowujemy go na dysku. Następnie przechodzimy do tego rozpakowanego katalogu z poziomu linii poleceń.

Uruchamiamy skrypt apexins z poziomu SQL*Plusa jako użytkownik SYS. Istotne jest to, byśmy uprzednio przeszli w konsoli do katalogu w którym znajduje się rozpakowany APEX. Po nazwie skryptu podajemy jeszcze 4 parametry:

  1. Nazwa skryptu

  2. Tablespace w którym zostanie zainstalowany APEX.

  3. Tablespace w którym będą lądowały obrazki uploadowane przez użytkowników

  4. Nazwa tablespace tymczasowego który będzie wykorzystywany podczas instalacji

  5. Wirtualny katalog w którym przechowywane będą obrazki.

Podczas instalacji będą wprowadzane do bazy danych , niezbedne informacje. Sama instalacja może potrwać kilka – kilkadziesiąt minut.

Nawet jeśli skrypt chwilami „zawiśnie” , nie przejmujemy się. Na końcu powinniśmy dostać komunikat „Procedura PL/SQL została zakończona pomyślnie”, oraz powinno nas wylogować z SQL*PLusa.

Kolejnym krokiem będzie załadowanie obrazków z dysku do bazy danych. Logujemy się ponownie do SQLPLUSa (pozostając cały czas w katalogu w którym rozpakowaliśmy apexa). Następnie uruchamiamy skrypt apxldimg.sql z parametrem wskazującym na katalog znajdujący się piętro niżej w stosunku do katalogu w którym rozpakowany jest APEX. Jeśli np. na moim przykładzie rozpakowałem APEXA (wszystkie jego podkatalogi i pliki) do katalogu „c:\dane\apex „, to jako parametr podaję „c:\dane”. Ten element jest bardzo istotny dla powodzenia całej instalacji. Niestety jest słabo opisany w dokumentacji Oracle , a to doprowadza do błędów.

Po zatwierdzeniu powinniśmy zobaczyć jak Oracle tworzy sobie katalog wirtualny. Na końcu znajdzie się komunikat „Katalog został utworzony”. Jeśli dostaniesz jakikolwiek błąd, sprawdź dokładnie ścieżki. Jeśli to zignorujesz, to potem nie będziesz w stanie zalogować się do APEXA ( pomijając już fakt niewyświetlania przez niego żadnych obrazów). Apex już na etapie okna logowania korzysta z plików CSS które właśnie teraz są ładowane, a bez których formularz logowania po prostu nie działa.

Na koniec poinformuje nas o załadowaniu obrazów i wróci do konsoli SQL*Plusa:

Przyszedł czas na konfigurację portu na którym APEX ma być dostępny i hasła do Admina. Pozostając w katalogu w którym rozpakowaliśmy APEXa, uruchamiamy skrypt @apxconf Podajemy hasło do konta administratora APEXa. Może nam się pojawić komunikat o wymaganej złożoności hasła tak jak poniżej:

Zostaniemy wyrzuceni z SQL*Plusa, logujemy się więc ponownie i ponownie uruchamiamy skrypt. Podajemy hasło zgodne z wymaganiami. Akceptujemy domyślny port (8080) na którym ma być dostępny APEX, lub podajemy inny.

Musimy teraz odblokować następujących użytkowników:

-xdb

-apex_040200

-anonymous

Dodatkowo ustawiamy hasła dla użytkownika APEX_040200.

Zauważ że nazwa użytkownika APEX_040200 jest związana z wersją APEXa. Instaluję wersję 4.2 , dlatego mój użytkownik nazywa się APEX_040200 , w wersji 3.2 nazywał się APEX_030200.

Jeśli więc instalujesz inną wersję, zastosuj się do tej konwencji. Odblokowanie i ustawienie haseł użytkownikom należy wykonać jeszcze przed pierwszym logowaniem do APEXa. Jeśli tego nie wykonamy , lub zrobimy to źle nie będziemy mogli się zalogować do apexa mimo podania właściwego hasła, lub zobaczymy taki komunikat:

Czas na pierwsze logowanie do APEXa. Wchodzimy pod adres: http://localhost:8080/apex

Jeśli podczas instalacji podaliśmy inny port niż 8080, to podajemy go w miejsce 8080 w adresie.

Logujemy się jako użytkownik ADMIN i podajemy hasło które ustawiliśmy podczas uruchamiania skryptu apxconf.sql

Będziemy musieli zmienić hasło (na szczęscie da się je zmienić na takie samo ;) )

Zostaniemy poinformowani o zmianie hasła, klikamy przycisk „return”.

Zostaniemy ponownie przekierowani do ekranu logowania. Logujemy się do Workspace „INTERNAL” jako użytkownik „Admin” z tym dopiero co zmienionym hasłem.

Po zalogowaniu powinniśmy zobaczyć taki ekran:

Tworzenie przestrzeni roboczej

Aby móc tworzyć jakiekolwiek aplikacje, trzeba w pierwszej kolejności utworzyć przestrzeń roboczą w które się aplikacje znajdą. W ramach jednej przestrzeni roboczej możemy mieć wiele aplikacji. Użytkownicy utworzeni w ramach grupy roboczej będą wspólni dla wszystkich aplikacji w tej grupie.

Aby utworzyć grupę roboczą, po zalogowaniu się do grupy roboczej „INTERNAL” jako administrator , nacisnij „Create Workspace”

Wprowadź nazwę dla tej grupy roboczej:

Nasze aplikacje będą musiały się poruszać w jakimś kontekście – tj. jako jakiś użytkownik bazodanowy. Będziemy więc mieli możliwość dostępu do takich obiektów , do jakich dostęp ma ten użytkownik. Jeśli chcemy wykorzystać istniejące konto, w opcji „Re-use existing schema” wybieramy „YES”. Z rozwijalnej listy (przy „Schema name”) wybieramy domyślny schemat. Jeśli na potrzeby przestrzeni chcemy mieć zupełnie pusty, nowy schemat, wybieramy „No” w opcji „Re-use existing schema” i podajemy nazwę schematu który ma zostać utworzony, a także hasło do niego.

W dalszej kolejności podajemy nazwę i hasło administratora przestrzeni. Tworzymy w ten sposób użytkownika który będzie zarządzał całą przestrzenią roboczą i użytkownikami w niej.

Po naciśnięciu „Next” dostaniemy podsumowanie.

A po zatwierdzeniu podsumowanie.

Zarządzanie administratorami i użytkownikami w przestrzeni roboczej

Aby tworzyć lub zarządzać użytkownikami w przestrzeni roboczej, klikamy „Manage Workspaces”,

a następnie „ManageDevelopers and Users” z poziomu administratora instancji Apex. Użytkownikami i administratorami przestrzeni roboczej możemy też zarządzać jako administrator przestrzeni utworzony na etapie kreowania przestrzeni.

Zobaczymy listę istniejących użytkowników. Z tego poziomu możemy też edytować użytkowników.

Aby utworzyć użytkownika, klikamy „Create User” w prawym górnym rogu.

Wprowadzamy nazwę użytkownika, jego dane, hasło. Jeśli chcemy aby użytkownik był administratorem przestrzeni wybieramy „Yes” przy opcji „User is an administrator”. W takim przypadku, nowo utworzony użytkownik poza generowaniem aplikacji, będzie mógł tworzyć innych użytkowników. Jeśli ma to być programista, wybieramy „No” przy opcji „User is an administrator”, a przy opcji „User is a developer” wybieramy „Yes”. Jeśli ma to być użytkownik końcowy , który nie będzie mógł tworzyć użytkowników ani aplikacji , a jedynie będzie mógł korzystać z istniejących aplikacji , wybieramy „No” przy obu opcjach.

Tworzenie administratora:

Tworzenie programisty:

Tworzenie użytkownika końcowego:

Z listy dostępnej po kliknięciu trójkąta przy opcji „Workspace” wybieramy przestrzeń w której użytkownik ma zostać utworzony.

W dalszej kolejności wybieramy domyślny schemat dla tego użytkownika.

Na koniec klikamy „Create” aby utworzyć tego użytkownika.

Tworzenie aplikacji

Aby stworzyć aplikację, logujemy się do nowo stworzonego workspace jako administrator lub developer.

Podczas pierwszego logowania zostaniemy poproszeni o zmianę hasła. Na szczęście możemy ustawić takie samo jak dotychczasowe. Konieczność zmiany hasła przy pierwszym logowaniu jest opcją podczas tworzenia użytkownika (domyślnie wybraną).

Po zalogowaniu wybieramy „Application Builder”

Na razie mamy tylko jedną aplikację przykładową. Aby stworzyć własną, klikamy „Create” znajdujące się w prawym górnym rogu.

Nasza aplikacja będzie korzystała z tabel baz danych, więc spośród dostępnych opcji wybieramy „Database”.

W dalszym kroku wybieramy „From Scratch”

W kolejnym kroku musimy zrobić dwie rzeczy. Wybrać nazwę aplikacji (musi być unikalna w ramach przestrzeni roboczej), oraz domyślny schemat dla aplikacji. Aplikacja korzystając z bazy danych, będzie musiała robić to jako jakiś użytkownik bazodanowy. W tym kroku wybieramy spośród dostępnych dla danej przestrzeni roboczej. Wszystkie operacje na bazie będą wykonywane w kontekście tego użytkownika, i takie też będziemy mieli uprawnienia.

W następnym kroku dodajemy strony które mają się w aplikacji pojawić. To będzie tylko wstępny zestaw stron, potem można je edytować i dodawać nowe.

Dodamy sobie pustą stronę powitalną i dwa proste raporty. Wybieramy blank, ustalamy nazwę strony a następnie klikamy „add page”

Strona pusta pojawiła nam się już na liście, dodamy teraz prosty raport oparty o zawartość tabeli. Wybieramy spośród dostępnych opcji „Report”. W opcji „Table name” klikamy przycisk przy polu i wybieramy tabelę z której chcemy przeglądać dane w aplikacji. W opcji „Implementation” mamy do wyboru „Interactive” albo „Classic”. Wybieramy „Interactive”, ponieważ na naszej stronie z raportem zostanie automatycznie dodana wyszukiwarka, możliwość filtrowania , sortowania , eksportu do XLS, CSV oraz kilka innych ciekawych opcji.

Klikamy „Add page”.

Zbudujemy teraz stronę z raportem opartym o zapytanie SQL. Zaznaczamy „Report”, ale tym razem opcję „Page Source” zmieniamy na „SQL Query”.

Możemy od razu w oknie „Query” napisać zapytanie, jednak wygodniej jest najpierw napisać zapytanie jakimś edytorze SQL i po upewnieniu się że działa przenieść do APEXa.

Dodajemy tą stronę i przechodzimy do następnego kroku. Więcej stron dodamy nieco później.

W kolejnym kroku wybieramy rodzaj menu dla aplikacji. Zaznaczmy jeden poziom menu. Opcja z dwoma poziomami nie zawsze działa tak jak powinna...

Przechodzimy dalej. Tutaj wybieramy rodzaj autoryzacji dostępu do aplikacji. Mamy 3 opcje. Pierwsza (tą wybieramy) to dostęp dla użytkowników których utworzyliśmy na etapie tworzenia przestrzeni roboczej. Druga to pełen dostęp dla wszystkich (bez logowania), trzecie to dostęp w oparciu o użytkowników bazodanowych.

W dalszym kroku wybieramy wygląd aplikacji. Wybieramy ten który nam się najbardziej podoba :D

Na koniec pojawi nam się ekran podsumowania. Zatwierdzamy tworzenie aplikacji. W razie potrzeby cofamy się i zmieniamy parametry.

Dostaniemy potwierdzenie stworzenia aplikacji:

Nieco niżej będzie lista podstron w aplikacji.

Uruchamiamy aplikację poprzez naciśnięcie „Run Application”. Pojawi nam się ekran logowania do aplikacji

Logujemy się jako któryś z użytkowników stworzonych na etapie kreowania przestrzeni roboczej. Możemy się również zalogować jako administrator przestrzeni.

Po zalogowaniu pojawi nam się pierwsza stworzona strona – w tym przypadku nasza pusta strona powitalna:

W prawym górnym rogu znajdują się zakładki menu z naszymi postronami:

Wybrałem zakładkę z raportem na podstawie zawartości tabeli:

W związku z wyborem opcji „Interactive Report” mamy też dodane kilka ciekawych możliwości:

Przy każdym wierszu , mamy ikonkę widoku szczegółowego:

Po jej kliknięciu zobaczymy ekran z danymi z jednego wybranego wiersza.

Podstrona z raportem na podstawie zapytania SQL:

Dodawanie raportów

Aby dodać nową podstronę z raportem wybieramy „Create page”. Następnie wybieramy report:

Jeśli chcemy mieć w raporcie opcje filtrowania etc. zaznaczamy „Interactive Report”. W innym przypadku „Classic Report”.

W kolejnym kroku wybieramy nazwę podstrony:

Dalej nazwę pod jaką strona ma być dostępna z menu:

Podajemy zapytanie na podstawie którego ma zostać stworzony raport:

Strona podsumowania:

Uruchamiamy stronę porzez kliknięcie „Run page”

Nasza nowa podstrona prezentuje się tak:

Do menu została dodana nowa pozycja:

Edycja stron

Jeśli zechcemy zmienić stronę, np. zapytanie w raporcie, wybieramy „Application Builder”, wchodzimy do naszej aplikacji:

Z listy dostępnej po kliknięciu prawym przyciskiem myszy na wybranej podstronie wybieramy „Edit”.

Pojawi nam się ekran edycji strony:

Z menu dostępnego pod prawym przyciskiem myszy na podelemencie „Lista” (czy też jakkolwiek nazwaliśmy nasz raport) elementu „body” „Wybieramy „Edit”

Przechodzimy w ten sposób do podstrony gdzie mamy możliwość edycji parametrów podstrony m.in. zapytania :

Wykresy

Aby dodać stronę z wykresem klikamy „Create Page” i wybieramy opcję „Chart”.

W następnym kroku wybieramy rodzaj wykresu. Zaczniemy od najbardziej podstawowego wykresu HTML. Będzie to zwykły wykres słupkowy oparty o tabelkę HTML :) Plus jest taki, że nie będziemy wtedy potrzebowali wtyczki flash w przeglądarce, a ponadto taki wykres generuje się szybko. Zaznaczamy więc opcję „HTML Chart”.

W kolejnym kroku wybieramy nazwę strony:

Dalej projektujemy zapytanie na podstawie którego zostanie wygenerowany wykres:

Będziemy jednak musieli zapytanie nieco przerobić na potrzby wymagań Apexa. Zapytanie będzie musiało zwracać 3 kolumny. Pierwsza do link do strony na którą aplikacja ma przejść po kliknięciu słupka na wykresie, druga ma zawierać nagłówki (tytuły) dla słupków, trzecia to dane liczbowe na podstawie których będzie generowana wysokość słupków.

Przechodzimy dalej i zatwierdzamy stronę z podsumowaniem:

Uruchamiamy stronę:

Nasz wykres wygląda tak:

Stworzymy teraz słupkowy wykres flash. Takie wykresy mogą być np. trójwymiarowe, liniowe , wyglądają znacznie lepiej .Niestety wolniej się ładują niż wykresy HTML i wymagają wtyczki Flash w przeglądarce. Aby stworzyć stronę z takim wykresem, wybieramy „Create Page” i następnie „Chart” (tak jak wcześniej).

Tym razem jednak wybieramy opcję „Flash Chart”.

Mamy teraz do wyboru kilka wersji wykresów. Wybieramy kolumnowy:

Zaznaczamy „3D Column”. Generalnie wszystkie te wykresy działają tak samo, zapytania się nie różnią między różnymi wykresami. Różnica jest jedynie w sposobie prezentacji.

Wybieramy nazwę dla podstrony:

Nagłówek linka do tej podstrony w menu:

Tytuł wykresu:

Podajemy zapytanie źródłowe dla wykresu (może być to samo co wcześniej):

Zatwierdzamy podsumowanie

Po uruchomieniu podstrony będziemy musieli nieco poczekać na załadowanie wykresu, cóż taka cecha flasha :) Jeśli więc preferujemy szybki dostęp do informacji, wybieramy wykresy HTML.

Nasz nowy wykres wygląda już o wiele lepiej :

Stworzymy teraz wykres liniowy. Ponownie dodajemy nowa stronę i wybieramy opcję „Chart”

Znowu wybieramy wykres flashowy:

Jednak tym razem wybieramy wykres typu „Line”

W wersji 4.2 wykresów liniowych mamy jeden typ, toteż po długiej medytacji i rozpatrywaniu tej oszałamiającej listy możliwości spośród jednej opcji wybieramy tą jedną :)

Tradycyjnie wybieramy nazwę dla strony:

Nagłówek dla opcji w menu:

Nazwę wykresu:

 

Zapytanie źródłowe dla wykresu:

Efekt końcowy:

Wykorzystanie procedur PL/SQL

Z poziomu Apexa mamy też możliwość wywoływania procedur składowanych. Dzięki własnościom formularzy, możemy też do wywoływanych procedur przekazać parametry.

Tworzę przykładową procedurę składowaną z trzema parametrami:

Tworząc stronę wybieram formularz:

Tym razem wybieram „Form on a Procedure”

Wybieram schemat w którym znajduje się procedura którą chcę wywoływać:

Następnie procedurę:

Nazwę strony i etykiety na przyciskach zatwierdzenia i wycofania formularza:

Etykietę dla linka w menu:

Strony do których aplikacja ma przejść po zatwierdzeniu lub anulowaniu formularza:

Etykiety które pojawią się w formularzu dla parametrów procedury. Mogę również udostępnić tylko wybrane parametry. Ciekawą opcją jest „Display Type”. Daje nam możliwość wyboru typu pola.

Opcje:

  • Date Picker to mini kalendarz który umożliwi nam wygodne wprowadzanie dat

  • Display Only to parametr którego nie będziemy mogli zmieniać

  • Hidden to parametr ukryty. Nie będzie go widać w formularzu

  • Password to pole tekstowe którego treść zostanie przy wprowadzaniu „wykropkowana”

  • Tekstaera to duże pole tekstowe – np. do dodawania komentarzy czy opisów

Zatwierdzamy ekran podsumowania, lub wycofujemy się by dokonać niezbednych poprawek:

Poniżej efekt końcowy. Ponieważ do 2 parametrów wybrałem pole typu „Date Picker”, mam możliwość wyboru daty z wygodnego w użyciu kalendarza:

Elementy nawigacyjne – listy

Podczas tworzenia aplikacji dodawaliśmy kolejne podstrony i linki w menu do nich. Szczerze przyznam że nasze menu nie wygląda specjalnie estetycznie i dobrze byłoby to troszeczkę przerobić. Zrobimy sobie trzy zakładki:

  • strona startowa , gdzie będzie lista wszystkich dostępnych raportów i formularzy

  • raporty , gdzie będzie lista wyłącznie raportów

  • formularze , gdzie będzie wyłącznie lista formularzy.

Aby stworzyć listę wybieramy „Skared Components”:

Następnie element „lists”:

Naciskamy przycisk „Create” w prawym górnym rogu strony która nam się wyświetli:

Wybieramy sposób prezentacji naszej listy:

Pojawi nam się strona służąca wprowadzeniu pozycji listy. Po lewej wpisujemy etykiety elementów listy, po prawej wybieramy strony do których linki elementów listy mają kierować:

Zatwierdzamy stworzenie formularza:

Na liście elementów współdzielonych pojawi nam się nowo stworzona lista:

Chcemy teraz dodać tą listę do strony głównej, przechodzimy więc do edycji strony:

… gdzie dodaję nowy region do strony:

jako typ regionu wybieram „List”:

Wybieram nazwę dla regionu:

W kolejnym kroku wybieram listę którą chcę dopiąć do regionu:

Po zatwierdzeniu, na stronie edycji zobaczymy nowy region:

Efekt końcowy:

W podobny sposób utworzyłem sobie również listę dla formularzy i dodałem ją do strony powitalnej:

Wszystkie elementy „Shared Components” (w tym właśnie listy) mogą być wielokrotnie wykorzystywane na wielu stronach.

Zarządzanie menu

Chcemy nieco uporządkować interfejs programu. W poprzednim rozdziale stworzyliśmy już elementy współdzielone z listami, teraz pozmieniamy kilka pozycji w menu. Ponieważ chcieliśmy usunąć z menu nadmiar linków, a mieć tylko trzy, czyli „strona główna” , „raporty”, „formularze” przechodzimy do edycji menu.

Aby to zrobić , z sekcji „navigation” panelu „shared components” wybieramy link „tabs”:

Zobaczymy taki ekran:

Z prawego górnego rogu wybieramy przycisk „Manage Tabs”:

Przejdziemy tym sposobem do widoku edycji menu:

Klikamy a link z menu który chcemy edytować lub usunąć:

Naciskamy ikonę ołówka która się pojawi. Przejdziemy dzięki temu do ekranu edycji pozycji menu:

Z prawego górnego rogu wybieramy przycisk „Delete”:

Tym sposobem kasujemy kolejne pozycje z menu, aż zostaną nam tylko te które chcemy zostać. W tym przypadku będzie to tylko jeden link :(

Do aplikacji dodajemy pustą stronę , na której znajdzie się lista raportów:

Tym razem jednak wskazujemy by system nie dodawał linka do tej strony do menu:

Po ukończeniu tworzenia strony przechodzimy do jej edycji i dodajemy nowy region z listą (tak jak wcześniej):

Po dodaniu nowego regionu wracamy do widoku edycji strony. Z menu dostępnego po naciśnięciu prawym przyciskiem myszy na nazwie strony wybieramy „Edit”:

W tym widoku podpinamy istniejące menu do nowej strony:

Strona powstała i zawiera naszą listę z raportami:

W menu jest jak dotąd tylko jedna opcja:

Wracamy do edycji menu i klikamy link „Add” w celu dodania nowej pozycji do menu:

Podajemy etykietę dla linka w menu:

Oraz stronę do której link z menu ma kierować:

W kolejnym kroku wybieramy kolejność w której pozycja ma się pojawić w menu. Pozycje menu są sortowane wg wartości pola „Sequence”.

Nowa pozycja zostaje dodana do menu:

Po uruchomieniu aplikacji:

W ten sam sposób tworzę też drugą stronę, tym razem z formularzami i dodaję ją do menu.