# 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: 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/logika-biznesowa/scriptcode/walidatory-skryptowe-validationscript/api-walidatorow-skryptowych.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.
