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.
Listy stałe a listy z bazy
Dział zatytułowany „Listy stałe a listy z bazy”- 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.
1. Typedef
Dział zatytułowany „1. Typedef”- 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.
2. Proces — ścieżka init
Dział zatytułowany „2. Proces — ścieżka init”LoadDatado zmiennejpersonsz tabeli osób, przedPrepareData. Bez filtra, bo to dane słownikowe. To różnica względem wczytywania konkretnego wniosku.- W
PrepareDatadochodzi polePersons:- osoby sortujesz po nazwisku i imieniu,
- każdą zamieniasz na obiekt z
PersonIdiFullName, - całość zamieniasz na listę, bo pole jest tablicą. Bez tego dostaniesz błąd.
3. Formularz i zakładka Mapping
Dział zatytułowany „3. Formularz i zakładka Mapping”- Update contract, żeby
Personspojawił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
Modeczy identyfikator. - Rodzaje mapowania:
- z designera (komponent),
- stała (constant),
- wyrażenie (expression).
Personsmapujesz wyrażeniem, które przekazuje dalej wartość z kontraktu. Jego polaPersonIdiFullNamemapujesz jako stałą.
4. Lista wyboru z wyrażenia
Dział zatytułowany „4. Lista wyboru z wyrażenia”- W polu pracownika odznaczasz ręczne values i włączasz valuesExpression. Wyrażenie bierze
contract.Personsi 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.
5. Reakcja na zmianę (onChangeExpression)
Dział zatytułowany „5. Reakcja na zmianę (onChangeExpression)”-
To akcja, uruchamiana, gdy użytkownik zmieni wartość pola. Niczego nie zwraca —
returnjest 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.
Zapamiętaj
Dział zatytułowany „Zapamiętaj”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.