Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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

Kategoria : Baza danych

Dostępny od wersji: 1.0.41

Panel
titleOpis

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.

Panel
titleParametry konfiguracyjne

 

Waliduj, gdy ( typ : wartość tekstowa do wyboru z listy ) -
Nazwa parametruOpisTyp parametruWartość domyślnaRodzaj polaUwagi i ograniczenia
Akceptuj, gdy*Określa w jaki sposób zachowa się walidator po znalezieniu wyników w bazie. Tekst Lista wartościDostępne wartości to: Zwraca wynik / Nie zwraca wyniku
Baza
danych ( typ : wartość tekstowa ) - Nazwa
danych*Nazwa konfiguracji bazy danych
.Nazwa zapytania ( typ : zmienna ) - Nazwa (
Tekst Lista wartości

 

Nazwa zapytania*Nazwa (przedrostek z kolumny name z tabeli pm_dbqueries) na postawie której pobrane zostaną zapytaniaTekst Pole edytowalne 
Parametry zapytania (zmienne)
 ( typ : wartość logiczna ) - Przekazanie
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.Tablica zmiennych Edytowalna lista wartości 
Parametry zapytania (wartości stałe)
 ( typ : wartość tekstowa ) - Wartości
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
Tablica wartości tekstowych Pole edytowalne 
Typy wartości stałychTypy parametrów zapytania z bazy danych
Typ komunikatu ( typ : wartość tekstowa ) - Lista
Tekst Lista wartości 
Typ komunikatuLista wyboru konfiguracji pojawienia się komunikatu. Możemy wybrać komunikat globalny oraz/lub pod podanymi zmiennymi
Potwierdzenie ( typ : wartość tekstowa ) - Informuje
LogicznyTakPole edytowalne 
PotwierdzenieInformuje o tym, czy wyświetlić okienko potwierdzenia.

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

Zmienne formularza ( typ : wartość tekstowa ) - Zmienna
Logiczny Pole edytowalne 
Komunikat globalnyKomunikat globalnyTekst Pole edytowalne 
Zmienne formularzaZmienna, obok której będzie wyświetlony komunikat
Komunikat obok zmiennej ( typ : wartość tekstowa ) - Treść
Tablica zmiennych Pole edytowalne 
Komunikat obok zmiennejTreść komunikatu błędu, który pojawi się przy wybranej zmiennej formularzaTekst Pole edytowalne 
Panel
titlePrzykładowa konfiguracja

 

Panel
titlePrzykład zastosowania

Przykłady zastosowań

Expand
titlePrzykł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:

Expand
titlePrzykł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:

Code Block
languagesql
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:

Code Block
languagesql
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).

Panel
titleChange log

1.0.41

  • Dodanie komponentu

1.0.64

  • Nowa obsługa bazy danych

1.0.67

  • Zmiana parametru "Waliduj, gdy")

Hide If
special@anonymous

Powiązane zadania

JIRA
server192.168.1.52 JIRA
serverId2e6b42a8-62e1-3c71-bfe9-dbf183b33dc1
keyCUFCMP-344

JIRA
server192.168.1.52 JIRA
serverId2e6b42a8-62e1-3c71-bfe9-dbf183b33dc1
keyCUFCMP-556

JIRA
server192.168.1.52 JIRA
serverId2e6b42a8-62e1-3c71-bfe9-dbf183b33dc1
keyCUFCMP-576