> 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/zarzadzanie-aplikacja-biznesowa/zarzadzanie-konfiguracja/konfiguracja-aplikacji-biznesowej-serwer-konfiguracji/konfiguracja-z-poziomu-low-code.md).

# Konfiguracja z poziomu Low-code

Definicja konfiguracji dostępna jest w module **Aplikacja** Eximee Designer.

{% hint style="info" %}
Aplikacje, które używają serwera konfiguracji do pobierania konfiguracji, muszą mieć skonfigurowany [Model danych](/budowanie-aplikacji/model-danych.md) oraz ustawiony punkt startowy.
{% endhint %}

Przechodząc do okna danej aplikacji w lewym panelu dostępna jest zakładka **Konfiguracja,** a w prawym okno **Edytora konfiguracji**:

<figure><img src="https://1082717226-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2FVaNX5cnpjiN6710a4kIR%2Fimage.png?alt=media&amp;token=cf881ce2-a592-4191-8649-05daecac7ae0" alt=""><figcaption><p><em><strong>Ilustracja 1.</strong> Konfiguracja z poziomu Eximee Designer - zakładka Konfiguracja</em></p></figcaption></figure>

## Format konfiguracji <a href="#konfiguracjazpoziomulowcode-formatkonfiguracji" id="konfiguracjazpoziomulowcode-formatkonfiguracji"></a>

Konfiguracje definiowane są w formacie: klucz = wartość

### Ustalenie środowiska <a href="#konfiguracjazpoziomulowcode-ustaleniesrodowiska" id="konfiguracjazpoziomulowcode-ustaleniesrodowiska"></a>

Dodatkowo istnieje możliwość określenia środowiska, dla którego będzie dostępny dany settings, za pomocą dodania do klucza suffixu **|${klucz\_środowiska}** np.

application.logi&#x6E;**|prod**=wartoscKlucza

Taki settings będzie domyślnie dostępny tylko dla środowiska oznaczonego jako "prod".

Środowisko możemy określić za pomocą ENV'a - **CONFIG\_SERVER\_ENVIRONMENT\_NAME** w aplikacji serwera konfiguracji.

{% hint style="warning" %}
**CONFIG\_SERVER\_ENVIRONMENT\_NAME** jest parametrem środowiskowym samej aplikacji serwera konfiguracji (config-server), a nie ustawieniem aplikacji biznesowej. Konfiguruje go zespół odpowiedzialny za wdrożenie platformy — nie da się go ustawić z poziomu Eximee Designer ani Eximee Dashboard.
{% endhint %}

W przypadku braku klucza suffixu z aktualnym środowiskiem, brane są wartości bez określonego suffixa.

### Komentarze <a href="#konfiguracjazpoziomulowcode-komentarze" id="konfiguracjazpoziomulowcode-komentarze"></a>

W oknie edycji konfiguracji jest możliwość dodawania komentarzy w zawartości konfiguracji. Komentarze powinny zaczynać się od **nowej linii**, a treść komentarza powinna być poprzedzona symbolem **kratki (#)**.

### **Definicja ról uprawniających do edycji w Eximee Dashboard** <a href="#konfiguracjazpoziomulowcode-definicjaroluprawniajacychdoedycjiweximeedashboard" id="konfiguracjazpoziomulowcode-definicjaroluprawniajacychdoedycjiweximeedashboard"></a>

{% hint style="warning" %}
Należy pamiętać, że poza określeniem ról w Eximee Designer uprawniających do edycji konkretnej konfiguracji w Eximee Dashoard, użytkownik Eximee Dashboard musi mieć przypisaną rolę posiadającą uprawnienie **feature\_config\_edit**, która daje dostęp do zakładki "Konfiguracja aplikacji".
{% endhint %}

Wraz z konfiguracją w Eximee Designer można zdefiniować role, które umożliwią edycję konfiguracji [runtime](/zarzadzanie-aplikacja-biznesowa/zarzadzanie-konfiguracja/konfiguracja-aplikacji-biznesowej-serwer-konfiguracji/modyfikacja-runtime-konfiguracji-biznesowych.md) w Eximee Dashboard. W przypadku braku zdefiniowanych ról w konfiguracji aplikacji Eximee Designer, edycja konfiguracji aplikacji z poziomu Eximee Dashboard nie będzie dostępna dla żadnego użytkownika.

Definicje ról można określić w polu "Role uprawniające do edycji w Eximee Dashboard" nad edytorem konfiguracji w Eximee Designer.

Jeśli aplikacja serwera konfiguracji ma zdefiniowany parametr AUTH\_ROLE\_STRIP\_PREFIX to należy podany prefix ról pominąć na elementach listy.\
Czyli jeśli AUTH\_ROLE\_STRIP\_PREFIX = "PDC000000001-" a rola nazywa się "PDC000000001-config-editor-role", to na liście w Eximee Designer należy wskazać "config-editor-role".

{% hint style="warning" %}
Podobnie jak **CONFIG\_SERVER\_ENVIRONMENT\_NAME**, parametr **AUTH\_ROLE\_STRIP\_PREFIX** jest ustawieniem aplikacji serwera konfiguracji konfigurowanym po stronie platformy, a nie przez lowcode developera.
{% endhint %}

\
Modyfikacja konfiguracji w Eximee Dashboard: [Modyfikacja (runtime) konfiguracji biznesowych](/zarzadzanie-aplikacja-biznesowa/zarzadzanie-konfiguracja/konfiguracja-aplikacji-biznesowej-serwer-konfiguracji/modyfikacja-runtime-konfiguracji-biznesowych.md)

{% hint style="warning" %}
Wartości nadpisane z poziomu Eximee Dashboard nie są widoczne w edytorze konfiguracji w Eximee Designer.
{% endhint %}

<figure><img src="https://1082717226-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2Fm7Ix0jsZyOEi6eJ0e1Q7%2Fimage.png?alt=media&amp;token=ea671130-6f8b-49ca-86d1-128ad08a1bf8" alt=""><figcaption><p><em><strong>Ilustracja 2.</strong> Konfiguracja z poziomu Eximee Dashboard - zakładka "Konfiguracja aplikacji"</em></p></figcaption></figure>

### Przykład konfiguracji <a href="#konfiguracjazpoziomulowcode-przykladkonfiguracji" id="konfiguracjazpoziomulowcode-przykladkonfiguracji"></a>

CONFIG\_SERVER\_ENVIRONMENT\_NAME = **dev**

Treść konfiguracji:

```editorconfig
# Włącza panel narzędzi deweloperskich w aplikacji - ma być aktywny tylko na środowisku dev, nigdy na produkcji
devtools.enabled=false
devtools.enabled|dev=true

# Maksymalna liczba prób ponowienia wywołania usługi zewnętrznej wykorzystywanej przez wniosek
retry.maxAttempts=3
```

Config server dla środowiska **dev** zwróci 2 konfiguracje (bez suffixu):

```editorconfig
devtools.enabled=true

retry.maxAttempts=3
```

Wartość **devtools.enabled** ma zdefiniowany suffix **|dev**, więc dla tego środowiska zwracana jest wartość z niego (`true`) - mechanizm jest aktywny tylko na dev, a na innych środowiskach, w tym na produkcji, pozostaje wyłączony (`false`). Wartość **retry.maxAttempts** nie ma zdefiniowanego suffixu środowiskowego, więc niezależnie od środowiska zwracana jest ta sama wartość domyślna.

### **Edycja konfiguracji** <a href="#konfiguracjazpoziomulowcode-edycjakonfiguracji" id="konfiguracjazpoziomulowcode-edycjakonfiguracji"></a>

Edycja konfiguracji blokuje artefakt aplikacji, z tego też powodu nie można do niej dodać nowych artefaktów, np.: procesu, formularza. Jednak próba dodania takiego artefaktu **utworzy go w repozytorium**, ale **nie zostanie on podpięty** pod artefakt aplikacji.<br>

W przypadku błędów składniowych konfiguracji (np.: dla konfiguracji o typie PROPERTIES podano niepoprawny unicode) wystąpi błąd przy zapisie konfiguracji, który będzie miał ogólną postać błędów, występujących przy zapisie artefaktu:

<figure><img src="https://1082717226-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2FaHK7fwJ6iHMp5m3PxsJ8%2Fimage.png?alt=media&amp;token=4a896e0a-1cb9-4338-a572-c50967e2f43f" alt=""><figcaption><p><em><strong>Ilustracja 3.</strong> Błąd przy zapisie niepoprawnej konfiguracji aplikacji</em></p></figcaption></figure>

Użytkownik pozostanie w trybie edycji i będzie mógł poprawić ewentualne błędy składniowe i ponownie spróbować zapisać konfigurację.

### Użycie wartości z konfiguracji w ScriptCode <a href="#konfiguracjazpoziomulowcode-uzyciewartoscizkonfiguracjiwscriptcode" id="konfiguracjazpoziomulowcode-uzyciewartoscizkonfiguracjiwscriptcode"></a>

W ScriptCode możemy pobrać wartość z konfiguracji korzystając z api do pobierania konfiguracji:\
\
Api:

```typescript
interface Api {
    config: {
        v1: {
          get(klucz: string): string;
          getOrDefault(klucz: string, defaultValue: string): string;
        }
    }
}

```

{% hint style="danger" %}
Jeśli wskazany klucz nie istnieje w konfiguracji, metoda **get()** zgłasza wyjątek. Aby brak konfiguracji nie powodował błędu na wniosku, obsłuż ten przypadek za pomocą **try/catch** albo, gdy dla danego parametru sensowna jest wartość domyślna, użyj metody **getOrDefault()** — nie zgłasza ona wyjątku i zawsze zwraca podaną wartość domyślną, jeśli klucz nie zostanie znaleziony.
{% endhint %}

przykładowy skrypt korzystający z Api:

```javascript
function callService(context) {
    let serviceUrl;
    try {
        serviceUrl = api.config.v1.get("service.url");
    } catch(e) {
        serviceUrl = "defaultServiceUrl";
    }

    const timeoutSeconds = api.config.v1.getOrDefault("service.timeout", "30");

    return [{'serviceUrl': serviceUrl, 'timeoutSeconds': timeoutSeconds}];
}

```

{% hint style="info" %}
Api działa również dla wywołań skryptów w modelu danych.
{% endhint %}

Edytor oferuje również podpowiedzi:

<figure><img src="https://1082717226-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2FzftSGgEOhkY1lh4hjSTW%2Fimage.png?alt=media&amp;token=4d348171-f8c9-4d38-8c30-21cdc4a0c482" alt=""><figcaption><p><em><strong>Ilustracja 4.</strong> Przykład podpowiedzi w trakcie wpisywania kodu</em></p></figcaption></figure>

#### Użycie wartości z konfiguracji w zadaniu skryptowym <a href="#konfiguracjazpoziomulowcode-uzyciewartoscizkonfiguracjiwzadaniuskryptowym-przykladowezadanieskrytowe" id="konfiguracjazpoziomulowcode-uzyciewartoscizkonfiguracjiwzadaniuskryptowym-przykladowezadanieskrytowe"></a>

Przykładowe zadanie skryptowe:

```javascript
function handle(task, context) {
    // Pobranie zmiennych z konfiguracji
    const skipTask = api.config.v1.getOrDefault("script.task.skip.task", "false")
    const titleName = api.config.v1.getOrDefault("script.task.title.name", "Domyślny tytuł")
     
    // Zakończenie zadania i przekazanie zmiennych (skipTask, titleName) do procesu
    context.complete({'skipTask': skipTask, 'titleName': titleName});
}
```

użycie w procesie:

<figure><img src="https://1082717226-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F2CssJT0zIo4SJQLbSZ6l%2Fuploads%2FSUcYUkvko5NETFnZ1Ab5%2Fimage.png?alt=media&amp;token=59af233c-c457-4500-bb02-966c0a2951c7" alt=""><figcaption><p><em><strong>Ilustracja 5.</strong> Przykład użycia wartości z konfiguracji w procesie</em></p></figcaption></figure>

W rezultacie do procesu zostaną przekazane wartości z konfiguracji i zapisane pod kluczami: skipTask i titleName.

{% hint style="info" %}
Konfiguracja biznesowa w Eximee: [Business Application Configuration](https://eximee.com/business-application-configuration/)
{% 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/zarzadzanie-aplikacja-biznesowa/zarzadzanie-konfiguracja/konfiguracja-aplikacji-biznesowej-serwer-konfiguracji/konfiguracja-z-poziomu-low-code.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.
