R07 (15)


Część II. Budowanie szablonów

Rozdział 7. Źródła danych

Gdy tworzymy szablon SWT przypisujemy do niego lub jego obiektów źródła danych, które zawierają zmienne wykorzystywane przez ów szablon. Możemy przypisać źródło danych do głównej animacji, do animacji znajdujących się w klipach filmowych, lub do samych obiektów Generatora.

Źródłem danych może być zwykły plik tekstowy, znajdujący się na dysku lokalnym komputera, na którym tworzony jest szablon lub znajdujący się w sieci lokalnej, adres URL pliku tekstowego lub skryptu, który wygeneruje odpowiednie dane, wynik zapytania SQL uzyskany dzięki połączeniu z baza danych poprzez JDBC/ODBC, lub dane bezpośrednio wpisane do okna Data source obiektu lub animacji. Możemy również przekazywać zmienne poprzez URL (przetwarzanie online) lub wpisywać je w linii poleceń (przetwarzanie offline).

Niezależnie od tego, który ze sposobów wybierzemy, dane muszą być przekazane do szablonu w odpowiednim formacie. Formaty danych obiektów Generatora zostały omówione w rozdziale 5. „Obiekty Generatora” a w dodatku B. „Formaty źródeł danych” znajdują się wyczerpujące informacje na temat formatów danych poszczególnych obiektów Generatora.

Format danych

Gdy przypisujemy dane do głównej animacji, lub też do animacji znajdujących się w klipach filmowych, korzystając z okna Set Environment (rys.7.1.) możemy dostarczać dane w dwóch podstawowych formatach: Nazwa/Wartość (Name/Value) oraz Kolumny Nazwa/Wartość (Column Name/Value).

Rysunek 7.1. Dwa podstawowe formaty danych w oknie Set Environment

Oba typy formatów różnią się ilością wartości jakie każda ze zmiennych może przyjąć. W przypadku pierwszego formatu (Name/Value), każda zmienna może mieć tylko jedną wartość a w drugim przypadku (Column Name/Value) każda zmienna może mieć wiele wartości.

Format Kolumny Nazwa/Wartość jest zalecany wtedy, gdy chcemy przekazać pewien zbiór wartości o tych samych parametrach w postaci kolumny wartości. Ten format jest wykorzystywany przez większość obiektów Generatora a do tej pory w tej książce spotkaliśmy się z nim wiele razy (chociażby podając dane dla wykresu).

Format Nazwa/Wartość

Podając dane w formacie Nazwa/Wartość pierwszy wiersz źródła danych musi wyglądać następująco:

Name, Value

Każdy kolejny wiersz jest oddzielnym zbiorem danych w pliku, a dane są podzielone na odpowiednie kolumny dzięki przecinkowi (,). W trybie Nazwa/Wartość w kolumnie Name określamy nazwę zmiennej, której wartość przypisujemy w kolumnie Value. Do każdej zmiennej może być przyporządkowana tylko i wyłącznie jedna wartość. Cudzysłów ( " " ), w którym możemy zapisać wartość zmiennej jest opcjonalny a jego użycie nie jest konieczne tak długo, jak długo nie będziemy chcieli zawrzeć w wartości zmiennej znaku przecinka (wszystkie zmienne i tak są traktowane jako łańcuchy tekstowe):

Name , Value

Zmienna1, "Wartość 1"

Zmienna2, "Wartość 2"

Zmienna3, "Wartość 3"

...

...

Format Kolumny Nazwa/Wartość

W tym formacie w pierwszym wierszu podajemy nazwy zmiennych a w kolejnych wierszach odpowiednie wartości, tak jak widać to w poniższym przykładzie:

Zmienna1 , Zmienna2 , Zmienna3 , ...

"Wartość 1 ", "Wartość 2" , "Wartość 3" , ...

"Wartość 1a", "Wartość 2a", "Wartość 3a", ...

"Wartość 1b", "Wartość 2b", "Wartość 3b", ...

... , ... , ... , ...

Jest to naturalny format w jakim zwracane są odpowiedzi zapytań SQL.

Znaki specjalne

Ponieważ format danych wymaga zastosowania odpowiedniego zapisu, nie wszystkie znaki można uzyskać, wpisując je bezpośrednio z klawiatury. Przykładowo nie możesz poprzez wpisanie uzyskać znaku cudzysłowu czy też przejść do nowego wiersza z tekstem, ponieważ w cudzysłów jest używany do określania całości wartości zmiennej a zwykłe przejście do nowego wiersza sygnalizuje obiektowi Generatora, że ma do czynienia z nowym zestawem danych lub nową zmienną.

Generator umożliwia jednak dodanie znaków, które są wykorzystywane w źródłach danych do innych celów. Aby tego dokonać należy skorzystać ze znaku lewego ukośnika ( \ ), który powinien poprzedzać odpowiedni symbol literowy. Przykładowo:

zmienna = "Czytacie państwo książkę pt. \"Generator. Następny krok \" "

W wyniku tego przypisania zmienna zmienna będzie miała wartość:

Czytacie państwo książkę pt. "Generator. Następny krok"

zmienna = "Oto pierwsza linia. \r \n Oto druga linia"

Zmienna będzie teraz miała następującą wartość:

Oto pierwsza linia

Oto druga linia

zmienna = "Zdanie podzielone \\ lewym ukośnikiem"

Wartość zmiennej zmienna wynosi:

Zdanie podzielone \ lewym ukośnikiem

Od powyższej zasady istnieją dwa wyjątki. Pierwszy wyjątek wystąpi wtedy, gdy będziemy chcieli uzyskać znak przecinka. Wystarczy wtedy ograniczyć wartość zmiennej cudzysłowem a przecinek, który jest normalnie interpretowany przez Generator jako koniec danych w jednej kolumnie i rozpoczęcie danych w drugiej kolumnie w jednym wierszu, zostanie w cudzysłowu zignorowany (tj. potraktowany jako wartość zmiennej).

Drugim wyjątkiem jest próba umieszczenia w zmiennej znaków: otwarcia nawiasu klamrowego ( { ) oraz zamknięcia nawiasu klamrowego ( } ). Ponieważ wszystko co znajduje się wewnątrz nawiasów klamrowych jest przez Generator traktowane jako jego zmienna wewnętrzna, taki ciąg tekstowy, np.:

zmienna = "Wartość w {nawiasach}"

nie zostanie wyświetlony, ponieważ Generator uzna że zmienna nawiasach zawiera łańcuch pusty (albo, co gorsze, gdzieś w pliku z danymi mamy zmienną o takiej nazwie i w tym miejscu pojawią się wartości, których może wcale nie chcielibyśmy oglądać). Aby móc wyświetlić znaki { oraz } trzeba skorzystać z następującego zapisu:

zmienna = "Wartość w {{nawiasach}}"

Określanie koloru

Z kolorem spotkaliśmy się w tej książce już wielokrotnie więc pojęcie koloru i jego trzech składowych czerwonej, zielonej i niebieskiej nie powinno być nam obce. Kolory dla obiektów Generatora i jego zmiennych możemy określać na trzy sposoby:

Kolory podane wg sposobu drugiego i trzeciego są identyczne.

Kolumna okna

Jeśli w źródle danych posiadamy kolumnę URL, w której znajduje się adres URL dokumentów, to możemy również utworzyć kolumnę WINDOW, w której będzie można podać sposób w jaki Flash Player powinien otworzyć żądany dokument w oknie przeglądarki. Możliwości jakimi dysponujemy to:

Jak Generator interpretuje dane ze źródła danych

Podczas przetwarzania przez Generator szablonu SWT, ciąg tekstowy, który zawarty jest w oknie Data source (a dokładniej w oknie Set Environment lub w oknie obiektu Generatora, które otwieramy klikając na właściwości Data Source)) jest sprawdzany ze względy na występowanie znaku # (rys.7.2.).

Rysunek 7.2. Jeśli w oknie właściwości Data source lub w oknie Set Environment jako pierwszy znak występuje znak #, to tekst zawarty w tym oknie jest traktowany przez Generator jako naturalne źródło danych, w przeciwnym razie tekst jest traktowany jako ścieżka dostępu do źródła danych umieszczonego gdzieś w Internecie

Jeśli znak # występuje, to tekst zawarty w polu tekstowym jest traktowany jako naturalne źródło danych, które może być zinterpretowane w sposób bezpośredni. Jeśli nie ma znaku #, to Generator traktuje znajdujący się w polu tekstowym łańcuch znaków jako ścieżkę dostępu (adres URL) źródła danych na dysku lokalnym lub w Internecie.

Ładowanie danych z zewnętrznych źródeł

Pliki tekstowe i proste skrypty wykonywane po stronie serwera

Określając jako źródło danych adres URL możemy uzyskać dane z odległych (czyt. nie znajdujących się na komputerze, na którym jest przetwarzany szablon SWT) źródeł danych, które mogą znajdować się znajduje w dowolnym miejscu, pod warunkiem, że można do nich dotrzeć za pomocą adresu URL.

UWAGA!!! Na tej samej zasadzie działa podawanie ścieżki dostępu do danych znajdujących się na dysku lokalnym, z tym, że wtedy dane są pod ręką, a ze względu na specyfikę Generatora ma to sens, jedynie wtedy, gdy testujmy nasze projekty.

Określając źródła danych poprzez adres URL możemy korzystać z protokołów transmisji HTTP, FTP oraz FILE. Wartość jaka jest zwracana w odpowiedzi musi być plikiem tekstowym w odpowiednim formacie. Korzystanie z danych URL umożliwia nam załadowanie bezpośrednio z sieci pliku tekstowego, lub też, co ma większy sens, umożliwia wywoływanie skryptów wykonywanych po stronie serwera (np. Perl, ASP lub inne), których wynikiem jest zawsze tekst w odpowiednim formacie. Najlepiej się jednak o tym przekonamy gdy wykonamy poniższe ćwiczenie.

Ćwiczenie

  1. Upewnijmy się, że nasz serwer WWW jest uruchomiony.

  1. Otwórzmy notatnik i wpisz do niego następujący tekst:

Value, Color

13, #223a76

17, #76bcad

20, #76adcf

5, #ccdcfa

14, #115566

26, #cdbaff

Plik ten zapiszmy jako dane.txt w katalogu domowym serwera WWW.

  1. Stwórzmy we Flashu nowy projekt.

  1. Umieśćmy w obszarze roboczym obiekt Pie chart z panelu Generator Objects i korzystając z narzędzia skalowania dopasujmy wielkość obiektu do białej przestrzeni obszaru roboczego.

  1. Jako właściwość Data source wpiszmy:

http://localhost/dane.txt

  1. Opublikujmy animację.

Generator pobierze dane z pod podanego adresu i stworzy wykres (rys.7.3.). Warto zauważyć, że do tego niewielkiego eksperymentu nie potrzebujemy wcale działającego w tle komponentu Online Generatora. Komponent Authoring extensions sam zajmie się wszystkim, tak jak to robił do tej pory.

Rysunek 7.3. Wykres, którego dane zostały pobrane z „Internetu”

  1. Zatrzymajmy teraz usługę serwera WWW przy pomocy menedżera PWM (kliknijmy w oknie menedżera przycisk Zatrzymaj) i ponownie opublikujmy szablon SWT.

Na rysunku 7.4. widać co dostaniemy teraz w odpowiedzi od Generatora. Błąd, który został wygenerowany jasno informuje nas o tym, że nie można odnaleźć źródła danych - Unable to find data source.

Rysunek 7.4. Po wyłączeniu serwera WWW, Generator nie potrafi zinterpretować adresu URL

  1. Uruchommy ponownie usługę serwera WWW.

Teraz napiszemy skrypt ASP, który generuje dane dla wykresy w sposób losowy.

  1. Otwórzmy notatnik i wpiszmy tam następujący tekst:

Value, Color

<%

'Inicjalizacja generatora losującego wartością zegara systemowego

Randomize

'Pętla wykonywana jest dziesięć razy,

'czyli powstanie dziesięć elementów wykresu Pie chart

For I = 1 To 10

'Losowanie Wartości elementu

Response.Write Round(Rnd*100)

'Tworzenie i losowanie wartości koloru dla elementu

Response.Write ", #"

For J = 1 To 6

'Losowanie koloru dla elementu

A = Round(Rnd*16)

'Zmienna Zmn jest inicjowana zmienną A.

'Wartość liczbowa zmiennej A jest zamieniana przez

'funkcję CStr na wartość tekstową.

Zmn = CStr(A)

'Jeśli zmienna A jest większa niż 9, to zmiennej Zmn

'są przypisywane odpowiednie litery w kodzie szesnastkowym

If A = 10 Then Zmn = "A"

If A = 11 Then Zmn = "B"

If A = 12 Then Zmn = "C"

if A = 13 Then Zmn = "D"

if A = 14 Then Zmn = "F"

Response.Write (Zmn)

Next

'Przejście do nowej linii

Response.Write chr(13)

Next

%>

Zapiszmy ten plik jako dane.asp, w katalogu domowym serwera WWW. Powyższy skrypt tworzy losowo dane dla obiektu Pie char. Elementów na wykresie będzie dziesięć (iteracja w pierwszej pętli for przebiega dziesięć razy) a ich wartość oraz kolory są (prawie) całkowicie przypadkowe.

Aby sprawdzić poprawność działania skryptów, które mają stanowić źródło danych dla obiektów Generatora, dobrze jest uruchomić skrypt najpierw w przeglądarce internetowej a dopiero później „podpiąć” go do konkretnego obiektu (no chyba, że jesteśmy pewni poprawności działania skryptu). Oglądając skrypt w przeglądarce (a dokładniej, przeglądając jego źródło), będziemy wiedzieć jak wyglądają przykładowe dane wygenerowane przez skrypt.

  1. Otwórzmy przeglądarkę internetową i w polu adresu wpiszmy ścieżkę dostępu do stworzonego przed chwilą skryptu, czyli.:

http://localhost/dane.asp

Po naciśnięciu klawisza ENTER w oknie przeglądarki powinien pojawić się tekst podobny do tego z rysunku 7.5.

Rysunek 7.5. Działanie skryptu ASP testowane w przeglądarce internetowej

Wiedząc jaki format danych jest niezbędny dla obiektu Pie chart możemy łatwo zweryfikować działanie skryptu poprzez przejrzenie źródła strony WWW (rys.7.5.) Jak widać w powyższym kodzie wszystko jest w porządku.

  1. Teraz, gdy jesteśmy już pewni, że skrypt generuje poprawne wyniki, możemy przyłączyć go bezpośrednio do obiektu Pie chart, podając podobnie jak w przeglądarce internetowej, ścieżkę dostępu do pliku dane.asp jako właściwość Data source obiektu.

Cechą charakterystyczną tego rozwiązania jest fakt, że za każdym gdy opublikujemy animację dostaniemy inny wykres.

Korzystanie z danych JDBC/ODBC

Możemy użyć komponentu JDBC/ODBC jako bezpośredniego źródła danych dla obiektów Generatora. W systemie Windows należy najpierw zarejestrować źródło danych aby stworzyć mapowanie między bazą danych a systemem (o tym za chwilę). Następnie już bezpośrednio można pobierać dane z bazy danych, podając odpowiednie polecenia jako wartość właściwości Data Source.

Nie ma sensu abyśmy „na sucho” objaśniali sobie cały złożony proces generowania szablonów SWT w oparciu informacje zawarte w bazie danych. Dlatego też od razu wykonamy dość złożone ćwiczenie, które dokładnie pokaże to o czym tutaj mówimy.

Ćwiczenie

Ponieważ w tej książce pracuje się przede wszystkim w systemie Windows, ćwiczenie także będzie dotyczyć operacji w systemie Windows. W omawianym zagadnieniu główne różnice występują mapowaniu komponentu ODBC bazy danych z systemem operacyjnym. Sposób tworzenia źródła danych omówiliśmy sobie w rozdziale 3. „Podstawy ASP”.

  1. Aby można było wykonać ćwiczenie w systemie operacyjnym musi istnieć źródło danych ODBC. Niech owe źródło będzie miało nazwę Baza, niech będzie to systemowe DSN (System DSN).

Plik z bazą danych dla źródła możemy znaleźć w katalogu Rozdzial07\Cwiczenia\db1.mdb. Jest to prosta baza danych, zawierającą tylko jedną tabelę, która zawiera dane dla wykresu Basic charts, który w tym ćwiczeniu połączymy bezpośrednio z tą bazą (rys.7.6.).

Rysunek 7.6. Poprawnie skonfigurowane źródło danych o nazwie Baza

  1. Stwórzmy teraz we Flashu nową animację.

  1. Umieśćmy w obszarze roboczym obiekt Basic charts, a następnie jako właściwość Data Source wpiszmy następujący ciąg tekstowy (rys.7.7.):

Rysunek 7.7. Zapytanie SQL kierowane bezpośrednio do źródła danych Baza

fgjdbc:///?driver=sun.jdbc.odbc.JdbcOdbcDriver& ->

url=jdbc:odbc:Baza&userid=&password=& ->

query=SELECT%20*%20FROM%20Tabela

Może się wydawać to trochę skomplikowane, ale wcale tak nie jest. Oto wyjaśnienie tego z pozoru zagmatwanego zapisu (znak -> oznacza kontynuację wiersza):

  1. fgjdbc:/// - informuje obiekt Generatora, aby resztę adresu interpretował jako ciąg znaków, który łączy z systemowym źródłem danych JDBC/ODBC i zadaje pytanie SQL. Innymi słowy, po tym zapisie obiekt Generatora będzie wiedział, że dane będą pobierane przy pomocy komponentu ODBC (w naszym przypadku) z bazy danych;

  1. ?driver=sun.jdbc.odbc.JdbcOdbcDriver - określa kontroler, przy pomocy którego Generator (a ogólniej dowolna aplikacja) komunikuje się z baza danych. Jeśli, tak jak w wypadku wykonywanego ćwiczenia łączymy się ze źródłem danych ODBC, nic nie zmieniamy w powyższym zapisie, jednak jeśli korzystamy z podstawowego kontrolera JDBC np. dla Oracle zapis ten może wyglądać następująco:

?driver=oracle.jdbc.driver.OracleDriver

Szczegóły można znaleźć w dokumentacji dołączonej do aplikacji bazodanowej, z której korzystamy;

  1. url=jdbc:odbc:Baza - adres URL określający nazwę źródła danych ODBC. Format ogólny, to:

url=jdbc:odbc:Nazwa_źródła_danych

W przypadku tego ćwiczenia źródło danych nazywa się Baza i dlatego należy użyć właśnie tego zapisu;

  1. &userid= &password= - elementy określają identyfikator użytkownika (user ID) oraz hasło dostępu do bazy danych (password), które mogą być wymagane przez bazę danych. Ogólny format, to:

&userid=indentyfikator->

&password=hasło->

Jeśli, tak jak w przypadku tego ćwiczenia, baza danych nie oczekuje identyfikatora i hasła, możemy ich nie podawać, jednak zawsze musimy użyć zapisu &userid= oraz &password= inaczej kontroler ODBC wygeneruje błąd;

  1. query=SELECT%20*%20FROM%20Tabela - zapytanie wysyłane w języku SQL do bazy danych poprzez komponent ODBC.

Zapisz powyższy oznacza:

SELECT * FROM Tabela

Co można przetłumaczyć: Wyselekcjonuj zawartość wszystkich kolumn z tabeli Tabela.

Zapis %20 oznacza przerwę między literami (spację). Używanie tego zapisu jest konieczne, ponieważ treść, która stanowi wartość właściwości Data source obiektu Basic Charts jest interpretowana przez Generator jako adres URL (tyle, że specyficzny). Znak &, oddziela poszczególne elementy adresu od siebie;

Teraz wystarczy opublikować animację. Obraz, który uzyskamy będzie wyglądał tak jak na rysunku 7.8.

Rysunek 7.8. Wynik zapytania SQL do bazy danych db1.mbd widoczny na wykresie słupkowym

Łączenie z bazą danych przy pomocy skryptów

Nie zawsze bezpośrednie połączenie z baza danych jest dobrym rozwiązaniem. Czasami dane będące odpowiedzią bazy danych na zapytanie SQL wymagają obróbki zanim zostaną ostatecznie wysłane do klienta (Generatora w procesie przetwarzania szablonu SWT). Jedynym sposobem, który umożliwia jednoczesną komunikację z bazą danych i przetwarzanie otrzymanych z niej wyników, jest tworzenie skryptów wykonywanych na serwerze. W ćwiczeniu, które znajduje się poniżej napiszemy skrypt ASP, który łączy się z bazą danych db1.mdb i komunikuje się z nią przy pomocy zapytań SQL.

  1. Upewnijmy się, że mamy uruchomioną usługę serwera WWW.

W tym ćwiczeniu korzystamy ze źródła danych, które stworzyliśmy w poprzednim przykładzie.

  1. Otwórzmy notatnik i wpiszmy do niego następujący tekst:

Value, Color

<%

'Tworzenie obiektu łączącego

Set Polaczenie = Server.CreateObject("ADODB.Connection")

'Otwieranie połączenia z bazą danych

Polaczenie.Open "Baza"

'Proste zapytanie SQL, przypisywane do zmiennej

ZapytanieSQL = "SELECT * FROM Tabela"

'Inicjowanie obiektu Kolumny jako wyniku zapytania SQL

Set Kolumny = Polaczenie.Execute(ZapytanieSQL)

'Pętla Do Until ... Loop jest wykonywana dopóki w obiekcie Kolumny

'znajdują się elementy z tabeli Tabela

Do Until Kolumny.EOF

'Wysyłanie kolejnych wartości z kolumny Value do klienta

Response.Write (Kolumny("Value"))

Response.Write (", ")

'Wysyłanie kolejnych wartości z kolumny Color do klienta

Response.Write (Kolumny("Color"))

'Przejście do nowego wiersza

Response.Write Chr(13)

'Następny element obiektu Kolumny

Kolumny.MoveNext

Loop

%>

Zapiszmy stworzony przed chwilą plik w katalogu domowym serwera WWW pod nazwą skryptDB.asp. Dokładne informacje o sposobie tworzenia połączenia z bazą danych znajdziemy w rozdziale 3. „Podstawy ASP”.

Jak widać z powyższego skryptu, baza danych w tym wypadku może być zupełnie dowolna, a dokładniej, tabela, z której odczytywane są dane dla obiektów Generatora nie musi zawierać specyficznych kolumn (np. Color i Value), ponieważ to w skrypcie następuje interpretacja danych otrzymanych z tabeli (zwróćmy uwagę, że na początku skryptu znajdują się słowa Value oraz Color).

Ów mechanizm komunikacji z bazą danych jest bardziej skomplikowany niż ten omówiony w poprzednim ćwiczeniu, ale za to nie narzuca projektantowi bazy danych żadnych ograniczeń. Jest to szczególnie ważne gdy baza danych tylko przy okazji stanowi źródło danych dla obiektów Generatora (dla serwisu WWW), natomiast jej podstawowym zadaniem jest gromadzenie informacji o klientach, produktach, itp. oraz udostępnianie tych danych personelowi organizacji lub firmy w przyjazny sposób.

  1. Otwórzmy skrypt w przeglądarce internetowej, aby sprawdzić jego poprawność. Gdy wyświetlimy źródło dokumentu, który znajduje się w oknie przeglądarki, powinno ono wyglądać następująco:

Value, Color

15, #ad3212

16, #5467ac

74, #edcf13

34, #34adcf

100, #2343ad

5, #4356ff

64, #1276ff

124, #65ffcd

45, #54dcfa

25, #98f3a2

Analizując otrzymane wyniki możemy bardzo szybko ocenić czy skrypt jest poprawny, porównując to co otrzymamy z danymi w bazie, z którą się komunikujemy. Jeśli gdzieś w skrypcie wystąpią błędy można je poprawić i nacisnąć przycisk Odśwież (Refresh) w przeglądarce internetowej, aby zobaczyć ponownie wyniki.

  1. Wróćmy teraz do Flasha i jako wartość właściwości Data source obiektu Basic Chart, podajmy ścieżkę dostępu do stworzonego przed chwilą skryptu.:

http://localhost/skryptDB.asp

Po opublikowaniu animacji powinniśmy uzyskać obraz jak na rys.7.8.

Podsumowanie

W tym rozdziale poszerzyliśmy swoją wiedzę na temat źródeł danych, które są nieodzowne dla szablonów Generatora. Dowiedzieliśmy się w jaki sposób ładować dane z pliku tekstowego poprzez URL, jak wykorzystać skrypty ASP, do tworzenia danych dla obiektów Generatora, oraz w jaki sposób komunikować się bezpośrednio z bazą danych, która w praktyce jest najczęstszym źródłem danych dla obiektów Generatora umieszczonych w jego szablonach SWT.

Możemy teraz przejść do trzeciej i ostatniej części tej książki pt. „Budowanie serwisów”, w której dowiemy się z rozdziału 8. „Publikowanie szablonów” jak publikować gotowe szablony SWT, tak aby można z nich było korzystać na stronach internetowych a w rozdziale 9. „Przykładowy projekt - Wirtualna Księgarnia” poznamy w jaki sposób stworzyć przy pomocy programu Dreamweaver 4.0 niezbyt skomplikowany serwis księgarni internetowej, zawierający szablony SWT.



Wyszukiwarka

Podobne podstrony:
wyklad 14 15 2010
wyklad badania mediow 15 i 16
15 ROE
15 Sieć Następnej Generacjiid 16074 ppt
wyklad 15 chemiczne zanieczyszczenia wod 2
Wykład 1 15
15 Uklady PLL i t s
Ćwiczenia i seminarium 1 IV rok 2014 15 druk
15 Fizjologiczne funkcje nerek
wykład 15 bezrobocie 2013
ustawa o dzialalnosci leczniczej z 15 kwietnia 2011
15 Wyposażenie Auta 1 33
Giddens środa 17 15
15 10 2010 Polityka przemysłowa i polityka wspierania konkurencjiid 16086 ppt

więcej podobnych podstron