# Walidacje złożone (własne)

Walidacje złożone wymagające implementacji algorytmu, implementowane są przez programistów i dołączane do biblioteki walidatorów znajdującej się w **Eximee Validation**. W przypadku gdy walidacja ma się odbywać poprzez usługi zewnętrzne (np. szyna ESB), konieczne jest użycie **Service Proxy** w celu udostępnienia danej usługi.

Jeśli walidacje nie wymagają połączenia z usługami zewnętrznymi, można skorzystać z lekkich walidatorów skryptowych (więcej w: [Walidatory skryptowe (validationScript)](https://docs.eximee.com/budowanie-aplikacji/logika-biznesowa/scriptcode/walidatory-skryptowe-validationscript)). Walidatory złożone można stosować dla pól wniosku, stron lub komponentów złożonych (wykorzystywanych później na wniosku).

### Walidacje złożone dla komponentów <a href="#walidacjezlozone-walidacjezlozonedlakomponentow" id="walidacjezlozone-walidacjezlozonedlakomponentow"></a>

Poza wymagalnością i maską, do komponentów można dodawać również specjalizowane walidatory zewnętrzne.

#### **Podpięcie walidatora**

Aby podpiąć walidator, należy wejść w tryb edycji artefaktu i wybrać dowolny komponent mający możliwość podpięcia walidatora. Następnie należy kliknąć sekcję **Jakość danych** w menu właściwości komponentu. Po rozwinięciu sekcji zobaczymy podsekcję **WALIDATORY**.

<figure><img src="https://1082717226-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2F4MeP4CH1Q60LJ5wqoSRv%2Fimage.png?alt=media&#x26;token=060b9cc0-e3da-411d-b2c5-50b306e6e933" alt=""><figcaption><p><em>Ilustracja 1. Sekcja "Jakość danych" z podsekcją WALIDATORY</em></p></figcaption></figure>

Po kliknięciu na **WALIDATORY** lub ikonę ołówka, wysunięte zostanie okno walidatorów.

<figure><img src="https://1082717226-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2FAJf0ZQCKd5wMJbUMORhb%2Fimage.png?alt=media&#x26;token=05cc4bbd-f633-4f40-a257-f679486ca5ad" alt=""><figcaption><p align="center"><em><strong>Ilustracja 2.</strong> Okno walidatorów</em></p></figcaption></figure>

Po wybraniu opcji **Wybierz walidator** będziemy mogli wyszukać oraz wybrać dany walidator. Na liście zawarte są standardowe walidatory oraz walidatory skryptowe. Dla walidatora można zdefiniować warunek wywołania (pole **Dodaj warunek**). Jest to warunek JavaScriptowy, w którym można użyć pól lub zmiennych sesyjnych dostępnych na wniosku. Sposób tworzenia warunków został opisany w [Język wyrażeń definiowania warunków (warunki z getValue)](https://docs.eximee.com/budowanie-aplikacji/logika-biznesowa/jezyk-wyrazen-definiowania-warunkow-warunki-z-getvalue).

<figure><img src="https://1082717226-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2FMt2dU5eHcbatbpLg0gVO%2Fimage.png?alt=media&#x26;token=3eef22d1-7b90-410c-933b-51cd5f46a4e2" alt=""><figcaption><p align="center"><em><strong>Ilustracja 3.</strong> Dodanie walidatora</em></p></figcaption></figure>

#### **Symulacja**

Walidatory, tak samo jak w przypadku usług zewnętrznych, wspierają możliwość zastąpienia ich działania skryptem symulacyjnym. Podpinanie takiego skryptu wymaga wybrania w oknie walidatorów zakładki **Symulacja** oraz wybrania z listy dostępnego skryptu symulacyjnego.

<figure><img src="https://1082717226-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2FjXNOLjYwgFvYvoHn21dS%2Fimage.png?alt=media&#x26;token=2f2421e6-bb34-46f8-8829-690d02e895b3" alt=""><figcaption><p align="center"><em><strong>Ilustracja 4.</strong> Zakładka podpięcia skryptu symulacyjnego</em></p></figcaption></figure>

Z tego poziomu możemy również zdecydować się na utworzenie nowego skryptu klikając przycisk **Generuj nowy skrypt**. Nowo utworzony skrypt będzie miał automatycznie wygenerowaną treść zgodną z walidatorem oraz opisanymi wydzielonymi sekcjami kodu.

<figure><img src="https://1082717226-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2FPMolqKwvibDyEdSBXeVg%2Fimage.png?alt=media&#x26;token=c99d1913-5b6c-4ef6-8ae4-b2818c5c93f0" alt=""><figcaption><p align="center"><em><strong>Ilustracja 5.</strong> Tworzenie skryptu symulacyjnego</em></p></figcaption></figure>

Należy pamiętać, że takie skrypty zostaną uruchomione **jedynie** w przypadku wejścia na wniosek z **włączonym** trybem symulacji logiki wniosku!

### Walidacje złożone na stronie <a href="#walidacjezlozone-walidacjezlozonenastronie" id="walidacjezlozone-walidacjezlozonenastronie"></a>

#### **Dodanie walidatorów na stronie**

Walidatory można dodawać również na stronie:

* Jeżeli strona nasłuchuje na pola, które przekazujemy do walidatora, walidator jest wołany przy zmianie pola, na które strona nasłuchuje.
* Jeżeli strona nie będzie nasłuchiwać na pola, walidator zostanie wywołany dopiero po kliknięciu przycisku **Dalej/Wyślij.**\ <br>

<figure><img src="https://1082717226-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2FSYWXG5hO5TQ76zuSKSVz%2Fimage.png?alt=media&#x26;token=d3fb8a8c-072e-4231-b4d1-1fc9140cd92b" alt=""><figcaption><p align="center"><em><strong>Ilustracja 6.</strong> Panel właściwości z dodanymi dwoma walidatorami dla strony Page1</em></p></figcaption></figure>

#### **Dodanie** **walidatorów na komponencie złożonym**

Istnieje możliwość dodania walidatorów na komponencie złożonym. Będą one działały tak, jakby były dodane na stronie, na której znajduje się komponent złożony.

### Dodanie tłumaczeń komunikatów walidacji <a href="#walidacjezlozone-dodanietlumaczenkomunikatowwalidacji" id="walidacjezlozone-dodanietlumaczenkomunikatowwalidacji"></a>

Każdy walidator zwraca komunikat walidacyjny. Treść komunikatu może być już przetłumaczona na język polski lub może być w innym języku. Po podpięciu walidatora należ przejść do zakładki **Tłumaczenia** i wyszukać właściwy klucz błędu w celu zmiany tłumaczenia.

Jeśli komunikat walidatora zawiera parametry, to w tłumaczeniu należy je także umieścić w odpowiednim miejscu.

<figure><img src="https://1082717226-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2FLmk7usP2YfqKynsFaF3k%2Fimage.png?alt=media&#x26;token=922b77bc-3ec6-4818-9cc3-bfb1f2d70e31" alt=""><figcaption><p align="center"><em><strong>Ilustracja 7.</strong> Przykład tłumaczeń komunikatu dla walidatora z przekazywaniem parametrów</em></p></figcaption></figure>

{% hint style="info" %}
Więcej informacji w [Tworzenie walidatorów](https://docs.eximee.com/budowanie-aplikacji/logika-biznesowa/scriptcode/walidatory-skryptowe-validationscript/tworzenie-i-podpiecie-walidatorow-skryptowych).
{% endhint %}
