# Zarządzanie zmiennymi sesyjnymi

## Panel Zmienne sesyjne

Widokiem do zarządzania zmiennymi sesyjnymi jest panel **Zmienne sesyjne**. W celu otwarcia go należy w lewym menu wybrać opcję **Zmienne sesyjne**. W prawej części belki tytułowej panelu znajduje się ikona lupki umożliwiająca przeszukiwanie listy zmiennych.

![Ilustracja 1. Panel "Zmienne sesyjne"](https://content.gitbook.com/content/2CssJT0zIo4SJQLbSZ6l/blobs/BcroviOfWC9Q80mbHuVa/1k_files/image2025-8-18_9-40-11.png)

### Dodanie nowej zmiennej sesyjnej

Dodanie nowej zmiennej sesyjnej odbywa się poprzez naciśnięcie przycisku **Dodaj zmienną sesyjną**.

W nowym wierszu dodanym na samej górze panelu wypełniamy:

* **Mid** - klucz zmiennej
* **Wartość domyślna** - stała wartość zmiennej
* **Id serwisu** - po podpięciu zmiennej sesyjnej do usługi, w tym miejscu pojawi się nazwa tego serwisu
* **Parametr wyjściowy** - jeśli zmienna sesyjna będzie parametrem wyjściowym usługi, to tutaj zostanie podany
* **Exposed** - zaznaczamy, czy dana zmienna sesyjna ma być przekazywana do klienta **w sposób jawny**. Opcja ta pozwala używać zmiennej sesyjnej w wyrażeniach warunkowych oraz formaterach wykonywanych po stronie klienta. Jeżeli zmienna sesyjna ma odznaczone pole, nie jest ona wysyłana do klienta.
* **Gtm**
* **Tag gtm** - nazwa taga gtm
* **Statystyki** - włączenie opcji wysyłania wartości zmiennej do statystyk.

![Ilustracja 2. Wiersz tworzenia zmiennej sesyjnej](https://content.gitbook.com/content/2CssJT0zIo4SJQLbSZ6l/blobs/OBe7eOTHhFNotMT0L3z1/4k_files/image2025-8-18_9-42-44.png)

Po zejściu z pola nazwy, zmienna zostaje utworzona. Jeśli dla zmiennej nie zostanie zdefiniowana nazwa, to system automatycznie nada wartość "pusty" lub kopię tej wartości jeśli już występowała.

### Edycja istniejącej zmiennej sesyjnej

W celu edycji istniejącej zmiennej wystarczy kliknąć w kolumnie **Mid** i zmienić wartość.

### Definicja wyjścia z usługi

Zmienna sesyjna może służyć jako miejsce zapisu wyniku wykonania usługi zdefiniowanej w ramach dowolnej strony bieżącego wniosku.

Mapowanie zmiennej na odpowiednie pole wyjściowe usługi definiujemy w panelu **Page services**, który wysuniemy klikając przycisk **Page services**:

![Ilustracja 3. Lista dostępnych na wniosku usług, wyświetlona po kliknięciu przycisku "Page services"](https://content.gitbook.com/content/2CssJT0zIo4SJQLbSZ6l/blobs/fC2C0ha0doezg5sTP1mK/4k_files/image2022-12-12_11-36-59.png)

Po pojawieniu się listy dostępnych dla wniosku usług szukamy właściwej usługi, a następnie odkrywamy jej szczegóły klikając znajdującą się po prawej stronie panelu opcję **Pokaż szczegóły**. Zmapowanie wyjścia z usługi do zmiennej możliwe będzie po kliknięciu **Parametry wyjściowe** w wyświetlonych szczegółach:

![Ilustracja 4. Rozwinięte szczegóły dla PageService1](https://content.gitbook.com/content/2CssJT0zIo4SJQLbSZ6l/blobs/JMYUMNL5O3S0qZ8wYN7W/4k_files/image2022-12-12_11-41-3.png)

W zakładce parametrów wyjściowych klikamy przycisk **Dodaj parametr** — spowoduje to wyświetlenie wiersza, w którym najpierw, w kolumnie **Komponent wniosku**, wybieramy zmienną sesyjną, dla której chcemy zmapować wyjście, a następnie w kolumnie **Parametr wyjścia**, wskazujemy odpowiednie wyjście:

![Ilustracja 5. W zakładce "Parametry wyjściowe" wybrana została zmienna sesyjna,&#x20;
dla której jeszcze trzeba wybrać parametr wyjścia](https://content.gitbook.com/content/2CssJT0zIo4SJQLbSZ6l/blobs/PXlt6W7JNzmwjOHG1kG2/4k_files/image2022-12-12_11-44-38.png)

Po poprawnym podpięciu usługi do zmiennej, w jej właściwościach będzie informacja o podpiętej usłudze oraz wskazanym parametrze wyjściowym:

![Ilustracja 6. W panelu zmiennych sesyjnych dla zmiennej mającej podpiętą usługę jej nazwa znajduje się&#x20;
w kolumnie "Id serwisu", a obok parametr wyjściowy z usługi](https://content.gitbook.com/content/2CssJT0zIo4SJQLbSZ6l/blobs/LErHsgmbjGELgZWqYnz6/4k_files/Zaznaczenie_134.png)

### Usunięcie zmiennej sesyjnej

Usunięcie zmiennej sesyjnej następuje poprzez wybranie ikony kosza dostępnej po najechaniu na wiersz tej zmiennej sesyjnej. Próba usunięcia zmiennej sesyjnej wykorzystywanej w artefakcie (np. jako parametr wejścia do usługi czy nasłuchiwania na zmienną) zakończy się wyświetleniem komunikatu informacyjnego:

![Ilustracja 7. Dymek z informacją o niemożliwości usunięcia zmiennej sesyjnej](https://content.gitbook.com/content/2CssJT0zIo4SJQLbSZ6l/blobs/mHAMH9I31j2bPLp3NXfq/4k_files/image2025-8-18_9-44-37.png)

### Wykorzystanie zmiennej sesyjnej do określenia wartości początkowej komponentu

W celu wykorzystania zmiennej sesyjnej do określenia wartości początkowej danego elementu należy wykonać odpowiednie kroki:

* zaznaczamy komponent
* na liście dostępnych właściwości wyszukujemy w sekcji Interakcje właściwość **ŹRÓDŁO DANYCH Z INNEGO POLA**
* po kliknięciu w **Wybierz komponent lub stałą** możemy wybrać mid zmiennej sesyjnej, która ma posłużyć jako wartość domyślna tego elementu,
* dodatkowo należy dodać nasłuchiwanie na zmienną zgodnie z instrukcją w: [Nasłuchiwanie i czyszczenie](https://docs.eximee.com/budowanie-aplikacji/interfejs-uzytkownika/formularze/dynamicznosc-formularza/nasluchiwanie-i-czyszczenie)

### Wykorzystanie zmiennej sesyjnej do pobrania wartości komponentu

Dla zmiennej sesyjnej wybieramy usługę EchoService dodaną na stronie wniosku.

### Przykłady użycia zmiennej sesyjnej

* Użycie zmiennej sesyjnej w warunku: getValue("@zmienna1")=="Y" gdzie zmienna1 jest nazwą zmiennej
* Użycie zmiennej sesyjnej w komponencie Etykieta: Obecna wartość zmiennej to ${zmienna1} gdzie zmienna1 jest nazwą zmiennej

{% hint style="warning" %}
Uwaga!

1. Jeśli zmienną sesyjną używamy w komponencie złożonym, należy przed jej nazwą dodać symbol @ (nie stosujemy tej notacji dla zmiennych predefiniowanych).
2. Zmiennych sesyjnych nie można użyć w [Sekcja powtarzalna - RepeatableSection](https://github.com/Consdata/eximee-docs/blob/main/budowanie-aplikacji/interfejs-uzytkownika/formularze/biblioteka-komponentow-bazowych/sekcja-powtarzalna-repeatablesection.md) — tutaj używamy pól technicznych.
   {% endhint %}

{% hint style="info" %}
Wniosek demo: demoZmienneSesyjne
{% endhint %}
