Proces formularza: init i put
Ożywiamy proces formularza: formularz ma wczytywać dane przy otwarciu i zapisywać je po kliknięciu „Zapisz”.
Dwie ścieżki procesu
Dział zatytułowany „Dwie ścieżki procesu”init— przy otwarciu formularza. Ładujesz dane do zmiennej wyjściowejdata, ta trafia na kontrakt, a kontrakt przez mapowania na pola formularza.put— po kliknięciu „Zapisz”. Dane z formularza przychodzą w zmiennej wejściowejinput.- Proces musi wiedzieć, który wniosek otwiera, więc dodajesz parametr wejściowy
absenceId(Guid). Przekazuje go ekran, który ładuje formularz.
Ścieżka init
Dział zatytułowany „Ścieżka init”LoadDatado zmiennejabsenceRows— tabela nieobecności z filtremId == absenceId. Przy edycji zwraca jeden wiersz, przy nowym wniosku — żadnego.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.
Modejest 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.
StartDatew tabeli toDateFromw kontrakcie.
Ścieżka put
Dział zatytułowany „Ścieżka put”- Zmienna
currentAbsenceId=input.Absence.AbsenceId, czyli identyfikator przysłany z formularza. - 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. SaveDatado 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.
AppendMessageToFormOutput— komunikat dla użytkownika, że wniosek zapisano.SetRedirectionFormOutput— powrót na listę nieobecności.
Walidacja po stronie serwera
Dział zatytułowany „Walidacja po stronie serwera”- Przed zapisem
Ifz warunkiem w wyrażeniu: czy winputnie 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.
Zapamiętaj
Dział zatytułowany „Zapamiętaj”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.