Transakcja tworzy hierarchiczną listę wyboru pozycji na zasadzie rozwijanego „drzewka” wyświetlane jest po lewej stronie ekranu, wybór pozycji z drzewka uruchamia wskazaną transakcję i wyświetla ją z prawej strony okna.
Elastyczność transakcji wynika z faktu że „drzewko” może być zbudowane z dowolnego prawidłowego zapytania SQL zwracającego dane na zasadzie hierachicznej, czyli poszczególne rekordy mają odwołanie do rekordu nadrzędnego.
Domyślnie dane hierarchiczne odczytywane są z tabeli knfld, do przechowywania struktury folderów.
Uruchamianie
Transakcję uruchamia się podając parametr kod wskazujący na unikalny identyfikator skorowidza DRZ, który zawiera zapytanie do wykonania.
przykład:
roles_sys/x_tree.aspx?kod=PUBLIC
gdzie PUBLIC oznacza pozycję ze skorowidza DRZ
Skorowidz zdefiniowaną jedną pozycję o kodzie PUBLIC
gdzie zdefiniowane muszą być 2 zapytania SQL:
- Zapytanie SQL PARENT – dotyczy pozycji dodawanych do drzewka składających się na poszczególne poziomy
- Zapytanie SQL ROOT – dotyczy pozycji jakie mają być załadowane na start jako główne pozycje drzewa
Zapytanie ROOT zwraca wiersze oznaczone parent jako 0 – brak określonego poziomu nadrzędnego.
SELECT [FOLDER], [NRIDFLD], IKONA FROM [knfld] WHERE [PARENT]=0
Zapytanie PARENT zwraca pozostałe rekordy mające być pochodnymi poziomu root – posiadają przypisany poziom nadrzędny
SELECT [FOLDER], [NRIDFLD], [ACH], [PARENT], [IKONA], TRANSAKCJA + ’?refno=’ + UPPER(NRIDFLD) AS TARGETURL FROM [knfld] WHERE [PARENT]>0
W efekcie budowane jest drzewko, gdzie pozycje zapytania ROOT są ładowane automatycznie, natomiast pozycje z zapytanie PARENT są pobierane tylko na wyraźne życzenie użytkownika, gdy klika on ikonę rozwinięcia pozycji drzewa.
Zapytanie ROOT
Zapytanie musi zwracać dane z kolumnami:
- FOLDER – nazwa pozycji w drzewku wyświetlana dla użytkownika
- NRIDFLD – unikalny identyfikator pozycji drzewka
- IKONA – opcjonalny parametr pozwalający wskazać inny niż domyślny plik ikony. Jeżeli nie będzie tej kolumny to ładowany jest plik domyślny, jeżeli jest podana i wartość jest > 0 to ustawiony zostanie wskazany plik.
Zapytanie PARENT
Zapytanie musi zwracać dane z kolumnami:
- FOLDER – nazwa pozycji w drzewku wyświetlana dla użytkownika
- NRIDFLD – unikalny identyfikator pozycji drzewka
- ACH – kod oznaczający status pozycji, domyślnie 1
- PARENT – wskazanie identyfikatora pozycji nadrzędnej – odwołanie do identyfikatora NRIDFLD
- IKONA – wskazuje jaki plik ikony ma być użyty dla danej pozycji, brak ikony zostanie podstawiona domyślna ikona w zależności od wartości ACH
- TARGETURL – kolumna wskazuje jaka transakcja ma być uruchomiona gdy użytkownik kliknie muszką w pozycję menu drzewko.
Szerokość
Panel zawierający drzewko domyślnie ma rozmiar 30% szerokości ekranu użytkownika, można jednak zmienić ustawienie szerokości lewego panelu z drzewkiem podając parametr przy uruchamianiu transakcji leftwidth
np. KOD=PUBLIC&leftwidth=200
oznacza że lewa część okna będzie szerokości 200 pikseli
jeżeli podamy inną wartość zmiennej leftwidth to zmienimy szerokość lewego panelu, np. leftwidth=400
Rozmiar czcionki
Jeżeli chcemy, aby informacje wyświetlane w drzewku były w innym rozmiarze czcionki niż domyślny to należy przekazać parametr fontsize
przykładowo:
KOD=PUBLIC&fontsize=14
KOD=PUBLIC&fontsize=8
Zmienne warunku filtrowania
@KTO – zalogowany użytkownik
Zapytanie PARENT pobierające dane z bazy możemy filtrować wg nazwy zalogowanego użytkownika, aby ograniczyć listę folderów tylko do tych, które są przypisanego do zalogowanej osoby.
W zapytaniu w klauzuli filtrowania WHERE należy użyć zmiennej @KTO, np.
SELECT [FOLDER], [NRIDFLD], [ACH], [PARENT], [IKONA], TRANSAKCJA + ’?refno=’ + UPPER(NRIDFLD) AS TARGETURL FROM [knfld] WHERE LOGIN=@KTO AND [PARENT]>0
Zmienna @KTO zostanie zastąpiona nazwą zalogowanego użytkownika programu.
@ROLA – kod roli w jakiej pracuje użytkownika
zasada działania podobna do filtrowania wg nazwy użytkownika, zmienna podstawiana jest wartością w zależności od zalogowanego użytkownika
SELECT [FOLDER], [NRIDFLD], [ACH], [PARENT], [IKONA], TRANSAKCJA + ’?refno=’ + UPPER(NRIDFLD) AS TARGETURL FROM [knfld] WHERE ROLA=@ROLA AND [PARENT]>0
Wyświetlone zostaną pozycje przypisane do roli w jakiej pracuje użytkownik
@ROLASYS – kod roli systemowej w jakiej pracuje użytkownika
zasada działania podobna do filtrowania wg nazwy użytkownika, zmienna podstawiana jest wartością w zależności od zalogowanego użytkownika
SELECT [FOLDER], [NRIDFLD], [ACH], [PARENT], [IKONA], TRANSAKCJA + ’?refno=’ + UPPER(NRIDFLD) AS TARGETURL FROM [knfld] WHERE ROLASYS=@ROLASYS AND [PARENT]>0
Wyświetlone zostaną pozycje przypisane do roli w jakiej pracuje użytkownik
@ODDZIAL – kod oddziału użytkownika
zasada działania podobna do filtrowania wg nazwy użytkownika, zmienna podstawiana jest wartością w zależności od zalogowanego użytkownika
SELECT [FOLDER], [NRIDFLD], [ACH], [PARENT], [IKONA], TRANSAKCJA + ’?refno=’ + UPPER(NRIDFLD) AS TARGETURL FROM [knfld] WHERE ODDZIAL=@ODDZIAL AND [PARENT]>0
@MPK – kod komórki użytkownika
zasada działania podobna do filtrowania wg nazwy użytkownika, zmienna podstawiana jest wartością w zależności od zalogowanego użytkownika
SELECT [FOLDER], [NRIDFLD], [ACH], [PARENT], [IKONA], TRANSAKCJA + ’?refno=’ + UPPER(NRIDFLD) AS TARGETURL FROM [knfld] WHERE MPK=@MPK AND [PARENT]>0
Wyświetlone zostaną pozycje przypisane do oddziału w jakim pracuje użytkownik