# 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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.eximee.com/budowanie-aplikacji/interfejs-uzytkownika/formularze/praca-z-komponentami-bazowymi/walidacja-wartosci-komponentow/walidacje-zlozone-wlasne.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
