Przejdź do głównej zawartości

Formularz - zasada działania


Zobacz film ilustrujący poniższe zagadnienia

  Formularz- zasada działania

W niniejszym rozdziale przedstawiony został opis działania formularzy wraz z logiką mechanizmów sterujących, danymi wejściowymi i bardziej zaawansowane tematy, takie jak repeatery i podformularze, a także o różnych metodach dostępu do danych, takich jak Model Entity Framework i operacja zapytania SQL.

Formularz w kilku krokach​

  1. Każdy nowo utworzony formularz posiada w swych danych początkowych element Id, który jest kluczem głównym. Zakładka Schemat wejściowy.

image

  1. Jeżeli podczas tworzenia formularza wskazana została struktura danych dla formularza, wówczas także w Mapowaniach startowych widnieje operacja Query data Model (Zapytanie do modelu danych) wczytująca dane ze struktury do FormInput Structure. Więcej o informacji Zapytania do modelu danych patrz: Mapowania>Operacja zapytania do modelu danych Entity Framework.

image

  1. Teraz możesz przejść na Panel Przybornik i z sekcji Struktura danych formularza przeciągnąć pola na obszar roboczy. Kontrolki są już zbindowane z polami ze struktury danych. Na zakładce Kontrolki dostępne są pozostałe kontrolki, których również możesz użyć przeciągając na formularz. Więcej o kontrolkach patrz: Kontrolki.

image

  1. Kolejno definiujemy akcje na zakładce Akcje, które mogą zapisać formularz, przenieść na inny formularz, uruchomić proces , pakiet lub wykonać mapowanie na danych i wiele innych dostępnych akcji. Podczas tworzenia formularza cały czas możemy podglądnąć wygląd formularza w przeglądarce.

image

Przejdź na zakładkę Akcje na formularzu, a następnie wybierz opcję przełączenia widoku na zaawansowany, gdzie zobaczysz kolejność poszczególnych kroków i kompilacji formularza.

image

Formularz - opis szczegółowy​

Na początek przyjrzyjmy się na schemat, jak działa aplikacja.

Przeglądarka łączy się z jakimś zdalnym adresem i raz na jakiś czas wysyła coś do serwera do przetworzenia, a serwer podejmuje akcje i odpowiada.

image

Serwer może wykonywać także szereg innych czynności jak: uruchamiać złożone procesy (workflow), procesy integracji danych, generować dokumenty, czy wchodzić w interakcję z dowolnymi systemami zewnętrznymi.

Formularz​

Formularz jest odzwierciedleniem jakiejś części danych z naszych źródeł danych (bazy danych). Zawiera:

  1. pola wejściowe, czyli kontrolki zbindowane z danymi z bazy danych (Name, Surname...)
  2. jakieś specjalne kontenery, w tym przypadku repeater związany z listą połączonych dzieci (Children),
  3. oraz inne elementy kontrolne lub przyciski powodujące wykonanie pewnych akcji (Zapisz, Wykonaj mapowanie...), zwykle powodujące przekazanie naszych danych z formularza do przetworzenia.

image

Kroki przetwarzania​

Skojarzmy kroki przetwarzania z określonymi elementami budowy formularza.

  1. Zaczynamy od pewnych danych początkowych, zwykle zawierających tylko identyfikator (ID) naszego elementu. W tym przypadku pochodzi on bezpośrednio z przeglądarki dla naszego głównego formularza, ale mogą być inne przypadki z większą ilością pól.

image

  1. Początkowa struktura jest następnie uzupełniana o pewne dane. W tym przypadku używamy operacji zapytania do modelu danych aby powiązać rekord główny o nazwie FormInputStructure z elementem modelu danych Simple person. Więcej o operacji patrz: Mapowania>Operacja zapytania do modelu danych Entity Framework.

Od tej pory wszelkie zmiany w poniższej strukturze będą automatycznie odzwierciedlane w bazie danych przy zapisie, a wszystkie niezbędne pola i relacje będą doczytywane w razie potrzeby.

image

  1. Po przygotowaniu danych możemy zacząć budować strukturę logiczną naszego formularza czyli drzewo kontrolek (odzwierciedlone jest na panelu Projekt formularza) i nadpisujemy dane. Projektujemy wygląd formularza gdzie można poukładać kontrolki, pogrupować je w kontenery, dodać akcje i przyciski, zdarzenia itp. Więcej o komponentach formularza patrz: Kontrolki .

image

  1. Następnym elementem jest dodanie akcji, która zostanie wykonana po naciśnięciu przycisku. Istnieje wiele dostępnych akcji. Większość z nich wiąże się z jakąś formą dalszego mapowania danych. Nasza akcja może, ale nie musi spowodować zapisanie danych do bazy. Możemy po prostu zatwierdzić i zaktualizować niektóre dane i wyświetlić ten sam formularz ponownie, ewentualnie z jakimiś potwierdzeniami lub komunikatami walidacyjnymi. Możemy nawigować do innego formularza lub uruchomić jakiś zewnętrzny proces, taki jak workflow lub integrację danych lub dowolną kombinację z powyższych.

Akcje dostępne są w przyborniku na panelu Akcje i zakładce Akcje. Więcej o definiowaniu akcji patrz: Rodzaje akcji.

image

Schemat działania formularza​

Zaczynamy od danych początkowych i elementu ID, następnie odczytujemy wszystkie potrzebne dane na zakładce Mapowania startowe, po czym budujemy nasz formularz używając kontrolek i akcji, aby móc pobierać dane użytkownika z przeglądarki, walidować je, a następnie reagować w jakiś sposób na przycisk lub inne zdarzenie.

image

Akcja (w tym wypadku Zapis danych) może przenieść nas do innego formularza, zakończyć dalsze przetwarzanie lub po prostu spowodować, że nasz formularz zostanie wyrenderowany z powrotem do przeglądarki.

image

Struktura danych a budowanie formularza​

Poniżej przedstawiono jeszcze inną reprezentację tego, co faktycznie dzieje się ze strukturą danych.

  1. Na etapie żądania dostajemy nasz element ID formularza.
  2. Dane zostają odczytane w początkowym mapowaniu, skutecznie rozszerzając naszą strukturę roboczą w dowolny sposób.

image

  1. Następnie mogą zostać podjęte pewne działania czyli akcje zdefiniowane na formularzu. W tym przypadku akcja zapisu wraz z mapowaniem danych oraz jakakolwiek inna akcja do wykonania.

image

  1. Następnie po akcji, nasze struktury są scalane i ewentualnie uzupełniane o jakieś kolejne dane, nadpisane już przez pola wejściowe.

image

  1. Na tym etapie możemy użyć pól z przybornika z panelu Struktura danych formularza, na którym znajdują się wszystkie pola dodane w ramach wykonywanych mapowań i mapowań akcji, które nie istniały po początkowej fazie mapowania.
  2. Kontrolki te są ustawione w trybie do odczytu.

image

Podsumowując:

  1. Możemy dodawać nowe pola i obliczenia w dowolnym miejscu po drodze, ale z różnymi warunkami wstępnymi i różnymi efektami.
  2. Jednym z popularniejszych przypadków jest sytuacja, gdy potrzebujemy np, obliczyć jakieś agregaty wartości wejściowych z naszego formularza. Mogą one różnić się od tych odczytanych bezpośrednio z bazy danych. Choć kuszące może być wykonanie obliczeń na końcu wstępnego mapowania na zakładce i kroku w powyższym schemacie Mapowania startowe, ale nie da nam to pożądanego rezultatu - w tym momencie dane pochodzą tylko z zewnętrznych źródeł.
  3. Dane wejściowe formularza będą dostępne nieco później (etap Bindowanie danych 1- Formularz- dane na schemacie). Istnieje zdarzenie na poziomie formularza o nazwie Zdarzenie przed uzupełnieniem danych właśnie w tym celu. Pozwala nam ono na mapowanie danych wejściowych formularza.

image

Mamy tutaj 2 powiązane hurtownie danych:

  • sam formularz
  • zewnętrzne źródła danych, głównie bazy danych.

image

  1. Do czasu zapisu danych na formularzu, kontrolki będą pokazywać jakieś tymczasowe wartości, wpisane lub zmienione przez nas i przechowywane przez same kontrolki w HTML.
  2. Zapisanie danych może wymagać czegoś więcej - np. dane muszą zostać zwalidowane lub spełnić jakieś inne kryteria oraz musimy uruchomić akcję zapisującą dane.
  3. Od nas zależy, jak zaprojektujemy nasz formularz - czy będziemy zapisywać dane często, nawet gdy są one jeszcze niekompletne do dalszego użycia, czy też będziemy trzymać nasze dane na formularzu i nie będziemy zanieczyszczać bazy danych, dopóki nasze wszystkie dane na formularzu nie zostaną uzupełnione.

Elementy na formularzu​

Niektóre z pól danych naszego formularza, czyli Name, Surname i Birth date są związane z kontrolkami. Dzięki temu kontrolki będą automatycznie wyświetlać wartości danych i je aktualizować.

Kolejnym komponentem jest lista (Repeater), związany z listą Children. Wewnątrz niego znajdują się kontrolki, z których każda jest związana z polami kolejnych wierszy naszej listy danych.

image

Repeater​

W naszym przykładzie komponent repeater jest związany z listą Children. Kontrolki wewnątrz repeatera są powiązane z kolejnymi wierszami tej listy. Ponadto opcja wyboru pola ze struktury danych została zwężona.

image

Pisząc wyrażenie w takim zagnieżdżonym kontekście, możemy sięgnąć do rodziców, używając podwójnej kropki. Ikona pinezki wskazuje nam lokalizację jeśli jest ona różna od korzenia. Oczywiście możemy zagnieżdżać repeatery wewnątrz repeaterów itd.w celu obsługi bardziej złożonych scenariuszy. Więcej o definiowaniu wyrażeń patrz: Wyrażenia.

image

Przyciski wywołują zdarzenia prowadzące do pewnych akcji wykonywanych przez serwer. W tym przypadku mamy dwie akcje, jedna po prostu zapisująca dane naszego formularza do bazy danych, a druga wykonująca mapowanie danych. Lista dostępnych akcji jest na panelu Akcje. Niektóre akcje mogą wykonywać wiele złożonych interakcji z danymi. Są to głównie akcje Wykonaj mapowanie i Uruchom nowy proces.

image

Podsumowując:

  1. Formularz posiada schemat wejściowy czyli początkową strukturę danych plus pewne mapowania, które możesz określić na formularzu (zakładka Mapowania startowe) rozszerzone o dane z zewnętrznych źródeł.
  2. Kolejno mamy kontrolki wyświetlane na formularzu, w których możemy wpisywać dane oraz akcje, które możemy wykonać z formularza.
  3. Mamy też dwie specjalne kontrolki, które mogą nas przenieść w inne miejsce w strukturze danych. Repeatery i podformularze.

Podformularz​

Na formularzu możesz użyć kontrolki podformularza, czyli wyświetlenia w określonym miejscu innego formularza.

  1. Właściwie każdy formularz może pełnić rolę podformularza. Wskazujemy, który formularz ma być podformularzem oraz gdzie go przybindować do naszej struktury danych (korzeń, inny rekord itp...).
  2. Podformularze dają możliwość ponownego wykorzystania wszystkich aspektów formularza, czyli struktury danych, interakcji i układu kontrolek. W rzeczywistości możemy używać podformularzy bez kontrolek, aby ponownie wykorzystać pierwsze dwa aspekty, lub na odwrót - ponownie wykorzystać tylko wygląd bez logiki i części interakcyjnej.
  3. Wracając do przykładu - moglibyśmy zamienić zaznaczoną część formularza w podformularz i umieścić tam cały potrzebny układ i logikę. A następnie osadzić ten podformularz wewnątrz repeatera.

image

  1. Wczytywanie danych Simple person oraz Children odbywa się na formularzu głównym. Podformularz jest odpowiedzialny tylko za obsługę kontrolek i akcji jednego dziecka.
  2. Jeżeli operacja zapytania do modelu danych zostanie umieszczona w podformularzu, wówczas w formularzu głównym operacja Query data model (Zapytanie do modelu danych) wykryje jakieś wcześniejsze wiązanie danych na tym samym rekordzie do tego samego elementu modelu przy użyciu tych samych kryteriów i wtedy nie robi nic, może z wyjątkiem dodawania niektórych danych brakujących w rodzicu, na przykład niektórych bardziej powiązanych rekordów lub dużych danych binarnych.

Metody dostępu do danych​

Na formularzu na zakładce Mapowania startowe dane pobierane są z bazy danych dzięki operacji Zapytanie do modelu danych (Query data model). Więcej o operacji patrz: Mapowania>Operacja zapytania do modelu danych Entity Framework.

Można doczytać dane z dowolnych źródeł danych, a następnie połączyć to z innymi źródłami w dowolny sposób i wykorzystać jako podstawę danych dla formularza. Możemy również wykonywać dowolne ręczne akcje modyfikacji danych, w tym aktualizacje SQL, wywołania zewnętrznych usług i oczywiście wszystkie te podejścia mogą być stosowane razem.

Zatem wyróżniamy 2 główne metody dostępu do danych:

image

Model Entity Framework​

  1. Największe zalety modelu entity framework to łatwa nawigacja po relacjach i automatyczne aktualizacje. Nie musimy pisać żadnego kodu SQL.
  2. Dzięki opcji Lazy load tylko wymagane dane są wczytywane.
  3. Nasz model danych może obejmować tylko jedną bazę danych i fizyczny dostęp do niej jest wolniejszy niż w przypadku czystego SQL.
  4. Takie podejście jest proste i może być całkowicie wystarczające dla większości naszych potrzeb.

Tak wygląda formularz, w którym Mapowanie startowe oparte zostało o model danych.

image

W przypadku pól związanych z danymi i rekordów powstałych w wyniku operacji Query data model aktualizacja danych odbywa się podczas zapisu gdy nowe wartości, pola relacje itp są aktualizowane w bazie danych.

SQL​

  1. W przypadku SQL możemy tutaj uzyskać dostęp do praktycznie dowolnych baz danych a nawet ogromnych hurtowni danych.
  2. Z drugiej strony musimy być obeznani z technologią relacyjnych baz danych i ręcznie obsługiwać wszelkie modyfikacje danych co jest na pewno bardziej skomplikowane niż w przypadku podejścia opartego na modelu danych.
  3. Jednym z częstych przypadków użycia SQL jest zliczanie danych, dopasowywanie określonych kryteriów lub używanie określonych podpowiedzi i opcji w celu uzyskania maksymalnej wydajności, a w przypadku naprawdę dużych danych ewentualnie uzyskania jakiegokolwiek wyniku.

Możemy użyć danych z innych baz danych. Na zakładce Źródła danych poprzez wybór opcji Zarządzaj skonfigurowanych zostało kilka dodatkowych połączeń do Oracle, MySQL i Postgres.

image

Na formularzu na zakładce Mapowania startowe nie ma operacji zapytania do modelu danych (Query data model) ale zamiast tego wykorzystano adnotację SQL Query dla dodanych rekordów. Każde z nich pobiera swoje dane z innej bazy danych. Dane mogą być skorelowane w dowolny sposób. Więcej o operacji zapytania SQL patrz: Operacja zapytania SQL.

image

Zobacz również​

Projektowanie formularza

Kontrolki

Tworzenie niestandardowego nagłówka i stopki strony aplikacji