# 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="/files/6YXW7wBejjCzYuyhcDHN" 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.

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".

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

<figure><img src="/files/kDw1Sopfy3ij7WA287JP" 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
#url links to test environment
test.url|dev=urlDev
test.url=urlDefault
 
test.password=passwordBasic
test.password|prod=passwordProd
test.password|dev=passwordDev
 
 
test.login|prod=loginProd
test.login=loginDefault
 
 
test.enabled=true
```

Config server dla takich ustawień zwróci 4 konfiguracje (bez suffixu):

```editorconfig
test.url=urlDev
 
test.password=passwordDev
 
test.login=loginDefault
 
test.enabled=true
```

### **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="/files/KnJ5gxwD94LIyJy4txfR" 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;
        }
    }
}

```

przykładowy skrypt korzystający z Api:

```javascript
function callService(context) {
    let value1
    try {
        value1 = api.config.v1.get("dummy.url2");
    } catch(e) {
        value1 = "default"
    }
  
    var value2 = api.config.v1.get("dummy.url");
  
    var value3 = api.config.v1.getOrDefault("not_existing_key", "defaultValue")
  
    return [{'value1': value1, 'value2': value2, 'value3': value3}];
}

```

{% 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="/files/wBS95DIgWWihD2ZjmqTL" 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.get("script.task.skip.task")
    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="/files/XKoOQALH8bC1Ik95YnrV" 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: 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/zarzadzanie-aplikacja-biznesowa/zarzadzanie-konfiguracja/konfiguracja-aplikacji-biznesowej-serwer-konfiguracji/konfiguracja-z-poziomu-low-code.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.
