poniedziałek, 20 stycznia 2014

Jak przygotować link w Oracle APEX (cz. 2)

W drugie części cyklu o linkach w APEX zajmę się linkami wewnętrznymi. Linki te w odróżnieniu od linków zewnętrznych o których pisałem poprzednio muszą zawierać informację o sesji oraz mogą posiadać dodatkowe elementy zabezpieczające.



O ile przy linkach zewnętrznych ważna jest domena/port itd to w tym przypadku nie ma to znaczenia ponieważ link wewnątrz aplikacji jest relatywny czyli zaczyna się np tak: f?p=FORUM:REG:768326323876.
W zależności od potrzeb możemy dynamicznie generować prawidłowe adresy url wewnątrz aplikacji APEX.
Chcąc stworzyć prawidłowy link możemy posłużyć się następującym przykładem raportu którego jedna z kolumn będzie linkiem.

-- Kod zadziała tylko uruchomiony w aplikacji APEX !

SELECT 'KOL1' AS KOL1,

  HTF.ANCHOR(
              APEX_UTIL.PREPARE_URL( 'f?p='
              ||:APP_ALIAS
              ||':1:'
              ||:APP_SESSION
              ||'::::P1_JAKIS_ITEM:test', 'UTF-8','SESSION'
                                    )
              ,'kliknij'
            )
              AS KOL2
FROM dual;


Niniejszy przykład zawiera kilka ciekawych elementów. Pierwszy element to funkcja HTF.ANCHOR jej zadaniem jest wygenerowanie kodu HTML który stworzy link czyli mniej więcej coś takiego:


<a href="jakis_plik?z_jakimis_parametrami">kliknij</a>

Pewnie niektórzy spytają sie po co to, jeżeli można samemu wymalować kod html i skonkatenować ze zmiennymi. "Nie idźcie tą drogą......" Nie mieszaj SQL-a z HTML-em przynajmniej na tyle na ile to się da.
Druga interesująca funkjca to APEX_UTIL.PREPARE_URL, której zadaniem jest wygenerowanie linka z sumą kontrolna lub bez. W efekcie możemy otrzymać taki odnośnik:

f?p=DBE:HOME:16715365127241::::P1_JAKIS_ITEM:test&cs=301BA4BA0B03D15056DAD7

To czy suma zostanie utworzona czy nie zależy od tego czy link będzie przekazywał jakąś wartość do ITEMA, który ma włączone zabezpieczenie Session State Protection
Jeżeli zabezpieczenie jest włączone to link będzie zawierał dodatkowy parametr cs (jak powyżej) z przypisaną suma kontrolną jeżeli nie to cs nie zostanie dodany.
Następnymi elementami, na które warto zwrócić uwagę to zmienne :APP_ALIAS oraz :APP_SESSION
pierwsza zmienna zawierać będzie alias aplikacji natomiast druga numer aktywnej sesji. Warto zwrócić uwagę iż w przykładzie użyłem APP_SESSION a nie samo SESSION. Mimo, iż prawdopodobnie zadziałało by jedno i drugie to polecam używanie tej pierwszej. Słowo session jest słowem zastrzeżonym Oracle więc w niektórych przypadkach może wystąpić problem.

Brak komentarzy:

Prześlij komentarz