# Strony błędów

Strony błędów możemy podzielić na błędy biznesowe i błędy platformowe.

### Błędy platformowe

Błędy platformowe to są błędy które pojawiają się w momencie kiedy na wniosku pojawi się błąd który jest domyślnie obsłużony w platformie np. błąd wygaśnięcia sesji.

W powyższej sytuacji wyświetlana jest strona błędu zawierająca textContent ustawiony w konfiguracji platformy **errorPagesConfiguration**

{% hint style="info" %}
Konfiguracja ustawiana jest odgórnie w platformie. Nie mamy możliwości aktualizowania jej low codowo w designerze. W przypadku potrzeby zmian należy kontaktować się z administratorami.
{% endhint %}

\
**Przykładowa konfiguracja:**

```xml
<code_default>
    <content>error_page_default-*</content>
</code_default>
<code_serverSessionExpired>
    <content>error_page_serverSessionExpired-*</content>
    <retryButtonAvailable>true</retryButtonAvailable>
    <styleName>spider-night</styleName>
</code_serverSessionExpired>
<code_formLimitExceeded>
    <content>error_page_formLimitExceeded-*</content>
</code_formLimitExceeded>
```

### Błędy biznesowe

**Błąd biznesowy** to sytuacja, w której działanie użytkownika, proces systemowy lub interakcja z zewnętrznym systemem narusza przyjęte reguły biznesowe - mimo, że z technicznego punktu widzenia operacja mogłaby zostać wykonana.

Przykłady:

* Próba wypłaty kwoty przekraczającej dostępne środki.
* Złożenie wniosku przy nieaktywnym koncie klienta.
* Wejście na wniosek jako użytkownik niezalogowany, mimo że wymagane jest zalogowanie

#### Jak wywołać?

**Błąd biznesowy** można wywołać w serwisach skryptowych oraz walidatorach skryptowych. Najlepiej użyć do tego metody **throwBusinessException** i **getErrorPageDefinitionBuilder**.

Metody, które można wywołać w obiekcie context:

```javascript
context.getErrorPageDefinitionBuilder()
.body(string)
.styleName(string);
.msg(string)
.pageTitle(string)
.pageTitleKey(string)
.sidebarSlot2TextContent(string);
.sidebarSlot2(string);
.sidebarSlot1TextContent(string);
.sidebarSlot1(string);
.retryButtonAvailable(string)
.retryButtonAvailable(boolean);
.logobarTitle(string);
.logobarTitleKey(string)
.logobarDescription(string);
.bodyTextContent(string);
.parameter(String key, String value)
.cause(Throwable cause)
.redirectUrl(string)
.redirectDelayInMillis(string)
.businessFormIdentifier(string)
```

{% hint style="danger" %}
W obiekcie context nie należy wywoływać metody `build()`
{% endhint %}

{% hint style="info" %}
Dobrą praktyką jest używanie metody `.msg` przy wywołaniu błędu biznesowego. Należy przekazywać w niej czytelny komunikat biznesowy - np. `.msg("Wniosek niedostępny")`. Zdefiniowany komunikat zostanie wypisany w logach, co ułatwia analizę i identyfikację błędów.
{% endhint %}

Przykładowy skrypt z opisami:

```javascript
function callService(context) {
    let option = context.getFirstParameter('option');
 
    if (!option) {
        return []
    }
 
    let builder = context.getErrorPageDefinitionBuilder() // Metoda przygotowuje ekran błędu, który ma być wyświetlony
 
    switch (option) {
        case "1": // Ekran błędu, który pokazuje artefakt Treści 'error_page_default'
            builder.bodyTextContent("error_page_default-*")
            builder.msg("Wniosek niedostępny") // Komunikat błędu, który zostanie wypisany w logach
            break;
        case "2": // Ekran błędu dodany za pomocą treści podanej w body
            builder.body("Domyślne body w obiekcie")
            builder.parameter("type", "info")
            builder.msg("Wniosek niedostępny")
            break;
        case "3": // Ekran błędu, który pokazuje artefakt Treści 'error_page_noAuthorization'
            builder.bodyTextContent("error_page_noAuthorization-*")
            builder.pageTitle("Tytuł strony")
            builder.logobarTitle("Logo tytuł")
            builder.retryButtonAvailable(true);
            builder.msg("Wniosek niedostępny")
            break;
        default: // Domyślny ekran błędu wyświetlony w wyniku błędu w skrypcie
            throw "Script exception"
 
    }
    context.throwBusinessException(builder); // Rzucenie ekranu błędu z przygotowanym obiektem builder
 
 
    return [{ 'output': '' }];
}

```


---

# 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/tworzenie-formularza/strony-bledow.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.
