> For the complete documentation index, see [llms.txt](https://docs.eximee.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.eximee.com/budowanie-aplikacji/logika-biznesowa/scriptcode/walidatory-skryptowe-validationscript/api-walidatorow-skryptowych.md).

# API Walidatorów skryptowych

## Przykładowy kod walidatora <a href="#walidatoryskryptowe-validationscript-przykladowykodwalidatora" id="walidatoryskryptowe-validationscript-przykladowykodwalidatora"></a>

Poniżej znajduje się przykładowy kod, który pokazuje w jaki sposób można korzystać z wejścia oraz jak należy zwrócić dane:

```javascript
function callService(context) {
    let input1 = context.getFirstParameter("input1");
    if (input1 === "api") {
        return [{
                'key': 'pl.error',
                'parameters': [input1, "parametr {0} jest błędny"]
            }
            ];
    } else if (input1 != null && input1 !== "") {
        return [{
                'key': 'pl.error',
                'parameters': [input1, "inny hardcode parameter"]
            }];
    } else {
        return [];
    }
}
```

## Wejście do walidatora skryptowego <a href="#walidatoryskryptowe-validationscript-wejsciedowalidatoraskryptowego" id="walidatoryskryptowe-validationscript-wejsciedowalidatoraskryptowego"></a>

Jako wejście (parametr *context* w powyższym kodzie) znajduje się obiekt, który udostępnia następujące metody:

* List\<String> **getParameters**(final String name) - pobiera konkretną listę z mapy danych wejściowych,
* String **getFirstParameter**(final String name) - pobiera pierwszy element z konkretnej listy z mapy danych wejściowych lub zwraca wartość "null",
* String **getFirstParameter**(final String name, final String defaultIfEmpty) - pobiera pierwszy element z konkretnej listy z mapy danych wejściowych, a jeśli go nie ma lub jest pusty to zwraca wartość "defaultIfEmpty",
* Map\<String, List\<String>> **getInputParameters**() - zwraca całą mapę danych wejściowych, którą przechowuje,
* String **isVisible**(final String id) - pobiera informację, czy komponent o wskazanym id jest widoczny,
* String **getValue**(final String id) - pobiera wartość komponentu (również zmiennej sesyjnej) o wskazanym id,
* String **getData**(final String id, final String attribute) - pobiera wartość konkretnego atrybutu dla komponentu o wskazanym id (**UWAGA!** Możliwe do pobrania atrybuty są zależne od komponentu),
* List\<Map\<String, String>> **callService**(String name, Map\<String, List\<String>> input) - umożliwia wołanie ServiceProxy,
* ValidatorOutput **validate**(String name, Map\<String, List\<String>> input) - umożliwia wołanie walidatora,

Przykład pobrania listy (np. dla pól w sekcji powtarzalnej):

```javascript
function callService(context) {
    let inputFromRepeatableSection = context.getParameters("inputFromRepeatableSection").toArray();
}
```

## Wyjście z walidatora <a href="#walidatoryskryptowe-validationscript-wyjsciezwalidatora" id="walidatoryskryptowe-validationscript-wyjsciezwalidatora"></a>

1. **Lista map:** tablica obiektów zawierających pola "key" oraz "parameters".
2. Opcjonalne pola:
   1. type - typ walidatora domyślnie ustawiony jest INLINE, inna opcja to POPUP,
   2. parameters - zmienne które możemy wysłać do komunikatu walidacyjnego skryptu
   3. attributes -\
      np. atrybuty POPUPa dodający przycisk 'dalej' oraz zmieniający np. wartość komponentu po naciśnięciu 'dalej':

```javascript
return [{
          'key': 'pl.errorPopup',
          'parameters': [input, 'Podana wartość jest błędna'],
          'type': 'POPUP',
          'attributes': {
              'componentUpdateId': componentID,
              'componentUpdateValue':'ziemniak'
          }
      }];
```

np. atrybuty dla walidacji wiersza GesTable:

Przykładowa walidacja typu INLINE - wiersze GesTable

```javascript
return [{
          'key': 'pl.errorGesTable',
          'parameters': [input, 'Podana wartość jest błędna'],
          'type': 'INLINE',
          'attributes': {
              'colName': 'nazwaKolumny',
              'rowId':id
          }
      }];
```

## Logowanie <a href="#walidatoryskryptowe-validationscript-logowanielogowanie" id="walidatoryskryptowe-validationscript-logowanielogowanie"></a>

Logowanie danych wejściowych jest automatyczne.

Logowanie ręczne powinno być zgodne z opisem w [Logowanie w ScriptCode](/budowanie-aplikacji/logika-biznesowa/scriptcode/logowanie-w-scriptcode.md)

## Rzucanie wyjątków biznesowych <a href="#walidatoryskryptowe-validationscript-rzucaniewyjatkowbiznesowych" id="walidatoryskryptowe-validationscript-rzucaniewyjatkowbiznesowych"></a>

Błędy biznesowe zostały szczegółowo opisane na stronie [Strony błędów](/budowanie-aplikacji/interfejs-uzytkownika/formularze/tworzenie-formularza/strony-bledow.md#bledy-biznesowe).

{% hint style="info" %}
**Przykłady walidatorów:**

demoEmailWalidator, demoPESELWalidator, demoDowodWalidator, demoMinMaxWalidator
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.eximee.com/budowanie-aplikacji/logika-biznesowa/scriptcode/walidatory-skryptowe-validationscript/api-walidatorow-skryptowych.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
