Przejdź do głównej zawartości

Tabele: struktura, dane przy otwarciu i zapis

Do tej pory jeden wniosek był jednym rekordem. Teraz dodajemy zastępców na czas nieobecności, a może ich być kilku. Potrzebny jest element wielokrotny: komponent vertical table.

  • Nowe pole Substitutes jako tablica obiektów:
    • SubstituteId — Guid,
    • PersonId — Guid, dopuszcza null (nowy wiersz nie ma jeszcze zastępcy),
    • Scope — zakres zastępstwa.
  • Zamiast pól wpisanych ręcznie można wskazać typ z tabeli. Ręcznie łatwiej jednak zobaczyć, z jakich pól korzystamy.
  • Nowa sekcja Substitutes, a w niej vertical table z 3 kolumnami (column count):
    • kolumna 0: pole tekstowe substituteId, ukryte — visibleExpression = return false;,
    • kolumna 1: lista wyboru person. Wyrażenie z opcjami kopiujesz z pola pracownika, więc lista działa tak samo,
    • kolumna 2: pole tekstowe scope.
  • Aktualizacja kontraktu na formularzu i zatwierdzenie zmian.
  • Tablica mapuje się na tabelę, a pola obiektu — na kolumny.
  • W ścieżce do pola w tabeli pojawia się dwukropek z numerem wiersza, np. substitutes/table/:2/1/person: wiersz o indeksie 2 (trzeci, liczymy od zera), kolumna 1, pole person.
  • LoadData do substituteRows z tabeli zastępstw, z filtrem AbsenceId == absenceId. To ten sam rodzaj filtra co przy wczytywaniu wniosku.
  • W PrepareData dochodzi pole Substitutes: wczytane wiersze przerabiasz na obiekty w kształcie typedefu i zbierasz w listę.
  • DeleteRows — usuwa wszystkie zastępstwa tego wniosku.
  • SaveData — zapisuje na nowo wszystkie wiersze z formularza (input.Substitutes), każdemu z AbsenceId zapisywanego wniosku.
  • „Usuń wszystko i zapisz od nowa” gwarantuje, że baza jest zawsze zgodna z tym, co przyszło z formularza.
  • Gdy proces rośnie, nadawaj aktywnościom czytelne nazwy (np. SaveAbsence, DeleteOldSubstitutes, SaveSubstitutes), żeby było widać, co się w nich dzieje.

Tabela wyświetla się i zapisuje, ale użytkownik nie ma jeszcze jak dodać nowego wiersza. Tym zajmujemy się w następnej lekcji.