Lightswitch – samouczek_1_1 – nasze dane
Zaczynamy pierwszy samouczek Lightswitch. Wprowadzenie możecie przeczytać tutaj. Bazuje na samouczku Beth Massi.
Pamiętając, że podstawą aplikacji Lightswitch są dane zgromadzone w bazie danych, których struktury możemy tworzyć podczas prac nad nową aplikacją lub możemy skorzystać z istniejących w bazie danych struktur. Dla osób raczkujących w bazach danych analogią zbiorów danych niech będzie tabelka w Excelu, kolumny i wiersze z danymi. Dane w bazie danych przechowywane są w jednej lub wielu takich tabelach. Pomiędzy nimi mogą występować relacje np. wartość w tabeli A musi występować w tabeli B.
W Lightswitch możemy sięgnąć także do innych źródeł danych, nie koniecznie baz danych, np list Sharepoint, dlatego dla danych użyto terminu encji (entities). Podobnie kolumna w tabeli lub liście jest traktowana jako właściwość (property) encji. Jeśli nie korzystamy z istniejących baz danych, tworzymy nowe tabele we wbudowanej podręcznej bazie danych Lightswitch (intrinsic). Gdy tworzymy tabele i relacje między nimi, tworzymy model danych (lub schemat). Wymaga to pewnego doświadczenia ale interfejs Lightswitch bardzo ułatwia ten proces. Praca włożona w dokładne zdefiniowanie modelu pozwala na zaoszczędzenie wysiłku po stronie ekranów aplikacji.
Modelowanie danych odbywa się w Projektancie Danych (Data Designer). Lightswitch wspiera wiele typowych funkcji zarządzania danymi jak walidacja, przetwarzanie transakcyjne, rozwiązywanie konfliktów jednoczesnego dostępu. Każdy z tych mechanizmów może zostać dostosowany do indywidualnych potrzeb lub rozbudowany z użyciem właściwości metod lub dodatkowego kodu. Rozbudowane informacje o pracy z Projektantem Danych (Data Designer) znajdziemy tutaj (j. angielski) lub w demonstracji wideo (j.angielski)
Zaczynamy tworzenie naszej pierwszej aplikacji. Chcemy aby zarządzała ona naszymi kontaktami na kształt książki adresowej. Zaczynamy od stworzenia encji przechowującej dane naszych kontaktów. Otwieramy Visual Studio 2012 (Profesjonalny lub wyżej, ja używam Ultimate) i tworzymy nowy projekt Lightswitch pod nazwą ContactManager. Nowy projekt -> Szablony/Lightswitch -> LightSwitch Application (VisualBasic) -> wpisujemy nazwę ContactManager i klikamy OK
Po stworzeniu projektu widzimy stronę startową z wyborem wykorzystania istniejących danych lub utworzenia nowych. Wybieramy tworzenie nowych.
Widzimy Projektanta Danych i proponowaną tabelę.
Zmieniamy nazwę tabeli na Contact – edytując nazwę tabeli na głównym ekranie.
Widzimy, że w Eksploratorze rozwiązania został utworzony ContactSet w dziale ApplicationData. Dział ten reprezentuje wbudowaną bazę danych (intrinsic). ContactSet odnosi się do konkretnej tabeli, która będzie przechowywać wszystkie nasze kontakty z projektowanej tabeli Contact. Dlatego jest to zestaw/kolekcja (Set) wszystkich kontaktów. Teraz będziemy definiować właściwości naszej encji czyli kolumny tabeli. Zwróćmy uwagę, że została utworzona kolumna Id, której nie możemy modyfikować. Jest to wewnętrzna kolumna używana do unikalnej identyfikacji pojedynczego wiersza danych (klucz podstawowy – primary key). Lightswitch sam zarządza tymi kluczami za nas. Teraz zastanówmy się jakich informacji o kontaktach potrzebujemy, jakiego rodzaju są to dane (liczbowe, tekstowe, itp) i czy są wymagane. W naszej aplikacji wymagamy tylko Nazwiska.
Ciekawostka są typy danych dla Telefonu i Emaila. Takie biznesowe typy danych aktywują wbudowaną walidacje i edycje na ekranach aplikacji. Tak naprawdę dane są przechowywane jako typ String ale jest odpowiednio formatowany i sprawdzany na ekranie aplikacji. Walidacja danych jest ważna, pomaga utrzymać odpowiednią jakość i spójność danych. W oknie właściwości możesz ustalić zasady wymaganych wartości, maksymalnej długości napisu, zakresów liczbowych, zakresów dat itp. Dodatkowo możesz stworzyć własny kod walidacji. Więcej szczegółów o możliwościach wbudowanej walidacji i własnych metodach przeczytasz tutaj (j. angielski).
Jeśli nie widzisz okienka właściwości to klawisz F4 je przywoła. W zależności od typu danych widoczne będą inne opcje konfiguracyjne. Zawsze jest sekcja 'Wygląd’ (Appearence) zawierająca wyświetlaną nazwę. Gdy wpiszemy nazwę pola w tabeli w notacji 'upper camel case’ np. DataUrodzenia, wyświetlana nazwa będzie automatycznie rozdzielana spacją. Warto używać tej notacji. Gdy wpiszesz 'Opis’ dla mało intuicyjnych nazw pól, pokaże się on jako podpowiedź po najechaniu na pole kursorem w ekranie aplikacji. Ustawienia właściwości w Projektancie Danych dotyczą wszystkich ekranów aplikacji. Oczywiście można dostosować pojedynczy ekran ale lepiej manipulować ustawieniami w jednym miejscu.
Zmieńmy jeszcze kilka ustawień. Dla pola Id odznaczamy opcje 'Wyświetlaj domyślnie’ w sekcji 'Wygląd’. Jako, ze jest to pole potrzebne głównie dla wewnętrznych mechanizmów, użytkownik nie musi go oglądać na ekranie.
Dla 'DataUrodzenia’ ustawimy minimalną datę na 1900-01-01. Użytkownicy nie będą mogli wprowadzić wcześniejszej daty. Dodatkowo zmienimy format wyświetlania daty na długi 'D’ czyli np. Piątek, Czerwiec 7, 2013.Aby zobaczyć datę w takim formacie zmieniamy jej kontrolkę na ekranie na typ 'Label’ lub 'Text Box’ w Projektancie Ekranów (później to zrobimy przy pracy z ekranami). Więcej szczegółów o formatowaniu liczb i dat w Lightswitch przeczytacie tutaj (j. angielski).
Dla pola 'Płeć’ chcemy użyć listę wyboru zdefiniowanych wartości (Kobieta, Mężczyzna). Korzystamy z opcji 'Lista wyboru’ we właściwościach pola 'Płeć’. Tam definiujemy dopuszczalne wartości jako pary wartość (to co przechowujemy w bazie danych) i nazwa wyświetlana (to co widzi na ekranie użytkownik). Jako że w bazie chcemy przechowywać literę K lub M. Dodajemy walidację 'Maksymalna długość’ = 1. Standardowo maksymalna długość napisu (String) to 255 znaków.
Używając 'Właściwości’ (Property) dla całej encji (klikamy na tytuł encji (tabeli) – Contact) ustawiamy opcje 'Właściwość podsumowania’ (Summary Property). Informuje ona, które pole będzie odnośnikiem do ekranu edycji wiersza danych. Domyślnie jest to pierwsze pole typu String ale właśnie we właściwościach encji (tabeli) możemy to zmienić. Chodzi o to, że gdy wyświetlamy wszystkie kontakty i chcemy któryś zmodyfikować to musimy gdzieś kliknąć. Pole, które wybierzemy w opcji 'właściwości podsumowania’ będzie odnośnikiem do ekranu edycji. Takim polem może być również pole wyliczane. Więcej o 'Właściwośći podsumowania’ (Summary Property) możesz przeczytać tutaj (j. angielski).
Czas na test ekranu
Po zaprojektowaniu encji (tabeli) możemy ja przetestować tworząc ekran. Klikamy na 'Ekran …’ w pasku narzędzi Projektanta Danych. Pojawia się okno 'Dodawanie nowego ekranu’. Wybieramy szablon 'Ekran listy i szczegółów’. W Danych ekranu wybieramy 'ContactSet’. Klikamy OK.
Uruchamiamy aplikację naciskając klawisz F5. Ja miałem problem z uruchomieniem na maszynie z restrykcjami co do uruchamiania ActiveX. Pomogła zmiana typu aplikacji na sieciową.
Teraz korzystając z właśnie utworzonego ekranu możemy dodawać dane naszych kontaktów. Aby dodać kontakt naciskamy znak '+’ na górze ekranu.
Zauważmy, że etykiety pól są poprawnie wyświetlane ze spacją (Data Urodzenia). Pole wymagane jest pogrubione (Nazwisko). Działa walidacja przy próbie wpisania dziwnych danych (Email). Po wprowadzeniu kontaktu naciskamy przycisk 'Zapisz’. Zapisuje to dane do Twojej bazy danych deweloperskiej. To tylko test, prawdziwe dane będą zapisywane po udostępnieniu aplikacji użytkownikom.
W następnym odcinku – relacje w naszym modelu danych.