Przejdź do głównej zawartości

Proces formularza: init i put

Ożywiamy proces formularza: formularz ma wczytywać dane przy otwarciu i zapisywać je po kliknięciu „Zapisz”.

  • init — przy otwarciu formularza. Ładujesz dane do zmiennej wyjściowej data, ta trafia na kontrakt, a kontrakt przez mapowania na pola formularza.
  • put — po kliknięciu „Zapisz”. Dane z formularza przychodzą w zmiennej wejściowej input.
  • Proces musi wiedzieć, który wniosek otwiera, więc dodajesz parametr wejściowy absenceId (Guid). Przekazuje go ekran, który ładuje formularz.
  1. LoadData do zmiennej absenceRows — tabela nieobecności z filtrem Id == absenceId. Przy edycji zwraca jeden wiersz, przy nowym wniosku — żadnego.
  2. SetVariable (PrepareData) → data. Wyrażenie bierze pierwszy wiersz (FirstOrDefault()) i buduje obiekt o dokładnie takiej strukturze jak typedef.
    • Pola, które w typedefie nie dopuszczają null, muszą dostać wartość domyślną, gdy wiersza nie ma.
    • Mode jest wyliczany z tego, czy wiersz istnieje: dodawanie albo edycja.
    • To jest miejsce mapowania bazy na kontrakt. Struktura i nazwy nie muszą być takie same, np. StartDate w tabeli to DateFrom w kontrakcie.
  1. Zmienna currentAbsenceId = input.Absence.AbsenceId, czyli identyfikator przysłany z formularza.
  2. Dobra praktyka: ponowny LoadData (existingRows). Dostajesz aktualny stan rekordu z chwili zapisu i kolumny, których nie było na formularzu, a są potrzebne przy zapisie.
  3. SaveData do tabeli nieobecności. Dane z formularza (input.Absence) łączysz z istniejącym wierszem (existingRows). Wynik to lista — jednym zapisem można zapisać wiele wierszy.
    • Ważne: zapis nadpisuje cały rekord. Kolumna, której nie podasz, zostanie wyczyszczona. Dlatego kolumny spoza formularza przepisujesz z istniejącego wiersza.
  4. AppendMessageToFormOutput — komunikat dla użytkownika, że wniosek zapisano.
  5. SetRedirectionFormOutput — powrót na listę nieobecności.
  • Przed zapisem If z warunkiem w wyrażeniu: czy w input nie ma pracownika (PersonId == null).
  • Jeśli tak — komunikat typu Error „Select an employee.” i brak zapisu. Formularz zostaje otwarty ze wszystkim, co użytkownik wpisał, nic nie ginie.

init: wczytaj → przygotuj dane z wartościami domyślnymi. put: wczytaj → sprawdź → zapisz → komunikat → powrót na listę. Mamy już 3 z 4 elementów. Brakuje ekranu — w następnej lekcji wstawiamy formularz na ekran.