2 Zaawansowane programowanie internetowe Instrukcja nr 1
1. Cel zaj
Celem zaj jest zapoznanie si z technologi LINQ oraz tworzeniem trjwarstwowej aplikacji internetowej.
2. Zadanie
Prosz przgotowa aplikacj !!!" ktra#
$%zie pozwala&a na generowanie prostch artk'&w po%zielonch na kategorie. ! aplikacji maj $ wra(nie w%zielone warstw# o %ostp' %o %anch )o%powia%ajca za kom'nikacj z $az %anch* o $iznesowej )o%powia%ajcej za wkonanie reg'& $iznesowch w aplikacji* o prezentacji )o%powia%ajcej za kom'nikacj z '+tkownikiem* kom'nikacja z $az %anch ma si o%$wa za pomoc technologii Lin, -o .QL
! tm cel' nale+ wkona o%powie%nie kroki#
I. Stworzenie bazy danych a* -worzm now aplikacj tp' /.P.N0- !e$ /pplication )jako nazw nale+ przj 1a%anie 1.1* $* ! cel' 'tworzenia nowej $az %anch w oknie .ol'tion 02plorer klikam prawm przciskiem msz na katalog' /pp34ata i z men' kontekstowego w$ieram opcj /%% 5 New Item. c* ! w6wietlonm oknie %ialogowm w$ieram opcj .QL .er7er 4ata$ase" a jako nazw plik' po%ajem /rtk'l.m%8 i wciskam przcisk /%%.
3 Zaawansowane programowanie internetowe Instrukcja nr 1
%* Ponownie otwieram okno .ol'tion 02plorer i klikam %w'krotnie na nowej pozcji /rtk'l.m%8 w cel' otwarcia okna e%cji $az %anch. e* 9likajc prawm przciskiem msz na w(le -a$les i w$ieram opcj /%% New -a$le. !6wietlone zostanie okno e%cji ta$eli" ktre wpe&niam tak jak pokazano na rs'nk' poni+ej
Prosz pamita o 'stawieni' kl'cza g&wnego ta$eli na pol' I4. 8* Po%o$nie tworzm %r'g ta$el /rtk'l i 'stawiam w niej nastp'jce pola
5 Zaawansowane programowanie internetowe Instrukcja nr 1
public class Kategoria { public int ID { get; set; } public string Nazwa { get; set; } public string Opis { get; set; } public int LiczbaArtykulow { get; set; } }
public class Artykul { public int ID { get; set; } public string Tytul { get; set; } public string Tresc { get; set; } public int Kategoria { get; set; } public DateTime DataOstatniejModyfikacji { get; set; } public DateTime DataUtworzenia { get; set; } }
0lement te $% s&'+& %o kom'nikacji pomi%z poszczeglnmi warstwami
9lasa ta $%zie o%powie%zialna za kom'nikacj z $az %anch.
public class ArtykulLINQ_To_SQL : IArtykuly {
public List<Artykul> PobierzArtykulyZKategorii( int Kategoria) { using (ArtykulyDataContext context = new ArtykulyDataContext()) { var artykuly = from a in context.Artykulies where a.Kategoria == Kategoria select new Artykul { Tytul = a.Tytul, ID = a.ArtykulID }; return artykuly.ToList(); } }
6 Zaawansowane programowanie internetowe Instrukcja nr 1
public Artykul PobierzArtykul(int ID) { using (ArtykulyDataContext context = new ArtykulyDataContext()) { try { var artykul = context.Artykulies.Single( a => a.ArtykulID == ID); return new Artykul { Tytul = artykul.Tytul, Tresc = artykul.Tresc, DataUtworzenia = artykul.DataUtworzenia, DataOstatniejModyfikacji = artykul.DataOstatniejModyfikacji, Kategoria = artykul.Kategoria, ID = artykul.ArtykulID }; } catch { return null; } } }
public void DodajArtykul(string tytul, string tresc, int kategoria) { using (ArtykulyDataContext context = new ArtykulyDataContext()) { Artykuly art = new Artykuly { Kategoria = kategoria, Tytul = tytul, Tresc = tresc, DataOstatniejModyfikacji = DateTime.Now, DataUtworzenia = DateTime.Now }; context.Artykulies.InsertOnSubmit(art); context.SubmitChanges(); } }
7 Zaawansowane programowanie internetowe Instrukcja nr 1
public void EdytujArtykul(string tytul, string tresc, int kategoria, int ID) { using (ArtykulyDataContext context = new ArtykulyDataContext()) { var artykul = context.Artykulies.Single( a => a.ArtykulID == ID); artykul.Tytul = tytul; artykul.Tresc = tresc; artykul.Kategoria = kategoria; artykul.DataOstatniejModyfikacji = DateTime.Now; context.SubmitChanges(); } }
public void UsunArtykul(int ID) { using (ArtykulyDataContext context = new ArtykulyDataContext()) { var artykul = context.Artykulies.Single( a => a.ArtykulID == ID); context.Artykulies.DeleteOnSubmit(artykul); context.SubmitChanges(); } } }
Atworzenie klas kontekst'. Instr'kcja ta zawarta jest w $lok' 'sing w cel' a'tomatcznego zwolnienia zaso$w w momencie" g% nie s j'+ potrze$ne Przk&a% tpowego zaptania LINQ to .QL realiz'jcego zarwno selekcj wiersz i projekcj kol'mn z ta$eli $az %anch. Poniewa+ instr'kcja w linii oznaczonej jako tworz o$iekt klas I0n'mera$leB/rtk'l5" konieczne jest wwo&anie 8'nkcji -oList)* w cel' wkonania zaptania i wgenerowania wmaganej list o$iektw.
[DataObjectMethod(DataObjectMethodType.Update, true)] public void EdytujKategorie(string Nazwa, string Opis, int ID) { _kategorie.EdytujKategorie(Nazwa, Opis, ID); }
[DataObjectMethod(DataObjectMethodType.Delete, true)] public void UsunKategorie(int ID) { _kategorie.UsunKategorie(ID); } }
9 Zaawansowane programowanie internetowe Instrukcja nr 1
! prze%stawianej t'taj prostej aplikacji klasa ta stanowi je%nie implementacj inter8ejs' I9ategorie. 9lasa i jej meto% opisane s o%powie%nimi atr$'tami" ktre pozwalaj na &atwiejsze po%&czenie jej z o$iektami tp' ?$ject4ata.et znaj%'jcmi si w warstwie prezentacji.
/tr$'t ten in8orm'je @is'al .t'%io" +e klasa ta jest o%powie%zialna za %ostarczenie %anch %la warstw prezentacji. 9lasa zawiera %wa konstr'ktor. Pierwsz = %om6ln = wmagan jest przez @is'al .t'%io" %r'gi 'mo+liwia ;wstrzknicie< o$iekt' 'mo+liwiajcego po&czenia z $az %anch. /tr$'t opis'jc meto% 4ata?$jectDetho% pozwala na okre6lenie jej przeznaczenia. .k&a%nia tego atr$'t' jest nastp'jca#
DataObjectMethod(DataObjectMethodType, bool)
Pierwsz parametr okre6la przeznaczenie meto%" %r'gi cz jest to meto%a %om6lna cz nie.
11 Zaawansowane programowanie internetowe Instrukcja nr 1
8* Nastpnie mo+em 'stawi z jakich meto% w$ranej wcze6niej klas ma korzsta (r%&o %anch prz wkonwani' operacji po$ierania i e%cji %anch. 1a'wa+m +e o%powie%nie meto% zosta& j'+ w$rane %ziki 'stawionm wcze6niej atr$'tom. 1mie>m je%nak meto% w zak&a%ce ;.elect< na ;Po$ierz9ategorie!gI4<" pozosta&e wpis pozostawm $ez zmian. 9likam przcisk Ne2t.
g* Poniewa+ w$rana meto%a ;Po$ierz9ategorie!gI4< ma przpisan parametr w nastpnm oknie jeste6m proszeni o w$ranie (r%&a warto6ci %la niego. ! naszm przpa%k' w$ieram warto6ci tak jak pokazano na rs'nk' poni+ej )prz za&o+eni'" +e komponent Eri%@iew nazwan jest 9ategorieE@*.
12 Zaawansowane programowanie internetowe Instrukcja nr 1
h* 9likam przcisk ;Hinish<. i* Nastpnie klikam raz jeszcze na mo%8ikowanm w poprze%nich krokach o$iekcie i w oknie ;Properties< zmieniam warto6 w&a6ciwo6ci ;?l%@al'esParameterHormat.tring< z ;orginal3IJK< na ;IJK<. j* Nastpnie klikam na o$iekcie tp' 4etails@iew" rozwijam okienko -ask" w ktrm 'stawiam opcje tak jak pokazano na rs'nk' poni+ej i klikam opcje ;0%itHiel%s<.
k* ! w6wietlonm oknie %ialogowm w okienk'# ;.electe% Hiel%s< 's'wam pozcje tak a$ pozosta& tlko# ;Nazwa<" ;?pis<" ;Comman%Hiel%<. Nastpnie klikam na ;Comman%Hiel%< i w oknie ;;Comman%Hiel% properties< o%naj%'jem pozcj New-e2t" z ktrej 's'wam zawarto6.
13 Zaawansowane programowanie internetowe Instrukcja nr 1
l* 9likam na przcisk ?9. w cel' zamknicia okna. m* ! oknie Properties %la pozcji ;4ata9eNames< przpis'jem warto6 ;I4<. n* Nastpnie w po%o$n spos$ prosz skon8ig'rowa %r'gi o$iekt tp' ?$ject4ata.et" prz czm w zak&a%ce ;.elect< prosz w$ra meto% ;Po$ierz!szstkie<. o* ?$iekt Eri%@iew prosz po%&cz %o %r'giego o$iekt' tp' ?$ject4ata.et i skon8ig'rowa tak a$ mo+liwe $&o w$ranie opcji 0%it l'$ 4elete. Prosz rwnie+ 'stawi w&a6ciwo6 ;4ata9eNames< na warto6 ;I4<
Deto%a ta ma za za%anie 'kr komponent 4etails@iew" w momencie g% '+tkownik zatwier%zi l'$ an'l'je e%cj %anch.
,* Nastpnie prosz o przgotowanie %r'giej stron /rtk'l.asp2 tak a$ wgl%a&a mniej wicej jak na rs'nk' poni+ej#
15 Zaawansowane programowanie internetowe Instrukcja nr 1 9omponent 4rop4ownList )9ategoria* ma pozwoli na w$ranie kategorii" z ktrej maj $ w6wietlone artk'&. Pozosta&e komponent powinn si zachowwa mniej wicej tak jak na poprze%niej stronie.
Da&a po%powie%(# Poniewa+ w komponencie 4etails@iew ma nie $ pozcji 9ategoria" jej warto6 m'si $ po$ierana z komponent' 4rop4ownList. /$ warto6 ta $&a %o&czona %o zestaw' %anch przekazanego %o warstw $iznesowej konieczne jest przpisanie %o komponent' 4etails@iew %wch meto% o$s&'gi z%arze># ItemInserting oraz ItemUpdating, w ktrch wpis'jem o%powie%nio#
:e+eli wstarcz Pa>stw' czas' to na zajciach" je+eli nie to w %om' prosz = w ramach powtrzenia = o roz$'%owanie tej aplikacji o technologi as'nchronicznego przes&' %anch /:/M oraz %o&czenie %o niej stron" ktra 'mo+liwi&a $ przegl%anie artk'&w w tr$ie tlko %o o%czt'.