Przejdź do głównej zawartości

Listy wyboru z bazy i reakcja na zmianę

Ostatnia lekcja o właściwościach pól. Lista pracowników przestaje być wpisana na sztywno i zaczyna przychodzić z bazy. Przy okazji przechodzimy przez zmianę istniejącego, działającego formularza: typedef → proces → formularz. Na koniec akcja onChange.

  • Opcje wpisane ręcznie działają poprawnie. Dla rodzajów i statusów to ma sens, ale w praktyce biznesowej to rzadki przypadek.
  • Pracownicy mają się ładować z bazy, żeby nowe osoby pojawiały się na liście same.
  • Nowe pole Persons — tablica (zaznaczona flaga tablicy). Nie może być pusta.
  • W środku:
    • PersonId — Guid,
    • FullName — imię i nazwisko złączone w jedno pole.
  • LoadData do zmiennej persons z tabeli osób, przed PrepareData. Bez filtra, bo to dane słownikowe. To różnica względem wczytywania konkretnego wniosku.
  • W PrepareData dochodzi pole Persons:
    • osoby sortujesz po nazwisku i imieniu,
    • każdą zamieniasz na obiekt z PersonId i FullName,
    • całość zamieniasz na listę, bo pole jest tablicą. Bez tego dostaniesz błąd.
  • Update contract, żeby Persons pojawiło się na formularzu.
  • Zakładka Mapping podsumowuje, na jaką ścieżkę trafia każde pole kontraktu, np. pracownik → …/grid/0/0/employee (wiersz 0, kolumna 0).
  • Nie każde pole kontraktu musi mieć komponent. Możesz je przepuścić przez formularz: przychodzi z kontraktem, da się je odczytać i wraca przy zapisie. Typowe przykłady to pola ukryte, jak Mode czy identyfikator.
  • Rodzaje mapowania:
    • z designera (komponent),
    • stała (constant),
    • wyrażenie (expression).
  • Persons mapujesz wyrażeniem, które przekazuje dalej wartość z kontraktu. Jego pola PersonId i FullName mapujesz jako stałą.
  • W polu pracownika odznaczasz ręczne values i włączasz valuesExpression. Wyrażenie bierze contract.Persons i zwraca tablicę obiektów { value, text }:
    • value — to, co lista przechowuje (Guid),
    • text — to, co widzi użytkownik.
  • W aplikacji lista pokazuje wszystkie osoby z tabeli.
  • Wskazówki do valuesExpression:
    • nie zwracaj pustej tablicy. Przy błędzie zwróć jeden element z pustą wartością,
    • typ zaślepki musi pasować do typu wartości listy: przy tekście pusty tekst, przy liczbie null.
  • Autocomplete działa podobnie jak lista wyboru i możesz użyć w nim tego samego wyrażenia. Różnice:
    • pozwala wyszukiwać opcje,
    • po zaznaczeniu odpowiedniej opcji pozwala wybrać kilka wartości w jednym polu.
  • To akcja, uruchamiana, gdy użytkownik zmieni wartość pola. Niczego nie zwraca — return jest tu błędem.

  • Przykład na dacie Od:

    • wyrażenie odczytuje wartość tego pola i datę Do,
    • jeśli Do jest pusta albo wcześniejsza, ustawia ją na datę Od.

    Wybierasz Od = 12 października, a Do ustawia się sama na ten sam dzień.

  • Tak samo działa przycisk: jego główne zadanie to akcja w onClickExpression.

Lista z bazy = pole w typedefie + LoadData w init + valuesExpression { value, text } na formularzu. Pole kontraktu bez komponentu przepuszczasz mapowaniem wyrażeniem. W onChange i onClick nie ma return.