Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

← Powrót do listy dostępnych walidatorów

 
 Jeśli masz problem ze zrozumieniem jak działa walidator, sprawdź opisy: Walidator, Wykonanie warunkowe, Parametry komponentów

Opis walidatora

Walidator tworzy zapytanie na podstawie podanych parametrów i sprawdza, czy zwróci ono wynik. W przypadku użycia zmiennych typu tablicowego zapytanie jest tworzone za pomocą podzapytań połączonych ze sobą dzięki użyciu UNION. W takich podzapytaniach nie należy stosować słówka ORDER BY.

Przykładowa konfiguracja

Parametry konfiguracyjne

Waliduj, gdy ( typ : wartość tekstowa do wyboru z listy ) - Określa w jaki sposób zachowa się walidator po znalezieniu wyników w bazie. Dostępne wartości to: Zwraca wynik / Nie zwraca wyniku

Baza danych ( typ : wartość tekstowa ) - Nazwa konfiguracji bazy danych.

Nazwa zapytania ( typ : zmienna ) - Nazwa (przedrostek z kolumny name z tabeli pm_dbqueries) na postawie której pobrane zostaną zapytania

Parametry zapytania (zmienne) ( typ : wartość logiczna ) - Przekazanie zmiennej tablicowej spowoduje, że dla każdego jej elementu zostanie utworzone podzapytanie. W przypadku przekazania zmiennej nagłówkowej parametr jest traktowany jak wartość stała.

Parametry zapytania (wartości stałe) ( typ : wartość tekstowa ) - Wartości powtarzające się w każdym wygenerowanym podzapytaniu. Przekazywane jako tekst (przydatna funkcja: toString)

Typy wartości stałych ( typ : wartość tekstowa ) - Typy parametrów zapytania z bazy danych

Typ komunikatu ( typ : wartość tekstowa ) - Lista wyboru konfiguracji pojawienia się komunikatu. Możemy wybrać komunikat globalny oraz/lub pod podanymi zmiennymi

Potwierdzenie ( typ : wartość tekstowa ) - Informuje o tym, czy wyświetlić okienko potwierdzenia.

Komunikat globalny ( typ : wartość tekstowa ) - Komunikat globalny

Zmienne formularza ( typ : wartość tekstowa ) - Zmienna, obok której będzie wyświetlony komunikat

Komunikat obok zmiennej ( typ : wartość tekstowa ) - Treść komunikatu błędu, który pojawi się przy wybranej zmiennej formularza

Przykłady zastosowań

 Przykład 1. Sprawdzanie duplikatu faktury

Załóżmy, że chcemy sprawdzić w bazie danych, czy faktury, które mamy na formularzu znajdują się już w bazie. Jeżeli tak, to system powinien wyświetlić komunikat o istniejącym duplikacie.

Pierwszym etapem będzie otwarcie konfiguracji naszego walidatora. Dodajemy go do interesującego nas przycisku akceptacji, po czym pojawia się okienko:

Nasz walidator powinien prawidłowo przechodzić, jeżeli w bazie nie zostanie znaleziona faktura o podanym przez nas numerze. Dlatego pierwszy parametr ustawiamy w sposób następujący:

W następnym parametrze, baza danych, wybieramy alias bazy z dbExplorer do której wykonamy nasze zapytanie. W moim przypadku alias nosi nazwę Suncode.

Klucz zapytania jest powiązany z tabelą pm_dbqueries w systemowej bazie danych. To właśnie w tej tabeli określamy nasze zapytanie. W moim przypadku wyglądało to tak:

Dlatego w parametrze "Klucz zapytania" wpisałem:

Następnie należy w parametrze przekazać wartości id wszystkich faktur, które mam w tabeli dynamicznej na formularzu. U mnie znajdują się one w kolumnie o nazwie "Id faktury"

Dlatego przekazuję tę zmienną w odpowiednim parametrze konfiguracji.

Następnie określam w jaki sposób chcę, żeby walidator powiadamiał mnie o nieudanej walidacji:

Działanie komponentu:

W bazie danych znajdują się już faktury o id 1, 3 i 5. Walidator wyświetla błąd walidacji:

A następnie podkreśla wszystkie problematyczne komórki

Po najechaniu na komórkę pojawia się informacja, którą podaliśmy w parametrze:

 Przykład 2. Sprawdzenie kolumny z występującymi pustymi wartościami

Czasami potrzebujemy sprawdzić, czy pusta wartość w tabeli dynamicznej odpowiada pustej wartości w bazie danych. W takim przypadku zapytanie dla wiersza wypełnionego zawierałoby frazę: "nazwa_kolumny = ?", natomiast dla wiersza pustego: "nazwa_kolumny IS NULL". Istnieje jednak sposób, żeby połączyć oba przypadki tak, żeby dało się je wykorzystać w komponencie jako jedno zapytanie.

W tym celu skorzystamy z funkcji COALESCE. Przeszukuje ona podane parametry w poszukiwaniu pierwszej nie pustej wartości.

Załóżmy, że mamy takie zapytanie:

SELECT * FROM pm_faktury WHERE id = ? AND nazwa_klienta = ? AND data_wystawienia = ?

, gdzie id to kolumna typu całkowitego, nazwa_klienta typu tekstowego, a data_wystawienia to kolumna datowa.

Jeżeli chcemy poprawnie porównać puste wartości z tabeli dynamicznej z pustymi wartościami w bazie danych musimy użyć przekształcić zapytanie następująco:

SELECT * FROM pm_faktury WHERE COALESCE(id,-1) = COALESCE(?, -1) AND COALESCE(nazwa_klienta, '') = COALESCE(?,'') AND COALESCE(data_wystawienia, to_date('1991-01-01', 'YYYY-MM-DD')) = COALESCE(?, to_date('1991-01-01', 'YYYY-MM-DD'))

Należy zauważyć, że drugi argument funkcji COALESCE powinien zawierać wartość takiego samego typu jak kolumna oraz powinna być to wartość, która w wyniku prawidłowego działania nie ma możliwości pojawienia się w kolumnie (np. id nigdy nie będzie mniejsze od 0, bo takie są założenia).

Mapa z przykładową konfiguracją

Testy komponentów - walidatory.zip

 

The license could not be verified: License Certificate has expired!

  • No labels