+ All Categories
Home > Documents > Flash MX 2004 pro vývojáře webových aplikací

Flash MX 2004 pro vývojáře webových aplikací

Date post: 07-Mar-2016
Category:
Upload: zoner-software-as
View: 224 times
Download: 2 times
Share this document with a friend
Description:
Flash MX 2004 pro vývojáře webových aplikací
73
Nate Weiss © Foto: Jiří Heller Flash MX 2004 pro vývojáře webových aplikací PROFESSIONAL Flash MX pro serverové „zažrance“ pracující v ColdFusion, ASP.NET, Java... Využití Flashe při tvorbě dynamických webových aplikací. Komunikace se servery, výměna dat, načítání a rozklad XML, připojování k webovým službám a další pokročilá témata. Ukázkové příklady kódu na straně serveru ve formě pro ColdFusion, ASP.NET a Java/J2EE. Flash a sezení, cookies, formuláře a ověřování dat, práce s obrazovkami... www.zonerpress.cz E N C Y K L O P E D I E W E B D E S I G N E R A
Transcript
Page 1: Flash MX 2004 pro vývojáře webových aplikací

CYAN MAGENTA YELOW BLACK CYAN MAGENTA YELOW BLACK

CYAN MAGENTA YELOW BLACKCYAN MAGENTA YELOW BLACK

Nate Weiss

© Foto: Jiří Heller

Flash MX 2004pro vývojáře

webových aplikací

P R O F E S S I O N A L

• Flash MX pro serverové „zažrance“ pracující v ColdFusion, ASP.NET, Java...

• Využití Flashe při tvorbě dynamických webových aplikací.

• Komunikace se servery, výměna dat, načítání a rozklad XML, připojování k webovým službám a další pokročilá témata.

• Ukázkové příklady kódu na straně serveru ve formě pro ColdFusion, ASP.NET a Java/J2EE.

• Flash a sezení, cookies, formuláře a ověřování dat, práce s obrazovkami...

www.zonerpress.cz

Tato kniha je speciálně určena webovým vývojářům – serverovým „kejklířům“–, kteří se chtějí naučit, jak pomocí Flashe zdokonalit své webové aplikace. Vývojové a programovací postupy ve Flashi se zde učí praxí, vytvářením ukázkových objektů a vizuálních rozhraní, při-čemž všechny předvádějí jistý druh integrace se serverem. Proč byste se měli nejdříve učit Flash, a teprve pak o integraci dat? Tato kniha vás naučí obojí najednou. Všechny příklady v knize obsa-hují jak kód na serveru, tak i kód u klienta. Oba kódy spolupracují tak, aby prezentovaly vaše data působivě a interaktivně. Ukázky zahrnují posouvací rozhraní, sdílené prvky dat, animované sloupcové grafy, zobrazování v reálném čase a řadu dalších. Ve všech příkladech jsou k dispozici samostatné kódy na serveru pro vývojáře ColdFusion, ASP.NET a Java. Kromě toho se velmi pečlivě vysvětluje kód u klienta, s čet-nými poznámkami a křížovými odkazy na dokumentaci Macromedia. Mezi klíčová témata patří:

• Integrace klientských rozhraní Flashe se servery v ColdFusion, ASP.NET nebo Java.

• Výměna dat mezi klientem a serverem přes čistě textové soubory nebo XML.

• Volání metod na serveru pomocí Flash Remoting, nebo webových služeb.

• Udržování a sdílení stavu mezi

rozhraními Flashe a webovými sezeními.

• Programování ve skriptovacím jazyku ActionScript 2.0.

• Budování rozkošných formulářů pomocí Flashe

• Připojování sad záznamů k vizuálním ovládacím prvkům pomocí nových databázových schopností Flashe...

pro vývojářewebových aplikací

Flash MX 2004PROFESSIONAL

Nate Weiss

Zoner Press tel.: 532 190 883 fax: 543 257 245e-mail: [email protected]://www.zonerpress.cz

ZONER software, s.r.o., Koželužská 7, 602 00 Brno

E N C Y K L O P E D I E W E B D E S I G N E R A

Pod tímto logem vycházejí publikace určené pro každého, kdo se za-jímá o tvorbu webových stránek. Od ryze praktických příruček a prů-vodců až po komplexní publikace o všem, co potřebuje webdesignér při každodenní práci. Na slevy, které můžete získat, a vydavatelský plán, v němž vedle knih domácích odborníků najdete celou řadu titulů světově uznávaných autorů, se informujte na adrese vydavatelství. Věrným čtenářům je určen výhodný PRÉMIOVÝ PRÉMIOVÝ PLUSPLUS PROGRAM PROGRAM.

ZONER software, s.r.o. významný producent software v oblasti digitální fotografie,

počítačové grafiky a multimédií, poskytovatel internetových

služeb, souvisejících s prezentací na internetu a e-komercí,

a nakladatelství odborné literatury.

www.zoner.cz

9 7 8 8 0 8 6 8 1 5 1 2 1

ISBN 80-86815-12-9KATALOGOVÉ ČÍSLO: ZR411

E N C Y K L O P E D I E W E B D E S I G N E R A

© F

oto:

Jiří

Hel

ler,

ww

w.h

elle

r.cz

Foto

grafi

e z

nabí

dky

foto

bank

y H

ELLE

R.CZ

NateWeiss

ENCYKLOPEDIE WEBDESIGNERA

FLAS

HAS

H P

RO

FE

SS

ION

AL

MX

2004

pr

o vý

vojá

ře

web

ovýc

hw

ebov

ých

apli

kací

apli

kací

flash_geeks.indd 1flash_geeks.indd 1 1.10.2004 12:37:021.10.2004 12:37:02

Page 2: Flash MX 2004 pro vývojáře webových aplikací

Flash MX Professional 2004pro vývojáře webových aplikací

Page 3: Flash MX 2004 pro vývojáře webových aplikací
Page 4: Flash MX 2004 pro vývojáře webových aplikací

Nate Weiss

pro vývojáře

Flash MX 2004PROFESSIONAL

webovýchaplikací

Page 5: Flash MX 2004 pro vývojáře webových aplikací

Authorized translation from the English language edition, entitled MACROMEDIA FLASH MX PROFESSIONAL 2004 FOR SERVER GEEKS, 1st Edition, 0735713820 by WEISS, NATE, published by Pearson Education, Inc, publishing as New Riders, Copyright © 2004 by Nate Weiss.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. CZECH language edition published by ZONER software s.r.o., Copyright © 2004

Autorizovaný překlad anglického vydání nazvaného MACROMEDIA FLASH MX PROFESSIONAL 2004 FOR SERVER GEEKS, první vydání, 0735713820 autor WEISS, NATE, vydal Pearson Education, Inc, ve vydavatelství New Riders; Copyright © 2003 New Riders Publishing.

Všechna práva vyhrazena. Žádná část této publikace nesmí být reprodukována nebo rozšiřována žádnou formou nebo způsobem, elektronicky ani mechanicky, včetně fotokopií a natáčení, ani žádnými jinými systémy pro ukládání dat bez výslovného svolení Pearson Education, Inc. České vydání vydal ZONER software s.r.o., Copyright © 2004.

Macromedia Flash MX Professional 2004 pro vývojáře webových aplikacíAutor: Nate Weiss

Copyright © ZONER software s.r.o. Vydání první v září 2004. Všechna práva vyhrazena.

KATALOGOVÉ ČÍSLO: ZR411

Zoner PressZONER software s.r.o.Koželužská 7, 602 00 Brno

Překlad: RNDr. Jan Pokorný

Odpovědný redaktor: Ing. Pavel Kristián

DTP: Pavel (Mr.Penguin) Kristián

© Cover foto: Jiří Heller, HELER.CZ s.r.o., www.heller.cz

© Cover a layout: Ing. Pavel Kristián

Informace, které jsou v této knize zveřejněny, mohou byt chráněny jako patent. Jména produktů byla uvedena bez záruky jejich volného použití. Při tvorbě textů a vyobrazení bylo sice postupováno s maximální péčí, ale přesto nelze zcela vyloučit možnost výskytu chyb.

Vydavatelé a autoři nepřebírají právní odpovědnost ani žádnou jinou záruku za použití chybných údajů a z toho vyplývajících důsledků.

Všechna práva vyhrazena. Žádná část této publikace nesmí být reprodukována ani distribuována žádným způsobem ani prostředkem, ani reprodukována v databázi či na jiném záznamovém prostředku či v jiném systému bez výslovného svolení vydavatele s výjimkou zveřejnění krátkých částí textu pro potřeby recenzí.

Veškeré dotazy týkající se distribuce směřujte na:

Zoner Press ZONER software s.r.o. Koželužská 7, 602 00 Brno

tel.: 532 190 883, fax: 543 257 245 e-mail: [email protected] http://www.zonerpress.cz

ISBN 80-86815-12-9

Page 6: Flash MX 2004 pro vývojáře webových aplikací

5

Přehled Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Část I Rychlý vstup do Flashe 23 Seznamte se s Flashem . . . . . . . . . . . . . . . . . . . . . . . 25

Vaše první rozhraní ve Flashi . . . . . . . . . . . . . . . . . . . . 43

Kopeme víc do hloubky . . . . . . . . . . . . . . . . . . . . . . . 91

Část II Klíčové pojmy Flashe z hlediska vývojáře 119 Slabikář ActionScriptu . . . . . . . . . . . . . . . . . . . . . . 121

Animační klipy jako objekty. . . . . . . . . . . . . . . . . . . . 177

Část III Připojování k datům 213 Připojování k serverům pomocí čistých textových souborů . . . . . . 215

Připojování k serverům pomocí XML . . . . . . . . . . . . . . . 249

Připojování k serverům pomocí Flash Remoting . . . . . . . . . . . 283

Připojování k serverům pomocí webových služeb . . . . . . . . . . 335

Část IV Využívání Flashe pro sběr dat 383 Flash a sezení . . . . . . . . . . . . . . . . . . . . . . . . . . 385

Budování lepších formulářů s Flashem . . . . . . . . . . . . . . . 429

Část V Dodatky 479 Připomínky k budování komponenty SimpleBarChart . . . . . . . . 481

Politiky přístupu k datům přes domény v přehrávači Flashe 7 . . . . . 507

Rejstřík . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513

Tabulky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526

Výpisy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527

Page 7: Flash MX 2004 pro vývojáře webových aplikací

6 FLASH MX Professional 2004 pro vývojáře webových aplikací

Page 8: Flash MX 2004 pro vývojáře webových aplikací

ObsahO autorovi 15O odborných recenzentech 15Poděkování 16Sdělte nám svůj názor 18

Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Mé vlastní prvotní zážitky s Flashem 19Komu je kniha určena? 20Pro koho kniha vhodná není? 20

Závěrem... 21

Část I Rychlý vstup do Flashe 23 KAPITOLA 1 Seznamte se s Flashem . . . . . . . . . . . . . . . . . . . . . . . 25

Proč Flash? 25Co se v něm hodí pro vás? 26Jak se Flash připojuje k serverům 26

Jaké jazyky budete používat 27Stručná lekce z terminologie 28Historický vývoj Flashe 30Stručná projížďka integrovaným vývojovým rozhraním Flashe 32

První pohledy 32Časová osa 34Panel nástrojů 35Plocha 35Panel komponent 36Panel akcí 37Panel vlastností 37Panel nápovědy 37

Příprava vašeho serveru pro příklady knihy 38Příprava databáze 38Příprava softwaru serveru, který jste si zvolili 39Umístění ukázkových souborů do kořenové složky dokumentů webového serveru 41

Shrnutí 41

KAPITOLA 2 Vaše první rozhraní ve Flashi . . . . . . . . . . . . . . . . . . . . 43Příprava: dodávaní dat do Flashe 43

Kódování dat pro Flash ve formě prostých „proměnných“ 44Jak se to udělá v ColdFusion 45Jak se to udělá v ASP.NET 47

7

Page 9: Flash MX 2004 pro vývojáře webových aplikací

8 FLASH MX Professional 2004 pro vývojáře webových aplikací

Jak se to udělá s Javou 51Budování Flashového rozhraní 52

Přidávání vizuálních prvků 52Načtení a zobrazení dat pomocí ActionScriptu 55Publikování a testování rozhraní 61Přístup k animačnímu klipu z hlavní časové osy 63

Vytváření navigace pomocí tlačítek a XML 64Dodávání informací do Flashe v podobě XML 65Dodávání XML z ColdFusion 66Dodávání XML z ASP.NET 67Dodávání XML z Javy 68Rychlé seznámení s objektem XML Flashe 69Prohlížení výstupů generovaných příkazy trace 72Načtení externího SWF při běhu 73Vytváření prostých tlačítek reagujících na přítomnost kurzoru myši 75Přidání ActionScriptu událostem tlačítka 79Vytvoření ArtistButtonClip pro každého hudebníka při běhu 81Otestování tlačítek 83

Přidání rozhraní do webové stránky 84Kopírování a vkládání HTML 84Relativní versus absolutní URL pro načítání dat serveru 88Hej, mrkněte se na velikost tohoto souboru! 88

Tak co, nebylo to až tak hrozné, že? 89Shrnutí 89

KAPITOLA 3 Kopeme víc do hloubky . . . . . . . . . . . . . . . . . . . . . . . 91Co je to knihovna a symboly 91

Symboly a instance 92Další schopnosti dostupné v knihovně 95

Co je časová osa 96Časová osa v IDE Flashe 96Přidání animace pomocí časové osy 97Řízení přehrávání animace z ActionScriptu 101Skok na snímek pomocí názvu, ne pomocí čísla 103Vyrovnání vykreslované animace, aby byla přirozenější 105Rozhodnutí, na který snímek skočit při běhu 105

Doplňující informace o tlačítcích 106Změna vzhledu tlačítka, když se na ně umístí kurzor myši 107Události tlačítka 108Neviditelná tlačítka a snímek Hit 110

Další informace o animačních klipech 111Hlavní časová osa versus časové osy animačních klipů 112Časové osy jako stavový mechanizmus 113

Page 10: Flash MX 2004 pro vývojáře webových aplikací

Obsah 9

Cílové cesty, rodiče a potomci 113Několik slov ke klíčovému slovu this 115Události animačních klipů 116

Co jsou komponenty 116Co bude dál 117Shrnutí 118

Část II Klíčové pojmy Flashe z hlediska vývojáře 119 KAPITOLA 4 Slabikář ActionScriptu . . . . . . . . . . . . . . . . . . . . . . 121

Informace o ActionScriptu 121Vztah ActionScriptu k JavaScriptu a k ECMAScriptu 122Stručná historie 123Co je nového v ActionScriptu 2.0 123

IDE dělá práci za vás 124Umístění a aktivace panelu Actions 124Nástroje panelu Actions 126Pomozte panelu akcí rozpoznat, jakého typu jsou vaše proměnné 129Preference panelu Actions 132Panel nápovědy 133

Základní prvky jazyka 133Komentáře 133Základy syntaxe 134Proměnné 136Podmínkové příkazy 140Výrazy 142Cykly 144

Zábava s datovými typy 147Čísla 147Řetězce 147Datum 148Pole 149Asociativní pole 150

Vytváření vlastních funkcí 151Základy 151Argumenty 151Návratové hodnoty funkcí 153Striktní typování 153Ukládání funkcí do separátních souborů ActionScriptu 154

Vytváření vlastních tříd 155Jak se dají vytvářet nové třídy 156Dědění 167

Page 11: Flash MX 2004 pro vývojáře webových aplikací

10 FLASH MX Professional 2004 pro vývojáře webových aplikací

Reakce na události 169Reakce na události pomocí klasického událostního modelu 170Reakce na události pomocí událostního modelu naslouchajících objektů 172

Shrnutí 174

KAPITOLA 5 Animační klipy jako objekty. . . . . . . . . . . . . . . . . . . . 177Třída MovieClip 177Výuka příkladem: objekt filmového pásu řízený myší 183

Vybudování jednoduchého příkladu, v němž se využije pás 184Členy podomácku vyrobené třídy GestureMovieClip 188Prohlídka kódu GestureMovieClip 190

Animační klipy v knihovně 192Specifikace tříd ActionScriptu 2.0 pro symboly v knihovně 192Připojování animačních klipů z knihovny pomocí identifikátorů vazby 195Změna vzhledu a pozice klipu 198Odstraňování klipů 199

Reakce na pohyby myši 200Drobný úkrok stranou: Plánování volání metod pomocí setInterval() 200Zjištění aktuální pozice kurzoru myši 202Okamžitá aktualizace změn v klipu pomocí updateAfterEvent() 204

Přidávání obsahu do animačních klipů při běhu 205Kreslení čar a obrazců programátorsky 206Vytváření maskovacích klipů programátorsky 207Přeměna klipů na komponenty 210Shrnutí 212

Část III Připojování k datům 213 KAPITOLA 6 Připojování k serverům pomocí čistých textových souborů . . . . . . 215

Práce s třídou LoadVars 215Získávání strukturovaných dat 217Zobrazování strukturovaných dat jako reklamní upoutávky 225Průzkum ukázkového dokumentu newsTicker.fla 226Zachytíme textová data a provedeme jejich rozklad sami 232Výlety tam a zpět: odesílání proměnných na server 238

Další prostředky pro odesílání a načítání proměnných 247Shrnutí 248

KAPITOLA 7 Připojování k serverům pomocí XML . . . . . . . . . . . . . . . .249Práce s třídou XML 249

Stručný přehled terminologie XML 250Členy třídy XML 252

Page 12: Flash MX 2004 pro vývojáře webových aplikací

Obsah 11

Typický způsob práce s XML 255Naplnění svitku řízeného gesty pomocí XML 256

Použití XPath ve Flashi 271Jak vašemu dokumentu zpřístupníte třídu XPathAPI 272Základy práce s XPathAPI 273Konkrétní příklad 274

Práce s komponentou XMLConnector 279Shrnutí 282

KAPITOLA 8 Připojování k serverům pomocí Flash Remoting . . . . . . . . . . . 283Úvod do Flash Remoting 283

Flash Remoting versus webové služby 284Které aplikační servery se podporují? 285Špetka terminologie Remoting 286

Přípravné práce 286Instalace klientských komponent do IDE Flashe 287Instalace komponent na serveru 288

Váš první projekt Flash Remoting 289Kód na serveru 290ASP.NET 291Práce u klienta 293Několik podrobností k adresám URL brány 298Podrobnosti k funkcím odpovědi 301Podrobnosti k reakcím na stavové události 302

Práce se speciálním odlaďovačem Flash Remoting 303Třídy Flash Remoting: miniaturní referenční příručka 304

Třída NetServices: připojování ke vzdálenému serveru 304Třída NetConnection: připojování ke specifické službě 305Třída RecordSet: přístup k výsledkům dotazu 305

Vyspělejší příklad 307Na serveru 308U klienta 310

Flash Remoting a vázání dat 320Spolupráce RecordSet a DataSet 321Úvod do komponenty DataSet 321Přidání komponent pro vázání dat do příkladu Song Rater 323Základní členy třídy DataSet 330

Co jste se o Flash Remoting nedozvěděli 331Postupně načítané sady záznamů 332Podrobnosti vztahující se k serverům 332Pole a jiné datové typy 333Řazení a filtrování sady záznamů u klienta 333

Page 13: Flash MX 2004 pro vývojáře webových aplikací

12 FLASH MX Professional 2004 pro vývojáře webových aplikací

Open Source Remoting – alternativní implementace a nástroje 333Shrnutí 334

KAPITOLA 9 Připojování k serverům pomocí webových služeb . . . . . . . . . . 335Přehled podpory webových služeb ve Flashi 335

Co jsou to webové služby? 335Jak člověk vytvoří webovou službu? 336Několik stručných definic 336Flash jako klient webové služby 338Volby pro připojování k webovým službám 338

Práce s komponentou WebServiceConnector 339Kód na serveru 341Komponenty použité v příkladu Rating Chart 356Referenční příručka komponenty WebServiceConnector 358Základní způsob používání komponenty WebServiceConnector 360Několik slov ke komponentě SimpleBarChart 363Kód ActionScriptu 364

Panel Web Services 369Protokolování činností komponent WebServiceConnector 370Připojování k webové službě pouze pomocí skriptu 371Webové služby a vázání dat 376

Kód na serveru 376Komponenty WebServiceConnector, DataSet a ovládací prvky uživatelského rozhraní 377Změny v kódu ActionScriptu 377

Bezpečnostní politiky Flashe a webové služby jiných výrobců 382Shrnutí 382

Část IV Využívání Flashe pro sběr dat 383 KAPITOLA 10 Flash a sezení . . . . . . . . . . . . . . . . . . . . . . . . . . 385

Pojmy týkající se stavu sezení – stručná rekapitulace 386Předávání proměnných URL a formuláře 387

Krok 1. Předávání proměnných do Flashe 387Krok 2. Předávání proměnných zpět na server 390

Sdílení proměnných sezení s Flashem 393Flash jako účastník sezení 393Udržování stavu sezení bez cookies 395

Sdílení cookies s Flashem 396Uchovávání dat pomocí lokálních sdílených objektů 397

Třída SharedObject 398Jak se souborům SWF umožní sdílet stejné lokální sdílené objekty 400

Page 14: Flash MX 2004 pro vývojáře webových aplikací

Obsah 13

Lokální sdílené objekty a velikostní limity 400Dáme všechno do kupy: sledujeme přihlašování uživatelů 401

Kód na serveru 403Kód u klienta 416Otestujeme to 426

Shrnutí 427

KAPITOLA 11 Budování lepších formulářů s Flashem . . . . . . . . . . . . . . . 429Flash jako motor pohánějící formulářovou prezentaci 430

Výhody a nevýhody formulářů založených na Flashi 430Které ovládací prvky máte k dispozici 432Bohatě vybavené internetové aplikace 433

Základy odesílání formulářů 434Úvod do formulářových obrazovek 436

Dva druhy dokumentů založených na obrazovkách 436Vytváření dokumentů založených na obrazovkách 437Skriptování obrazovkových formulářů 442Připojování kódu ActionScriptu k obrazovkám 446

Úvahy o ověřování platnosti dat na formulářích 449Jednoduché ověřování založené na skriptu 451Ověřování platnosti vázaných dat 454Ověřování platnosti dat v reálném čase na serveru 460Příklad pořizování dat o zákazníkovi 461

Načítání externího obsahu do obrazovek 473Specifikace externího obsahu v době návrhu 473Načítání externího obsahu přes skript 474Přístup k externímu obsahu poté, co se načetl 475Přidání komponenty ProgressBar 475

Shrnutí 478

Část V Dodatky 479 DODATEK A Připomínky k budování komponenty SimpleBarChart . . . . . . . . 481

Informace o komponentách Flashe MX 2004 481Rozdíly mezi komponentami a obyčejnými animačními klipy 482Informace o komponentě SimpleBarChart 483Referenční příručka SimpleBarChart 483Vytvoření komponenty SimpleBarChart 485

Co byste si měli vyhledat ve zdrojovém dokumentu 485Požadované prvky v souboru ActionScriptu komponenty 487Označení vlastností tak, aby byly nastavitelné v době návrhu 489Zdrojový kód ActionScriptu komponenty SimpleBarChart 490

Page 15: Flash MX 2004 pro vývojáře webových aplikací

14 FLASH MX Professional 2004 pro vývojáře webových aplikací

Opětovná kompilace komponenty pro provedení změn 504Shrnutí 506

DODATEK B Politiky přístupu k datům přes domény v přehrávači Flashe 7 . . . . . 507Jak se politika vynucuje 508Vytvoření souboru politiky přes domény 509Záležitosti, které nesmíte pustit se zřetele 510

Obecné věci týkající se souboru politiky 511Soubory politik a verze přehrávače Flashe 511

REJSTŘÍK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .513

TABULKY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526

VÝPISY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527

Page 16: Flash MX 2004 pro vývojáře webových aplikací

O autorovi

Nate Weiss buduje komerční aplikace s různými techno-logiemi webových serverů asi tak 7 či 8 posledních let. V těchto aplikacích používá stále větší počet objektů za-ložených na Flashi, aby se zvýšila použitelnost a kompati-bilita vybraných uživatelských rozhraní.

Nate vystupuje na vývojářských konferencích spo-lečnosti Macromedia a na setkáních uživatelských sku-pin na řadu témat, od XML až po skriptování. Několik let byl členem podpůrné skupiny týmu Macromedia a je-ho příspěvkem byl SDK do projektu Open WDDX. Byl

přispěvovatelem do řady bestsellerů Bena Forty o ColdFusion. Zabývá se i výrobou komponent a podniká různé další experimenty s kódem, které jsou dostupné na jeho webu www.nateweiss.com. Můžete mu psát na [email protected].

O odborných recenzentech

Oba uvedení recenzenti přispívali značnou měrou svými ručně prováděnými expertízami po celou dobu procesu vývoje knihy. Jakmile jsem napsal nějakou kapitolu, prohlédli tito zasvě-cení profesionálové veškerou látku po odborné stránce a prověřili uspořádání i logický sled výkladu. Jejich připomínky byly klíčové proto, aby bylo zajištěno, že text – a soubory Flashe, ActionScriptu, ColdFusion, ASP.NET a Java, které ho doprovázejí – uspokojí touhu čtenářů pro odborných informacích nejvyšší kvality.

John Grden je hlavní vývojář Macromedia Flash u Zing.com a také zakladatel a vlastník AcmeWebWorks.com. Zing.com je dnes přední 3D interaktivní web typu chat. Rozhraní Zing.com je kompletně udělané ve Flashi a pracuje v součinnosti s několika serverovými technologiemi, jako jsou Flash Communication Server MX, ASP a Java. Kromě moderování jedné z nejrozsáh-lejších uživatelských konferencí na internetu vztahujících se k Macromedia, tráví John většinu svého flashového vývojářského času tím, že vytváří jedny z nejpůsobivějších webových flasho-vých her. V současné době je zaměstnaný opětovným vytvářením specifických her založených na populárních akčních seriálech. Nejsou k dispozici jen na jeho webu, ale brzy budou dostupné na www.TheForce.net. John má certifikát Macromedia Flash Designer. Další informace o něm a o tom, co dělá, najdete na AcmeWebWorks.com.

Kathy Hester tráví většinu svého času jako školitelka webových designérů a vývojářů. Když zrovna nevede tréninky, pracuje jako nezávislá designérka. Ve svém volném čase řídí New Orleans ColdFusion User Group a spolu s Hal Helmsem vyučuje metodologii Fusebox. Můžete jí psát na [email protected].

15

Page 17: Flash MX 2004 pro vývojáře webových aplikací

16 FLASH MX Professional 2004 pro vývojáře webových aplikací

Poděkování

Dobrá, pokusím se o to v chronologickém pořadí.Zaprvé musím poděkovat Charlie Arehartovi, nejen za to, že přišel s originálním námětem

na tuto knihu, ale že mi také její projekt přepustil. Bylo to něco v tom stylu, jako když je hollywo-odský režisér požádán, aby adaptoval nějaký oblíbený román nějakého skvělého moderního spi-sovatele: režisér se všemožně snaží, aby zachoval ducha originálu, ale nakonec publikum pokrčí rameny a valný dojem to na ně neudělá. („Jo, docela to ušlo. Kniha je ale lepší.“) Nebo strýček ve velkoměstě, který byl požádán, aby se v létě staral o bratrova puberťáka. („Co se to stalo s mým chlapečkem? Tys mu dovolil ta tetování? To nemáš doma tekoucí vodu? A co to má v nose?“) Každopádně si Charlie myslím, že to jsi v zásadě měl na mysli. Ještě jednou díky.

Musím také poděkovat Benovi Fortovi, patronu vydavatelských činností vztahujících se k Macromedia, že pomohl Charliemu a mně s počátečními nápady pro knihu, odpovídal na mé dotazy a trpělivě mě vybavoval potřebnými informacemi. Když jsem knihu psal, často mi přes levé rameno nakukovalo černé svědomí v podobě miniaturního Bena (fuj, to jsem se lekl – mys-lím, že za mým pravým ramenem zase na mě vybafla Linda), což mě podněcovalo a inspirovalo k tomu, abych své příklady ještě trochu více propracoval a ještě trochu lépe vysvětlil.

Díly patří také Angele Kozlowski, Robinu Dennisovi a Sáře Hohnové, že si udělali čas a po-skytli mi své rady a své profesionální názory na knihu ještě před tím, než jsem ji začal psát.

Děkuji své tetě a svému strýčkovi, Gigi a Donu Spatesovým, za jejich společnost, a za to, že jsem mohl používat při psaní několika prvních kapitol knihy jejich rybník, verandu a dům, na tak příjemném místě, jakým je North Fork na Long Islandu.

Prostřední kapitoly knihy jsem psal v úžasném a krásném městě Seattle ve státě Washington, kde jsem se měl opravdu skvěle, i když jsem pracoval více méně nepřetržitě. Nedokázal bych to, kdyby okolo mě nebyli Heather Greene a Matt Gershoff, mí bezvadní, neuvěřitelně vstříc-ní přátelé a kamarádi na cestách. Mraky díků Pam Robertsonové za to, že byla svolná mě ubyto-vat, že byla svolná vzít za vděk mnou a že byla celkově úžasná, pozitivně naladěná, vstřícná a že byla zrzavá. Díky patří i dalším: Apple a Tucker Martine, Keith, Eric, Floyd, Nineteen Pound Hammer, Jen, Calla, i tomu bezva chlápkovi ve žlutém tričku, že jsem měl tak příjemné zážit-ky. Také Amandě Wilde, Johnovi ráno a dalším DJ u KEXP (www.kexp.org), že mi poskytovali soundtrack. A taky kavárnám, Vita, Vivace, Ladro a Bauhaus, kde jsem trávil celé dny pitím toho nejprímovějšího kafé laté.

Vraťme se zpět do New Yorku. Zde bych chtěl poděkovat Jeanmarie a Stanu Williamsovým za jejich neutuchající podporu při dokončovacích pracích na knize. Všem mým kamarádům v New Yorku za jejich podporu a přátelství a za to, že nezapomněli, že existuji, i když jsem celé měsíce nevytáhl paty z bytu: Heather Greene a Matt Gershoff (ještě jednou), Liz a Andy Gershoff, Melissa Caruso a John Scott, Jenny Turner, Jason Stover, Jason Weeden, Desia a Brian Zumhagen, Rebekkah Linton, Shira Machleder, Dawne Eng, Jennifer Sainato, Lisa, Lars, Lucas a Lea Blackmore, Lee Gregory, Mary Godinho a Stephanie Hawkins. Také jsem zavázán několi-ka báječným veřejným místům na Manhattanu: Rose Reading Room ve veřejné knihovně New

Page 18: Flash MX 2004 pro vývojáře webových aplikací

Poděkování 17

Yorku na 42. ulici, Cafe at HERE a Starbucsk na náměstí Astor (kde jsem byl jedním z několika otřesně vypadajících pozdně nočních návštěvníků). V Brooklynu: Flying Saucer Café, Ozzie’s na Páté a nový Tea Lounge na Union.

Velmi moc děkuji slečně Jen deHaan, která se potýkala se spoustou čtení beta-fór, se spoustou psaní ActionScriptu, se spoustou žádostí o posuvníky, se spoustou důvěrných dohod. Neobyčejně vitální vývojářka a designérka, která stahovala své zprávy i v parných letních večerech, kdy kaž-dý, komu ještě zbylo trochu zdravého rozumu, vypadl z New York City někam na zelené pláně Ohia.

Díky za podporu patří samozřejmě mé matce Sally, mé sestře Liz, mé sestřenici Carrie a pří-teli mé sestry Kenovi. Možná si to nemyslíte, ale všichni jste mi s tím moc pomohli. Díky také mému bratrovi Jonovi a mému otci Georgovi, že v duchu byli při mě.

Díky patří mým absolutně báječným odborným recenzentům, Kathy Hester a John Grden, za veškerou jejich pomoc, vedení a trpělivost, když jsem prozkoumával všechny možné škvíry, které oni už dobře znali. Konkrétně, Johne, ty jsi byl absolutně skvělý – a i když jsem ve Flashi o celou knihu dál, nedostal jsem se o nic blíž k tomu, abych pochopil, jak jsi dal dohromady ty kouzel-né hry Star Wars.

Asi největší díky patří všem dobrým lidem u New Riders, kteří se postarali o to, abyste kni-hu dostali do rukou. Někteří lidé dělají týmovou práci a podporu docela dobře, ale tyto bohyně odborného publikování vynesly frázi „skupinové úsilí“ na zcela novou úroveň. Tisíceré díky mé vydavatelce, Stephanie Wall, že věřila v můj projekt, postrkovala mě po telefonu dopředu, a tu a tam vyházela některé mé lajdáckosti. Miliardy díků jdoucích přímo od srdce patří mé editorce, Lindě Bump, za její neuvěřitelnou, neochvějnou podporu a porozumění, a za to, že mě po celou dobu motivovala a dodávala mi dobrou náladu.

Nesčetné díky patří také mému korektorce, Jill Batistick, která tak pečlivě dohlížela na to, jak se vyjadřuji, vždy byla na mé straně, vydržela to se mnou, a vypořádala se s všemi mými nekon-zistencemi a hloupém tvrdošíjném trvání na jistých frázích.

A děkuji také Tobě, laskavý čtenáři a excentrický kámoši serveru – ať jsi kdo jsi a kde jsi. Máš-li nějaké potíže, dotazy nebo komentáře, klidně mi napiš na [email protected]. Možná nebu-du sto na všechny dotazy odpovědět, ale udělám, co budu moci.

-Nate

Page 19: Flash MX 2004 pro vývojáře webových aplikací

18 FLASH MX Professional 2004 pro vývojáře webových aplikací

Sdělte nám svůj názor

Jako čtenáři knihy jste pro nás těmi nejdůležitějšími kritiky a komentátory. Vážíme si vašeho názoru, proto bychom rádi věděli, co děláme dobře a co bychom mohli dělat lépe, které oblas-ti byste chtěli rozebrat podrobněji. Oceníme i jakékoli jiné připomínky, které jste ochotni nám předat.

Jakožto hlavní redaktorka zodpovědná za příspěvky u New Riders Publishing vítám vaše ko-mentáře. Můžete mi poslat fax, e-mail, případně mi napsat normálně o tom, co se vám na knize líbí nebo nelíbí. Nebo co bychom měli udělat, aby byly naše knihy poutavější. Pokud mi napí-šete, nezapomeňte prosím připsat název knihy, ISBN a jména autorů, a také vaše jméno a tele-fon nebo fax. Vaše připomínky si pečlivě přečtu a podělím se o ně s autory a s redaktory, kteří na knize pracovali.

Vezměte prosím na vědomí, že vám nemohu pomoci s odbornými problémy, které se vztahu-jí k tématům knihy, a že vzhledem k vysokému počtu emailů, které dostávám, možná nebudu sto odpovědět na každou zprávu.

Fax: 317-428-3382e-mail: [email protected]šta: Linda Bump Senior Acquisitions Editor New Riders Publishing 800 East 96th Street, 3rd Floor Indianapolis, IN 46240 USA

Čtenáři českého překladu knihy mohou využít kontakt na vydavatele – Zoner Press:Zoner PressZONER software s.r.o.Koželužská 7602 00 Brno

Telefon: 532 190 883Fax: 543 257 245e-mail: [email protected]://www.zonerpress.cz

Page 20: Flash MX 2004 pro vývojáře webových aplikací

Úvod

Milá čtenářko, milý čtenáři,

začátkem roku jsem měl zajímavý telefonický hovor. Volal mi můj vysoce vážený kolega Charlie Arehart. Poskytuje poradenství a výuku všeho druhu pro webové vývojáře – obzvláště pro ty, kdo pracují pro firmy, které užívají technologie společnosti Macromedia. Charlie mi vysvětlil, že dostává stále víc a víc požadavků na informace a výuku ohledně napojení front-endů Flashe na databáze a na jiné back-endové systémy. A požadavky že přicházejí ne od dlouhodobých uživa-telů Flashe, ale od nadšených přívrženců ColdFusion, od vývojářů ASP.NET a od programáto-rů Javy.

Problém je v tom, vysvětloval Charlie, že není dost knih o Flashi, o které by se mohl webový vývojář opřít. Jistě, existuje spousta obecných knih o Flashi, a většina z nich má na konci jednu či dvě kapitoly o integraci se serverem. Existuje sice pár knih, které se plně věnují technologiím integrace se specifickými servery, jako jsou Flash Remoting nebo Flash Communication Server, ty ale zase mají sklon předpokládat, že už je čtenář ve Flashi jako doma. Na stejném předpokla-du bývají založeny i knihy o programování v ActionScriptu ve Flashi.

Protože nejsou k mání knihy, které by byly napsané přímo pro webové vývojáře, musejí si skoupit mnoho různých knih, a z každé přečíst několik málo kapitol. Nebo se musejí pokusit na-učit se všechno sami. Online jsou sice dostupné menší nebo větší porce informací v podobě ná-vodů, článků databáze vědomostí, uživatelských fór, webových uživatelských skupin a dokonce i tištěných časopisů, ale vyhledat všechny potřebné informace dá práci, a zabere to také dost času – a čas je něco, co vývojáři prostě nemají nazbyt.

Takže Charlieho idea byla, že by se měla o Flashi napsat taková kniha, která by považovala webové vývojáře za občany první kategorie. Kniha by měla vývojáře dostat „za vodu“, aniž by je nutila trávit mládí informacemi o kreslení, animacích a designu. Kniha že by se neměla snažit, aby obsahovala všechno pro všechny. Že by se měla soustředit na ty aspekty Flashe, o které se bu-dou nejvíce zajímat vývojáři.

Byl jsem pro?Samozřejmě. Přesně po takové knize jsem toužil, když jsem se sám učil Flash. Když už o tom

mluvím...

Mé vlastní prvotní zážitky s FlashemPřed několika lety jsem usoudil, že by se mi v dynamických webových aplikacích, které jsem tehdy vytvářel, mohl hodit Flash. Požadavky kladené na projekt volaly po tricích, které se rodi-ly opravdu v bolestech, když jste je měli dělat pomocí obvyklých technik skriptování u klienta a HTML. O Flashi jen nevěděl prakticky nic, jen jsem už jistou dobu sledoval vývoj technologií. Bylo mi známo, že stále víc a víc lidí Flash využívá pro shromažďování a prezentování aktuálních

19

Page 21: Flash MX 2004 pro vývojáře webových aplikací

20 FLASH MX Professional 2004 pro vývojáře webových aplikací

informací z databází a tak podobně. Takže jsem si řekl, že by nemělo být příliš obtížné, aby Flash dělal to, co potřebuji.

A skutečně, nebylo to příliš obtížné. Problém byl v tom, že to ale nebylo nijak zvlášť snad-né. Při práci jsem se stále nemohl zbavit dojmu, že jsem se ocitl někde, kde ale vůbec nejsem jako doma. Pracovní prostředí Flashe bylo evidentně vyvinuté pro umělce a grafické designéry – a zdálo se, že je posedlé abstraktními pojmy, jako jsou gradientní barvy a časové osy, které mi k ničemu nebyly. Připadalo mi to, jako kdybych vpadl na večírek umělecko průmyslové školy – milé a příjemné místo na návštěvu, ale ne místo, kde bych to se svým talentem někam dotáhl.

Kromě všeobecného pocitu, že jsem mimo, byla tu také fakt, že ty části Flashe, které by mi vy-pomohly při komunikaci s mým serverem, jsem poněkud postrádal. Jistě, mohl jsem volat svůj server a vyměňovat data, ale celý proces vypadal trochu sflikovaný. Zdálo se mi, že chybí jasný, strukturovaný model pro budování takových rozhraní, jaké jsem chtěl pro své uživatele.

To se všechno stalo už před nějakou dobou, kdy aktuální verzí byl Flash 4. Od té doby ušel dlouhou cestu. Většina věcí, která byla obtížná, je snazší. S každou novou verzí jsou také stále vy-spělejší schopnosti týkající se připojování k serverům. Současný Flash je plnohodnotný nástroj pro vývoj aplikací právě tak jako pro design, pokud víte, jak s ním pracovat. Je to skvělý produkt, schopný podivuhodně různorodých věcí a zažijete hodně radosti a zábavy, když se s ním sezná-míte.

Komu je kniha určena?Knihu jsem napsal pro vývojáře webových aplikací, kteří neznají Flash, kteří ho ale chtějí využít ve svých internetových/intranetových/extranetových aplikacích. V ideálním případě se poměrně málo zajímáte o vytváření obrovitých „čistě Flashových“ webů, které používají Flash proto, aby se vyhnuly zážitkům s prohlížeči. Spíše se zajímáte o občasné využití Flashe při řešení specifických úloh, které nejde snadno vyřešit tradičními technikami HTML a skriptování.

Abyste z knihy vytěžili co nejvíc, musíte znát alespoň jedno z těchto vývojových prostředí: ColdFusion MX, ASP.NET nebo Java/ JSP/J2EE. Pracujete-li s PHP, Perlem nebo s jiným prostře-dím pro vývoj webových aplikací, i tak vám kniha pomůže, budete si ale muset kód na straně ser-veru přizpůsobit tak, aby pracoval ve vašem prostředí. (Adaptace by neměla být příliš náročná, protože jsem se snažil kód týkající se serveru udržet tak jednoduchý, jak to jen šlo.)

Pro koho kniha vhodná není?Dobrá otázka. Jak to vidím já, není pro vás kniha vhodná tehdy, když je pravdivé alespoň jedno z následujících tučných konstatování:

• Neznáte servery. Kniha byla napsána pro lidi, kteří rozumějí vývoji aplikací s ColdFusion, ASP. NET nebo ve stylu J2EE. Lidem, kteří používají Perl nebo PHP, se může kniha také ho-dit, protože většinu příkladů velmi snadno předělají do svého jazyka. Pokud ale o vývoji na straně serveru nevíte nic, budete z většiny příkladů – řekněme – zmateni.

Page 22: Flash MX 2004 pro vývojáře webových aplikací

Úvod 21

• Chcete se dozvědět všechno o Flashi. Kniha se záměrně vyhýbá tomu, aby se snažila naučit vás o Flashi vše, co potřebujete znát. Flash je totiž příliš rozsáhlý produkt, takže se neda-jí v rozumném rozsahu kompletně vysvětlit všechna témata. Proto se soustřeďujeme na ta-kové schopnosti, které pravděpodobně budete potřebovat hned, a abyste také mohli začít budovat aplikace Flashe pracující s daty s uspokojivým pohodlím. Chcete-li se naučit Flash zgruntu, raději se poohlédněte po jiné knize.

• Používáte starší verzi Flashe a nechcete se trápit s přizpůsobováním příkladů. Přestože jsou obecné principy probírané v knize většinou aplikovatelné i na starší verze, mnohé konkrét-ní příklady závisejí na schopnostech obsažených ve vydání MX 2004. Všeobecně řečeno, kapitoly 1 až 8 jsou použitelné v jakékoli rozumné nepříliš staré verzi Flashe (verze 5 a no-vější). Kapitoly 9 až 11 se dají použít jen s verzí Flash MX 2004 Professional. (Chcete-li se dozvědět podrobnosti o tom, co je nového ve Flashi MX 2004, skočte hned do kapitoly 1, „Seznámení s Flashem“.)

Za předpokladu, že nepatříte ani do jedné ze tří výše uvedených skupin, vybízím vás, abys-te teď prolistovali několik kapitol, podívali se na pár obrázků, a přitom se mrkli na kód několika příkladů. Jestliže se vám zdá, že by se daly adaptovat na problémy, které máte řešit, kupte knihu a začněte s ní pracovat. Jestliže ne, je asi nejlepší, když se naše cesty rozejdou (mějte ale knihu v povědomí, co kdyby se hodila některému z vašich známých!).

Závěrem...

Jestliže jste se pro knihu rozhodli, věřím, že vám hodně pomůže na cestě k tomu, aby se Flash stal součástí vašich nových i existujících webových aplikací. Zlomte vaz a užívejte si!

- Nate Weiss

Page 23: Flash MX 2004 pro vývojáře webových aplikací

43

kapitola

Vaše první rozhraní ve Flashi

V kapitole 1, „Seznámení s Flashem“, jste se dozvěděli něco málo o Flashi, co pro vás, jakož-to webového vývojáře, může znamenat. Také jste se něco dozvěděli o vývojovém prostředí. V kapitole 2 stavím na těchto základech a ukážu vám, jak se vybuduje prosté, ale funkční rozhra-ní Macromedia Flashe, které zobrazí informace získané při běhu z vašeho serveru. V průběhu prací se také něco dozvíte o ActionScriptu, animačních klipech, oborech proměnných a dalších pojmech Flashe a o terminologii.

Naše první flashové rozhraní bude zobrazovat informace o hudebnících z ukázkové databá-ze Venue. Nejprve dáme dohromady jednoduchý kód na serveru, který „dodá“ informace o hu-debnících do Flashe. Pak sestavíme prosté uživatelské rozhraní, které získané informace zobrazí v přehrávači Flashe.

Skočíme tady do toho po hlavě a rovnou na hloubku. No dobrá, možná se neponoříme až tak hluboko (potápění ve skafandru přijde později). Půjde-li vám při čtení kapitoly trochu hlava ko-lem, nic si z toho nedělejte. Šlo mi jen o to, abyste se osmělili a ponořili tak rychle, jako je to jen možné – podrobnosti přijdou později. Abych to řekl jinak: pojďte, ve vodě je príma!

Příprava: dodávaní dat do Flashe

V knize chápeme Flash většinou jako „klientskou“ část volně definované aplikace typu klient/server. Máte informace nebo logiku, které sídlí na vašem serveru, a chcete je vystavit pomocí Flashe nějakým zajímavým nebo pohodlným způsobem vašim uživatelům. Proto vyžaduje vět-šina projektů Flashe v této knize jistou porci kódu na serveru (napíšete ho v jakémkoli jazyce, který je vhodný pro váš oblíbený aplikační server), plus něco skriptů u klienta, které budou v in-terakci s kódem na serveru, aby získaly data, aktualizovaly je, nebo jinak manipulovaly s daty do-stupnými v části na straně serveru.

Jistě máte už v tomto místě spoustu otázek, jako „Jak přesně dodám data do Flashe?“ a „Jaký formát musí data mít, aby je Flash zvládl?“ a „Když má Flash nějaké informace, jak je zobrazím uživateli?“ No, to jsou opravdu skvělé otázky, takže vám na ně dám stručné odpovědi hned teď. (Dlouhé odpovědi tvoří vlastně většinu textu knihy.)

Data můžete do Flashe dostat kteroukoli z těchto technik:

• Jako čistý text. Váš server dodá text, který je složený z dvojic název/hodnota, a se stejný-mi symboly & a =, které používáte v části URL zvané „dotazovací řetězec“. Flash získá text a zpřístupní dvojice název/hodnota ActionScriptu jako prosté řetězcové proměnné.

Page 24: Flash MX 2004 pro vývojáře webových aplikací

44 FLASH MX Professional 2004 pro vývojáře webových aplikací

• Jako XML. Flash získá XML z vašeho serveru, udělá jeho rozklad a učiní různé prvky a atri-buty v XML dostupnými pro ActionScript jako objekty. Pokud vám to pomůže, dívejte se na funkcionalitu XML pojmově jako na jistou obdobu rozhraní ve stylu SAX nebo DOM, které poskytují jiné parsery XML.

• Prostřednictvím Flash Remoting. Flash Remoting ještě více usnadňuje výměnu dat mezi vaším serverem a Flashem. Flash Remoting je zahrnutý do ColdFusion a JRun; pracujete--li s .NET nebo s jiným serverem J2EE, musíte si serverovou část zakoupit od společnosti Macromedia (je to finančně celkem výhodné vzhledem k tomu, co za své peníze dostane-te).

• Prostřednictvím nějaké webové služby. Jestliže jazyk, nebo programovací prostředí, které jste si zvolili, poskytuje snadný způsob vytváření webových služeb, můžete vytvořit službu, která vystaví taková data, jaká jsou třeba. Flash může volat metody služby právě tak, jako jakýkoli jiný konzument této služby.

Každé z technik je věnovaná samostatná kapitola v části III, „Připojování k datům“ knihy. Prozatím se hodlám soustředit jen na první techniku, protože je nejjednodušší a uvidíte hned nějaké výsledky – bez ohledu na to, jaký aplikační server používáte. Ostatní techniky pochopíte snadněji, když už budete vědět, jak to celé funguje.

Kódování dat pro Flash ve formě prostých „proměnných“Jak jste se právě dozvěděli, můžete do Flashe dodat data jako čistý text, jako XML, nebo prostřed-nictvím Remoting či webových služeb. V tomto oddílu se podíváme na první možnost, kdy ser-ver informace zpřístupňuje pomocí velmi prostého formátu „čistý text“. Jestliže nějaká stránka na vašem serveru ví, jak vrátit data v tomto formátu (což je protiklad k tomu, co vaše stránky ob-vykle vracejí, bývá to HTML nebo XHTML), Flash snadno text shrábne a učiní ho dostupným pro vaše uživatele.

Buďme trochu konkrétnější. Speciální formát „čistý text“ ( plain-text), o kterém mluvím, je prostě stejný formát, který už používáte, když dodáváte do svých dynamických webových strá-nek parametry URL, nebo proměnné. Jistě víte, jak to funguje: všemu, co se nachází v URL za symbolem ?, se říká dotazovací řetězec. Uvnitř dotazovacího řetězce se dá dodat libovolný po-čet dvojic název/hodnota, přičemž název a hodnota jsou oddělené znakem =, jednotlivé dvojice jsou oddělené znaky &. Uvnitř hodnoty jsou všechny „zvláštní“ znaky“ (jako jsou mezery, lomít-ka atd.) převedené pomocí kódů znaků a znaku %.

Poznámka

To asi také všechno znáte jako malou násobilku, takže se s tím nebudu zaobírat. Bylo to určeno už dávno, tehdy, když se vytvářely specifikace HTTP a CGI. Chcete-li se o těchto věcech dozvědět něco konkrétnějšího, připojte se a rychlým hledáním najděte standardní formát aplication/x-www-urlformencoded.

Page 25: Flash MX 2004 pro vývojáře webových aplikací

Vaše první rozhraní ve Flashi 45

Protože se jedná o formát, kterým se dodávají hodnoty do nějaké webové stránky, má urči-tý smysl, že vám Macromedia povoluje použít stejný formát i pro předávání hodnot ze stránky. Uvažme prostý scénář: máte na svém serveru nějakou stránku, která přijímá identifikační číslo hudebníka jako parametr URL, a odpoví informacemi o zadaném hudebníkovi. URL, kterou po-užijete pro svůj požadavek na informace od serveru, by mohla vypadat takto:

http://wwww.mojefirma.com/mojestranka.jsp?idArtist=5

Váš kód na serveru by pomocí dodaného identifikačního čísla získal informace o hudební-kovi z nějaké databáze. Pak by odpověděl třeba jménem a věkem hudebníka a jaký druh hudby provozuje, například:

artistName=Natalie%20Weiss&artistAge=19&musicType=Pop

Jestliže bylo přehrávači Flashe řečeno, aby načetl ze serveru tento řádek textu, skončilo by to tím, že by se vytvořily tři proměnné:

• artistName (obsahovala by hodnotu “Natalie Weiss“)• artistAge (obsahovala by hodnotu “19“)• musicType (obsahovala by hodnotu “Pop“)

Zapamatujte si, že kód na serveru by odpovídal pouze tímto řádkem dvojic název/hodnota. Stránka by nevracela žádný HTML, ani nic jiného, co by vracela za normálních okolností, aby to mělo smysl zobrazit v prohlížeči. Abych to vyjádřil jinak, URL, které dodávají data do Flashe, ne-jsou určené k tomu, aby je viděli koneční uživatelé. Má je vidět pouze Flash.

Poznámka

Všechny proměnné vyměňované mechanizmem „čistý text“ získá ActionScript jako řetězcové proměnné (konkrétně jsou to instance třídy String. O tom se více dozvíte v kapitole 4, „Slabikář ActionScriptu”). Chcete-li, aby zbytek kódu interpretoval některou z proměnných jako číslo, booleovskou hodnotu, datum, nebo jako nějaký jiný datový typ, musíte provést potřebné konverze typu sami (nebojte se, je to snadné). Také o tom se více dozvíte v kapitole 4.

Jak se to udělá v ColdFusionPojďme se teď podívat na jednoduchý kód, který budeme potřebovat, chceme-li dodat data ve formátu čistý text, o němž jsme právě hovořili. Začnu s ColdFusion (není za tím skrytý žádný úmysl, něčím začít musím). Dáváte-li přednost ASP.NET nebo Javě, klidně rovnou skočte k vý-pisům 2.2 a 2.3. Všechny výpisy jsou neobyčejně prosté a v zásadě jsou to jisté transkripce mezi jednotlivými jazyky.

Podívejte se na výpis 2.1. Jak vidíte, moc toho v něm není. Připomínám, že se předpokládá, že už jste pomocí ColdFusion Administrator vytvořili datový zdroj s názvem VenueDB, který uka-zuje na ukázkovou databázi knihy. (Pokud jste datový zdroj ještě nepřipravili, vraťte se na konec kapitoly 1, kde najdete potřebné pokyny.)

Page 26: Flash MX 2004 pro vývojáře webových aplikací

46 FLASH MX Professional 2004 pro vývojáře webových aplikací

Výpis 2.1 artistVarSource.cfm – Dodání dvojic název/hodnota z ColdFusion

<!--- Tato stránka vyžaduje v URL parametr "idArtist" ---><cfparam name="URL.idArtist" type="numeric">

<!--- Jednoduchý dotaz, který vytáhne údaje o hudebníkovi z tabulky Artists databáze ---><cfquery name="ArtistQuery" datasource="VenueDB"> SELECT sArtistName, sImageName, sDescription FROM Artists WHERE idArtist = #URL.idArtist#</cfquery>

<!--- Vynechají se ladicí informace a vše, co není v blocích <cfoutput> ---><cfsetting showdebugoutput="No" enablecfoutputonly="Yes">

<!--- Nastaví se typ obsahu MIME odpovědi na "text/plain" ---><cfcontent type="text/html" reset="yes">

<!--- Výstup informací ---><!--- (kód je zde na více řádcích, ---><!--- ve skutečnosti je ale výstupem jediný řádek) ---><cfoutput>artistName=</cfoutput><cfoutput>#URLEncodedFormat(ArtistQuery.sArtistName)#</cfoutput><cfoutput>&imageName=</cfoutput>

<cfoutput>#URLEncodedFormat(ArtistQuery.sImageName)#</cfoutput>

<cfoutput>&description=</cfoutput><cfoutput>#URLEncodedFormat(ArtistQuery.sDescription)#</cfoutput>

Parametr <cfparam> deklaruje, že stránka vyžaduje v URL proměnnou s názvem idArtist. Zadaná hodnota se použije v <cfquery>, který získá informace z odpovídajícího záznamu hu-debníka z naší ukázkové databáze. Na konci výpisu se výstup dvojic název/hodnota realizuje po-mocí prostých bloků <cfoutput>. Všimněte si, že je každá hodnota obalena funkcí ColdFusion s názvem URLEncodedFormat(), která se postará v hodnotách o převod všech speciálních znaků (jako jsou mezery nebo lomítka).

Značky <cfsetting> a <cfcontent> jsou v tomto případě volitelné, ale bývá dobrým zvy-kem dávat je v této podobě do stránek, které poskytují dvojice název/hodnota pro Flash. Značka <cfsetting> vypne ladicí výstup ColdFusion pro tuto stránku, pokud byl náhodou na úrov-ni serveru zapnut, protože stránka má vygenerovat pouze dvojice název/hodnota, žádný další HTML nebo text, jako jsou ladicí zprávy. Dále sděluje ColdFusion, aby na výstup zařadil pouze text umístěný ve značkách <cfoutput>, čímž se zamezí různým potížím způsobených vygenero-vanými prázdnými znaky. Značka <cfcontent> nastaví typ obsahu odpovědi stránky na text/plain místo výchozího typu obsahu text/html. Flashi by ve skutečnosti nevadilo, kdybyste ten-

Page 27: Flash MX 2004 pro vývojáře webových aplikací

Vaše první rozhraní ve Flashi 47

to krok vynechali, je ale rozumné nastavit obsah typu na text/plain, protože výstup stránky ne-obsahuje žádné značky HTML.

Pokračujte dál a navštivte stránku v prohlížeči. Zadejte do URL idArtist=1 a zkontroluj-te výsledky (obrázek 2.1). Podle toho, jaký prohlížeč používáte, se možná obsah objeví ve va-šem výchozím textovém editoru, nebo budete vyzváni, abyste obsah uložili do souboru (různé prohlížeče zacházejí s obsahem text/plain různě). Ale na ničem z toho v podstatě nezáleží. Cílem je, abyste dostali řádek textu s informacemi o hudebníkovi ve formě dvojic název/hodno-ta. Dostanete-li místo toho nějakou chybovou zprávu, pravděpodobně bude nutné opravit něco, co se týká datového zdroje pro naši ukázkovou databázi.

Obrázek 2.1. Kontrola dvojic název/hodnota v prohlížeči.

Jak se to udělá v ASP.NETDáváte-li přednost práci v ASP.NET, je výpis 2.2 ekvivalentem výpisu 2.1. Předpokládá se, že jste už vytvořili zdroj dat ODBC s názvem VenueDB, který ukazuje na ukázkovou databázi knihy. Výpis byste měli být schopni otestovat tím, že do URL předáte jako parametr idArtist=1 (viz obrázek 2.1).

Poznámka

Příklad se opírá o jmenný prostor System.Data.ODBC, který je součástí verze 1.1 .NET Framework. Používáte-li jeho verzi 1.0, budete si muset stáhnout balíček System.Data.ODBC z webových stránek společnosti Microsoft, chcete-li, aby tento výstup fungoval tak, jak je napsaný.

Page 28: Flash MX 2004 pro vývojáře webových aplikací

48 FLASH MX Professional 2004 pro vývojáře webových aplikací

Výpis 2.2 artistVarSource.aspx – Dodání dvojic název/hodnota z ASP.NET

<%@ Page Language="vb" Debug="true" %><%@ Import Namespace = "System.Data.ODBC" %>

<script runat="server"> Sub Page_Load ' Definuje databázové připojení Dim ConnStr as String = "DSN=VenueDB" Dim conn as OdbcConnection = new OdbcConnection(ConnStr) ' Připraví dotaz Dim CmdStr as String = "SELECT * FROM Artists " _ + "WHERE idArtist = " + Request.Item("idArtist") Dim cmd as OdbcCommand = new OdbcCommand(CmdStr, conn) ' Zřídí připojení a vykoná dotaz conn.Open() Dim reader As OdbcDataReader = cmd.ExecuteReader() ' Načte první (a jediný) řádek dat reader.Read() ' Nastaví typ obsahu MIME naší odpovědi na "text/plain" Response.ContentType = "text/plain" ' Výstup informací ' (kód je zde na více řádcích, ' ve skutečnosti je ale výstupem jediný řádek) Response.Write("artistName=" _ + Server.URLEncode(reader.Item("sArtistName"))) Response.Write("&imageName=" _ + Server.URLEncode(reader.Item("sImageName"))) Response.Write("&description=" _ + Server.URLEncode(reader.Item("sDescription"))) End Sub</script>

Poznámka

Samozřejmě je to jen jeden z mnoha možných způsobů, jak kód příkladu zapsat. Přirozeně by se mohl tentýž příklad transkribovat do JScript nebo C#, a mohli byste použít datové objekty a metody ze jmenných prostorů System.Data.OleDb nebo System.Data.SQLClient, ne jmenný prostor System.Data.ODBC. Příklad jsem zapsal takto proto, aby byly věci pokud možno jasné, relativně nezávislé na typu databáze a v souladu s ostatními typy serveru, s nimiž se v knize pracuje. Podle toho, na co se cítíte, klidně změňte skriptovací jazyk nebo specifika načítání dat.

Page 29: Flash MX 2004 pro vývojáře webových aplikací

Vaše první rozhraní ve Flashi 49

Poznámka překladatele

(1) Pro čtenáře, kteří už mají stahování plné zuby, chtějí pracovat stále s Framework 1.0 a s příkladem „prorazit“ co nejrychleji, připojuji variantu výpisu 2.2. Když se využije veřejných rozhraní jmenného prostoru System.Data, naznačuje výpis, jak se dá příklad zároveň připravit pro OleDb (třeba Access), i pro SqlClient ( Microsoft SQL Server ). Obejdete se také bez vytváření zdroje dat ODBC. Všimněte si, že v této variantě nezáleží na názvech polí tabulky, ale na jejich pořadí.

<%@ Page Language="vb" Debug="true" %> <%@ Import Namespace = "System.Data.OleDb" %>

<script runat="server">

Sub Page_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load

Dim pripojeni As System.Data.IDbConnection Dim prikaz As System.Data.IDbCommand Dim ctenar As System.Data.IDataReader

' příprava pro OleDb Dim ConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0; _ Data Source=D:\Inetpub\wwwroot\venue\database\venue.mdb" Dim conn As OleDbConnection = New OleDbConnection(ConStr) Dim CmdStr As String = "SELECT * FROM Artists " _ + "WHERE idArtist = " + Request.Item("idArtist") Dim cmd As OleDbCommand = New OleDbCommand(CmdStr, conn) Dim reader As OleDbDataReader

' tady se dá připravit připojovací řetězec, připojení, ' čtenář dat i příkaz pro SQLServer ' nastaví se pak v nějaké podmínkové konstrukci (která tu chybí) ' podle toho, zda se pracuje ' s OleDb nebo s SqlClient:

pripojeni = conn prikaz = cmd ctenar = reader

pripojeni.Open() ctenar = prikaz.ExecuteReader With ctenar .Read Response.Write("artistName=" + Server.UrlEncode(.Item(1))) Response.Write("&imageName=" + Server.UrlEncode(.Item(2))) Response.Write("&description=" + Server.UrlEncode(.Item(3))) End With

Page 30: Flash MX 2004 pro vývojáře webových aplikací

50 FLASH MX Professional 2004 pro vývojáře webových aplikací

ctenar.Close() pripojeni.Close()

End Sub </script>

(2) Autor sice v knize tu tam zmiňuje komunitu „Open Source“, neboli společenství, kde je téměř vše zadarmo, ale neutrousil ani jediný konkrétní příklad. Takže alespoň jeden, který jsem se snažil udělat ve stylu autora co nejkratší. Ukazuje, jak by úloha vypadala, kdybyste se obraceli na databázi MySQL (zkoušel jsem to na verzi 5.0 alfa) prostřednictvím PHP (verze 4.3). Kód na serveru se nezabývá připojovacími záležitostmi, je ale připraven pro načítání po řádcích (když neuvedete v URL žádný parametr, vrátí všechny záznamy).

<?php # artistVarSource.php – vypíše obsah vybraných polí jednoho # nebo všech záznamů tabulky Artists pro Flash

@mysql_connect () or exit (); mysql_select_db ("venue") or exit ();

# Převezme parametr, otestuje a připraví dotaz if (isset($HTTP_GET_VARS["idArtist"])) { $idArtist = $HTTP_GET_VARS["idArtist"]; $dotaz = sprintf("SELECT sArtistName, sImageName, sDescription FROM Artists WHERE idArtist=%s", $idArtist); } else { $dotaz = "SELECT sArtistName, sImageName, sDescription FROM Artists"; }

# vydá dotaz $vysledek = mysql_query ($dotaz) or die ("Dotaz nelze vykonat");

# načte výsledky dotazu, pak je uvolní while (list ($sArtistName, $sImageName, $sDescription) = _ mysql_fetch_row ($vysledek)) { printf ("artistName=%s&imageName=%s&description=%s&", $sArtistName, _ $sImageName, $sDescription); } mysql_free_result ($vysledek);

?>

Page 31: Flash MX 2004 pro vývojáře webových aplikací

Vaše první rozhraní ve Flashi 51

Nezapomeňte ve volání load() v kódu ActionScriptu na snímku 1 v ArtistDisplayClip změnit příponu souboru na .php. Analogicky se dá snadno upravit výpis 2.7 i příklady v dalších kapitolách.

Jak se to udělá s JavouJako poslední v pořadí, ale určitě ne významem, uvádím výpis 2.3 obsahující stránku JSP ( Java Server Pages), který lze zaměnit za výpis 2.1 , resp. 2.2. Výpis byste měli být sto otestovat tím, že do URL předáte jako parametr idArtist=1 (opět viz obrázek 2.1).

Výpis 2.3 artistVarSource.jsp – Dodání dvojic název/hodnota z JSP

<%@ page import="java.sql.*,java.net.URLEncoder" contentType="text/plain" %>

<% // Tohle je příkaz SQL, kterým získáme data String sql = "SELECT * FROM Artists " + "WHERE idArtist = " + request.getParameter("idArtist");

// Vykoná dotaz SQL nad ukázkovou databází Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection("jdbc:odbc:VenueDB"); ResultSet rs = con.createStatement().executeQuery(sql); // Získají se indexové pozice sloupců, které chceme na výstupu int colArtistName = rs.findColumn("sArtistName"); int colImageName = rs.findColumn("sImageName"); int colDescription = rs.findColumn("sDescription");

// Odstraní se prázdné znaky, abychom zajistili, // že bude výstup na prvním řádku out.clear(); // Odešlou se dvojice název/hodnota do výstupního proudu while ( rs.next() ) { out.print("artistName="); out.print(URLEncoder.encode(rs.getString(colArtistName))); out.print("&imageName="); out.print(URLEncoder.encode(rs.getString(colImageName))); out.print("&description="); out.print(URLEncoder.encode(rs.getString(colDescription))); }%>

Page 32: Flash MX 2004 pro vývojáře webových aplikací

52 FLASH MX Professional 2004 pro vývojáře webových aplikací

Budování Flashového rozhraní

Když máme hotové stránky, které dodávají data jako čistý text, můžeme přejít k vytvoření pros-tého rozhraní Flashe, které informace zobrazí. Tato část kapitoly vám ukáže, jak snadno se dají načíst informace z webového serveru a zobrazit je uživatelům. Naučíte se také, jak v přehrávači Flashe zobrazovat za pochodu obrázky. V průběhu prací se také něco dozvíte o ActionScriptu.

Přidávání vizuálních prvkůNejprve musíte vytvořit nový dokument Flashe:

1. Ve Flashi zvolte z hlavní nabídky File > New. Objeví se dialogové okno New Document (viz obrázek 2.2).

Obrázek 2.2. Vytvoření dokumentu Flashe.

2. V seznamu Type vyberte Flash Document a klikněte na OK. (O využití některých jiných typů dokumentů se dozvíte v knize později.)

3. Pomocí File > Save dokument uložte, jako název souboru uveďte artistWidget.fla.

Poznámka

Opět předpokládám, že svou práci v této kapitole budete ukládat do složky venue/chapter02 v rámci kořenové složky dokumentů vašeho webového serveru. Za normálních okolností nebudete dokument Flashe (.fla) udržovat v nějaké složce, ke které má přístup váš webový server (protože to je váš „zdrojový kód“), pro potřeby výuky je to však rozumné.

4. Z nabídky View zvolte Preview Mode > Outlines. Bude se vám snadněji pracovat s prvky, které budete přidávat do rozhraní. Jako vývojář budete tento režim náhledu dost potře-

Page 33: Flash MX 2004 pro vývojáře webových aplikací

Vaše první rozhraní ve Flashi 53

bovat, protože budete často pracovat s takovými prvky, které v době návrhu nic zajíma-vého neobsahují (naproti tomu při běhu budou zaplněné informacemi ze serveru).

Teď přidáme do nového dokumentu vizuální prvky:

1. V panelu Components vyhledejte ve stromu komponent prvek Loader (viz obrázek 2.3). Nevidíte-li panel Components, zvolte Window > Development Panels > Components, čímž ho zviditelníte.

Obrázek 2.3. Panel komponent.

2. Přetáhněte myší komponentu Loader ze stromu do levého horního rohu plochy (bílá ob-last ve vaší nové animaci). V komponentě Loader se bude zobrazovat fotografie hudební-ka (nebo kapely).

3. Vyberte komponentu Loader a podívejte se do panelu Properties. (Nevidíte-li panel Properties, zvolte Window > Properties – nebo stiskněte Ctrl+F2.) Jen tak pro zábavu klikněte na záložku Parameters v pravém horním rohu panelu Properties. Uvidíte něko-lik parametrů, které se vztahují k zobrazení vizuálního obsahu (autoLoad, contentPath a scaleContent). Jenom si je prohlédněte – žádný z parametrů teď měnit nemusíte (para-metr contentPath však později změníte prostřednictvím skriptu).

4. V panelu Properties napište do pole Instance Name název ldrPhoto (viz obrázek 2.4).

Obrázek 2.4. Úpravy hodnot vlastností komponenty Loader.

Page 34: Flash MX 2004 pro vývojáře webových aplikací

54 FLASH MX Professional 2004 pro vývojáře webových aplikací

Tímto názvem se budete na objekt Loader odkazovat v kódu ActionScriptu. V názvech instancí se rozlišuje velikost písmen, takže si dávejte pozor na zápis malých a velkých pís-men.

5. V panelu Tools vyberte nástroj Text a klikněte jednou na ploše, těsně vpravo od objek-tu Loader, který jste právě vytvořili (viz obrázek 2.5). Vytvoříte tím nové textové pole. V něm se bude zobrazovat jméno hudebníka (nebo kapely).

Obrázek 2.5. Přidání textového pole do dokumentu.

6. Při stále vybraném novém textovém poli nastavte v panelu Properties, pokud je to nutné, typ textového pole na Dynamic Text (opakem je Static Text). Jako název instance napište txtArtistName.

7. Zopakujte kroky 5 a 6, abyste vytvořili další textové pole s názvem instance txtDescrip-tion. Opět pomocí panelu Properties vyberte v seznamu Line typu položku Multiline (víceřádkové textové pole, opakem je Single Line, jednořádkové textové pole). Nakonec dvojitě klikněte na poli a táhněte čtvereček v pravém dolním rohu, abyste změnili veli-kost pole tak, aby se do něho vešlo několik řádků textu. Pokud jste to ještě neudělali, dvo-jitě klikněte na textovém poli txtArtistName a táhněte jeho šířku tak, aby se shodovala s textovým polem txtDescription.

8. Když teď máte na ploše všechny potřebné prvky, zkuste je zaranžovat pomocí myši tak, aby vypadaly úhledně. Velikost objektu Loader změníte tak, že na něm kliknete pravým tlačítkem myši, zvolíte Free Transform a táhnete jeho pravý dolní okraj. Velikost mů-žete upravit také tak, že napíšete nové hodnoty do polí W (šířka) a H (výška) v panelu Properties.

9. Chcete-li, zvolte v panelu Properties pro první textové pole (jméno hudebníka či kape-ly) větší velikost písma a pro druhé textové pole (popis) menší velikost písma. Já jsem pro to první použil velikost 12, pro druhé velikost 9. Také jsem pro jméno hudebníka vybral tučné písmo (B), abych je trochu zvýraznil. Až skončíte, mělo by vaše rozhraní vypadat přibližně tak, jako to moje (na obrázku 2.6), ale příliš se s tím nepárejte. Zatím se snaží-me o to, abychom vůbec něco zprovoznili.

10. Příkazem File > Save svou práci uložte.

Page 35: Flash MX 2004 pro vývojáře webových aplikací

Vaše první rozhraní ve Flashi 55

Obrázek 2.6. Prázdné prvky pro zobrazení textů a obrázku.

Načtení a zobrazení dat pomocí ActionScriptuDoposud máme jen prosté uživatelské rozhraní se třemi prázdnými prvky: komponentu Loader, ve které se objeví fotografie, a dvě textová pole, v nichž se objeví jméno hudebníka a popis. Teď můžeme přidat kód ActionScriptu, který do těchto prázdných prvků dostane patřičné informa-ce.

Poznámka

Současná verze Flashe poskytuje řadu dalších způsobů, jak vyřešit úkol, který jsme si předsevzali. Některé z nich vyžadují více řádků kódu, jiné zase téměř žádné. Já jsem zvolil v této kapitole jistý druh klasického řešení, protože je jednoduchý a snadno adaptovatelný v mnoha rozličných situacích. V průběhu knihy se dozvíte i o jiných způsobech, jak načíst a zobrazit data.

Převedení prvků rozhraní na objekt animačního klipuDalším vaším krokem bude převedení tří prvků rozhraní na animační klip. Převod prvků na ani-mační klipy se dělá ze dvou důvodů: zaprvé je možné animační klip chápat jako vizuální „objekt“, takže ho pak lze posouvat po ploše jako jediný prvek; zadruhé, animační klip slouží jako progra-movací „objekt“ obsahující kód specifický vzhledem k prvkům, které obsahuje. Stručně řečeno, klip se stane kontejnerem vizuálních prvků a kódu, který se k nim vztahuje, takže budete moci na prvky a kód myslet ve stylu objektově orientovaného programování.

Animační klip vytvoříte takto:

1. Za předpokladu, že máte stále otevřený dokument z předchozího oddílu, vyberte všech-ny tři prázdné prvky: komponentu Loader a obě textová pole. (Dá se to udělat tak, že na prvcích klikáte při stisknuté klávese Shift, nebo zvolte Edit > Select All.)

2. Až budete mít všechny tři prvky vybrané, zvolte Modify > Convert to Symbol. Objeví se dialogové okno Convert to Symbol.

3. Do pole Name napište ArtistDisplayClipArtistDisplayClip (viz obrázek 2.7).

Page 36: Flash MX 2004 pro vývojáře webových aplikací

56 FLASH MX Professional 2004 pro vývojáře webových aplikací

Obrázek 2.7. Převedení obsahu na symbol animačního klipu.

4. Zkontrolujte, je-li ve skupině přepínačů Behavior vybraný přepínač Movie Clip. Pak klik-něte na OK.

Na první pohled to vypadá, že se nic nezměnilo. Když ale budete trochu experimentovat, zjis-títe, že jsou tři prvky nyní přístupné jako skupina:

Zaprvé, kliknete-li jednou na některém ze tří prázdných prvků, ve skutečnosti vyberete na ploše celý nový animační klip. Klip lze posouvat, měnit jeho velikost, a může se vyjímat a vklá-dat jako jediný objekt.

Kliknete-li dvojitě na některém ze tří prázdných prvků, budete „přeneseni“ do speciálního módu, ve kterém můžete animační klip editovat. V tomto módu můžete posouvat jednotlivé prvky nebo měnit jejich velikost, nebo do klipu přidávat kód. Tomuto módu říkáme mód edita-ce symbolu.

Když jste v módu editace symbolu, dostanete se z něho ven tak, že dvojitě kliknete na jakéko-li jiné oblasti plochy (prázdná bílá oblast).

Poznámka

Pro přechod mezi jednotlivými módy existují i jiné navigační možnosti. Můžete animační klip vybrat a zvolit Edit > Edit Selected, čímž se dostanete do módu editace symbolu. Do normálního módu se můžete vrátit pomocí Edit > Edit Document. Nebo můžete využít tlačítko Edit Symbols na pravé straně editovací lišty (je nad časovou osou a dá se přepínat pomocí Window > Toolbars > Edit Bar), jímž můžete přecházet mezi jednotlivými animačními klipy, které máte ve svém dokumentu; do hlavního dokumentu se dá také vrátit tlačítkem Scene 1 na téže liště.

Procvičte si trochu přecházení mezi módem editace symbolu a módem editace hlavní části dokumentu. Nebojte se věci posouvat sem a tam. Své změny můžete vždycky vrátit pomocí Edit > Undo, nebo když si načtete dokončenou verzi dokumentu ze složky ukázkových souborů ka-pitoly.

Poznámka

Můžete také pomocí Window > Library otevřít panel Library (knihovnu) a dvojitě kliknout na ikoně svého nového animačního klipu v knihovně, čímž se také dostanete do módu editace symbolu. Práce s knihovnou se vám bude hodit, až budou vaše dokumenty Flashe komplikované, jak je postupně zaplníte spoustou různých animačních klipů a jiných prvků.

Page 37: Flash MX 2004 pro vývojáře webových aplikací

Vaše první rozhraní ve Flashi 57

Přidání kódu ActionScriptuNuže dobrá. Vytvořili jste animační klip, je na čase přidat ActionScript, který zařídí, aby se cho-val tak, jak si přejete. Držte se prosím následujícího postupu:

1. Jestliže nejste v módu editace symbolu, dvojitě klikněte na animačním klipu.

2. Klikněte na prvním snímku v časové ose, jak je to vidět v horní části obrázku 2.8.

Obrázek 2.8. Přidání kódu ActionScriptu do symbolu animačního klipu.

3. Podívejte se na panel Actions (jestliže panel Actions nevidíte, zobrazte si ho pomocí Window > Development Panels > Actions). Záložka u spodní strany panelu Action by měla mít titulek Layer 1 : 1 a na stavovém řádku na spodu panelu by měl být nápis Line 1 of 1, Col 1. Jestliže to tam není, klikněte jednou na ploše. (Jestliže to tam stále není, jste někde jinde – zvolte Edit > Edit Document, abyste se vrátili do hlavního dokumentu a zkuste to znovu.)

4. Napište do panelu Actions kód uvedený ve výpisu 2.4.(je také vidět na obrázku 2.8). Kód vytváří dvě funkce, loadArtist() a onArtistVarsLoaded(). Probereme je v příštím oddílu.

5. Uložte svou práci pomocí File > Save.

Page 38: Flash MX 2004 pro vývojáře webových aplikací

58 FLASH MX Professional 2004 pro vývojáře webových aplikací

Poznámka

Nechcete-li se s kódem psát, můžete si ho zkopírovat ze souboru ArtistDisplayCode1.txt, který najdete ve složce ukázkových souborů kapitoly. Textový soubor je zde jen pro tento účel. Nemusíte ho mít ve složce webu, aby příklad fungoval.

Výpis 2.4 Kód ve snímku 1 animačního klipu ArtistDisplayClip

function loadArtist(idArtist) { // Vytvoří nový objekt LoadVars, do něhož se načtou data ze serveru var artistVars = new LoadVars; // Sděluje objektu, co má udělat, až dostane svá data artistVars.onLoad = onArtistVarsLoaded; // Sděluje objektu, aby hned nyní načetl data. artistVars.load("http://localhost/venue/chapter02/artistVarSource.aspx? � idArtist=" + idArtist);}

function onArtistVarsLoaded() { // Naplní textová pole hodnotami získanými ze serveru txtArtistName.text = this.artistName; txtDescription.text = this.description; // Načte fotografii patřičného hudebníka do objektu Loader ldrPhoto.contentPath = "../images/artists/" + this.imageName;}

Samozřejmě, používáte-li ColdFusion, resp. Java musíte změnit „.aspx“ ve výpisu na „.cfm“, resp. „.jsp“.

Poznámka

Dobrá, abych uchoval vaše duševní zdraví, tedy stručně. Znáte-li syntax JavaScriptu – nebo dokonce syntax C nebo Javy – neměl by pro vás být kód ve výpisu 2.4 nic děsivého. Jestliže vám ale základní prvky kódu (pojem funkce, použití závorek, složených závorek, středníků atd.) připadá jako čistá hotentotština a vůbec tomu nerozumíte, asi byste si měli nejdříve odskočit do kapitoly 4, nebo si projít nějaký online kurz JavaScriptu.

Rychlé seznámení s objektem LoadVarsKód, který jste právě přidali do dokumentu, používá objekt LoadVars, což je speciální pomoc-ný objekt, který vystavuje při běhu přehrávač Flashe. Jak název implikuje, poskytuje objekt LoadVars prostředky pro získání proměnných (tj. dvojic název/hodnota) z nějakého webového serveru. V zásadě to prostě znamená, že objekt ví, jak se připojit k nějaké URL prostřednictvím HTTP, provede rozklad získaného textu do dvojic název/hodnota a zpřístupní dvojice jako pro-měnné, které pak můžete využívat, jak je vám libo.

Page 39: Flash MX 2004 pro vývojáře webových aplikací

Vaše první rozhraní ve Flashi 59

O veškeré této látce se víc dozvíte v kapitole 6, „Připojování k serverům pomocí čistých texto-vých souborů“. Prozatím stačí, když budete vědět, že většinou se práce s objektem LoadVars sklá-dá ze čtyř základních kroků:

1. Vytvoříte instanci objektu LoadVars pomocí klíčového slova new.

2. Nastavíte vlastnost onLoad instance na název nějaké funkce (tu musíte napsat), která se má zavolat, až se proměnné úspěšně získají z URL. Protože nemám lepší termín, říkám jí funkce odpovědi, responder function.

3. Zavoláte metodu load() instance, která sdělí Flashi, aby skutečně kontaktoval váš webo-vý server.

4. Pomocí získaných hodnot se ve funkci odpovědi odkazujete na proměnné jejich ná-zvem.

V kódu, který jste právě přidali (výpis 2.4), se první tři kroky dějí ve funkci loadArtist(). Čtvrtý krok se uskuteční ve funkci odpovědi, což je v našem případě onArtistVarsLoaded().

Poznámka

Na svůj animační klip můžete nyní nahlížet jako na objekt, který ví, jak načíst a zobrazit informace z nějakého serveru. Dá se chápat také tak, že vystavuje jednu veřejnou metodu: funkci loadArtist(). Funkce onArtistVarsLoaded() se naopak dá považovat za soukromou metodu. Nejsme sice zrovna na takovém místě, kde se formálně deklarují metody jako veřejné nebo soukromé; protože se ale funkce loadArtist() může hodit i pro jiný kód někde jinde, pomůže celou věc pochopit, když si uvědomíme, že se na ni můžeme dívat jako na veřejnou metodu.

Mimochodem, je důležité, abyste pochopili, že proměnné se metodou load() objektu LoadVars získávají asynchronně. To znamená, že přehrávač Flashe nečeká na to, až se z URL zís-kají dvojice název/hodnota. Proto se v kódu nemůžete bezpečně odkazovat na získané proměn-né do té doby, dokud se nezavolá funkce odpovědi. Má to samozřejmě svůj dobrý důvod, proč je to tak. Vaše animace může pracovat na jiných věcech (třeba zobrazuje nějaký animační efekt), zatímco se stahují informace. Také to animaci umožňuje, aby souběžně načetla proměnné z ně-kolika URL (pokud si to přejete).

Poznámka

Jestliže to někomu z vás zní jako jistý druh náročného (a spletitého) vícevláknového ( multithreaded) programování, máte pravdu, je to něco takového. Flash vždy chce, abyste mohli dělat současně tolik věcí, kolik je možné, aby se to co nejvíce blížilo skutečnému světu, kde se věci dějí v reálném čase. To zase znamená, že mnohé typy operací – obzvláště interakce se servery – jsou svou povahou zákonitě vícevláknové. Je to přirozenost živé bytosti.

Page 40: Flash MX 2004 pro vývojáře webových aplikací

60 FLASH MX Professional 2004 pro vývojáře webových aplikací

Umožníme uživateli, aby si vybral hudebníkaDobrá – vytvořili jste vizuální prvky, strčili je do animačního klipu a přidali potřebný skript, aby se informace načetly ze serveru a zobrazily. Určitě vám připadá, že se informace mají zobrazit v okamžiku, až se zavolá funkce loadArtist() (viz výpis 2.4).

Bohužel, funkce se zatím vůbec nezavolá, takže se také nic nestane. Budeme muset udělat něco trochu vyspělejšího; prozatím jen přidáme jednoduchý ovládací prvek typu číselník, v ně-mž si bude moci uživatel vybrat, kterého hudebníka chce zobrazit. Kdykoli uživatel změní hod-notu v číselníku, zobrazí se informace o odpovídajícím hudebníkovi.

Číselník přidejte následujícím postupem:

1. Jestliže se právě nenacházíte v módu editace symbolu našeho animačního klipu, dvojitě klikněte na některém z jeho prázdných vizuálních prvků.

2. Přetáhněte z panelu Components na plochu komponentu NumericStepper (ovládacímu prvku číselník se ve Flashi říká „NumericStepper“). Protože jste v módu editace symbo-lu, přidáváte komponentu do animačního klipu, ne do hlavní části dokumentu.

3. Příkazem View > Preview Mode > Full vypněte mód náhledu osnovy (Outline Preview), který jste zapnuli dříve. Všimněte si, že nyní vidíte v komponentě NumericStepper dvě malé šipky ukazující nahoru, resp. dolů, zase je ale o něco těžší sledovat, kde se nachází komponenta Loader. Zvolte si ten režim náhledu, který vám vyhovuje nejlépe.

4. Přesvědčete se, že je nová instance komponenty NumericStepper vybraná, pak v panelu Properties nastavte vlastnost minimum na 1, vlastnost maximum na 5 a vlastnost value na 1. Jinak řečeno, chceme uživateli dovolit, aby si mohl vybrat číslo od 1 do 5, přičemž jako počáteční hodnotu nabídneme 1.

5. Při stále vybrané komponentě NumericStepper napište do panelu Actions tento kód: on (change) { _parent.loadArtist(this.value); }

V normální jazyce je význam kódu v podstatě tento: „když uživatel změní hodnotu v ovlá-dacím prvku číselník, zavolej funkci loadArtist() a předej do ní prostřednictvím parametru idArtist hodnotu, kterou uživatel zvolil.“ O syntaxi on (change) se více dozvíte v kapitole 4. Prozatím stačí, když pochopíte to, co je celkem zřejmé: kód uvnitř složených závorek se vykoná vždy, když se změní hodnota v číselníku.

Uvnitř bloku on (change) voláme funkci loadArtist(), kterou jsme vytvořili ve výpisu 2.4. Aktuální hodnota číselníku je dostupná z vlastnosti this.value, což znamená, že jestliže uži-vatel právě změnil hodnotu ovládacího prvku řekněme na 2, předá se do funkce loadArtist() jako požadované identifikační číslo hudebníka číslo 2.

Page 41: Flash MX 2004 pro vývojáře webových aplikací

Vaše první rozhraní ve Flashi 61

Obrázek 2.9. Přidání kódu, který se odpálí, když se změní hodnota v číselníku.

Také si v bloku on(change) všimněte klíčového slova _parent. Uvnitř bloku zpracovávají-cího nějakou událost nějaké komponenty se odkazy na funkce nebo proměnné chápou jako od-kazy na metody a vlastnosti samotné komponenty, nikoli na prvky v dokumentu, který vytváříte. Chcete-li se odkázat na prvky uvnitř dokumentu, musíte použít _parent (zhruba se to dá přelo-žit jako „rodič animačního klipu, neboli dokument obsahující tuto komponentu“). V příští kapi-tole probereme tyto pojmy přesněji.

Fajn. Všechno by mělo být připraveno. Otestujme to!

Publikování a testování rozhraní Nyní už stačí jen publikovat animaci, která obsahuje naše nové rozhraní. Publikování v podstatě znamená, že se dokument Flashe (soubor .fla, na kterém pracujete) převede na mnohem menší, úsporný soubor, kterému porozumí přehrávač Flashe. Nový soubor dostane příponu .swf. Těmto souborům se všeobecně říká SWFs (a anglicky se to vyslovuje „swiffs“).

Svou animaci publikujete jednoduše tak, že zvolíte File > Publish, nebo stisknete Shift+F12. Na malou chvilku se objeví ukazatel průběhu, pod dobu, co IDE Flashe kompiluje a smrskává obsah animace. A je to!

Teď můžete své rozhraní otestovat tak, že se na ně podíváte v nějaké webové stránce. Abyste to měli pohodlnější, vytvoří Flash při publikaci animace prostou stránku HTML pro testovací účely.

Page 42: Flash MX 2004 pro vývojáře webových aplikací

62 FLASH MX Professional 2004 pro vývojáře webových aplikací

Můžete ji navštívit hned teď pomocí adresy: http://localhost/venue/chapter02/artistWidget.html

Poznámka

Samozřejmě, není-li váš webový server (ten s nainstalovaným ColdFusion, ASP.NET nebo strojem .JSP) na vaší místní pracovní stanici, budete muset nahradit localhost v uvedené URL patřičným názvem serveru. Také budete muset změnit odkaz na URL ve výpisu 2.4.

Když tuto URL navštívíte v nějakém webovém prohlížeči, bude stránka skoro prázdná; bude na ní jen ovládací prvek číselník (viz obrázek 2.10). To se ovšem změní, jakmile něco v číselníku vyberete. Změníte-li hodnotu na 2, měli byste uvidět jméno, popis a fotografii hudebníka s iden-tifikačním číslem 2; změníte-li hodnotu na 3, měli byste uvidět hudebníka s číslem 3, atd.

Obrázek 2.10. Test získávání dat z vašeho serveru.

Je jasné, že navigace pomocí číselníku a ještě stvořená takto, není nijak perfektní. Hlavně pro-to, že rozsah možných hodnot jsme do animace zakódovali „natvrdo“. Jestliže se počet dostup-ných hudebníků změní, bude se muset animace publikovat znovu. Také se předpokládá, že jsou hudebníci očíslovaní souvislou řadou identifikačních čísel počínaje číslem jedna a že si uživatel přeje prohlížet hudebníky v pořadí podle jejich identifikačních čísel. Jestliže bude nějaký hudeb-ník odstraněn, nebo jestliže si uživatel přeje prohlížet hudebníky v nějakém intuitivnějším pořa-dí (řekněme podle abecedy), přestane tato primitivní technika správně fungovat.

Přesto bych chtěl s ovládacím prvkem číselník provést ještě jeden experiment, než ho nahra-díme vhodnějším navigačním mechanizmem.

Page 43: Flash MX 2004 pro vývojáře webových aplikací

Vaše první rozhraní ve Flashi 63

Přístup k animačnímu klipu z hlavní časové osyTak, jak jsme to vyrobili, je ovládací prvek číselník, který slouží uživateli k navigaci, součástí ani-mačního klipu ArtistDisplayClip. Jestliže však chápeme animační klip jako jistý druh objektu – ve kterém má být zapouzdřeno zobrazování informace o nějakém jediném hudebníkovi – tak se zdá, že je ovládací prvek číselník na nepravém místě; jde spíše o přecházení mezi záznamy, ne o zobrazení údajů z aktuálního záznamu. Koncepčně by bylo konsistentnější, kdyby ovládací pr-vek číselník sídlil vně animačního klipu.

V současné fázi našeho řešení to žádný závažný problém není, protože se ovládacího prvku číselník stejně chceme brzy zbavit. Ale čistě proto, abychom viděli, co to udělá, přemístěme ovlá-dací prvek ven z animačního klipu a usaďme ho v hlavním dokumentu – také se říká na hlav-ní časové ose. Vizuálně se v animaci nic nezmění; až budeme animaci publikovat, bude rozhraní vypadat úplně stejně. Jediná drobná odlišnost bude v tom, jak budou v animaci uspořádané ob-jekty a kód.

Naznačenou změnu realizujte tímto postupem:

1. Jestliže se právě nenacházíte v módu editace symbolu animačního klipu, dvojitě klikněte na některém z jeho vizuálních prvků.

2. Vyberte ovládací prvek číselník tím, že na něm kliknete (jednou). Přesvědčete se, že je vy-braný jen on, nic jiného. Možná budete muset nejprve jednou kliknout na prázdném mís-tě plochy, pak na ovládacím prvku číselník.

3. Vyjměte číselník do schránky příkazem Edit > Cut z hlavní nabídky Flashe, nebo klikněte na ovládacím prvku pravým tlačítkem myši a z kontextové nabídky zvolte Cut. Také mů-žete použít všeobecně známou klávesovou zkratku Ctrl+X.

4. Opusťte mód editace symbolu tím, že dvojitě kliknete na prázdném místě plochy.

5. Vložte číselník zpět příkazem Edit > Paste in Place.

Dobrá, číselník nám teď sedí na hlavní časové ose, není už uvnitř animačního klipu. Všechno vypadá úplně stejně, pokud byste ale animaci publikovali a otestovali právě teď, zjistili byste, že nefunguje správně.

Proč? Inu, pokud si ještě vzpomenete, tak kód, který se vykoná, když se změní hodnota v čí-selníku, vypadá takto:

_parent.loadArtist(this.value);

Řádek bude fungovat uspokojivě tehdy, budou-li ovládací prvek číselník a funkce loadAr-tist() na pojmově tomtéž místě: v animačním klipu (v ukázce reprezentovaném klíčovým slo-vem _parent).

My ale teď máme ovládací prvek číselník a funkci, kterou chceme zavolat, na různých mís-tech, proto musíme kód mírně pozměnit, aby se správně „zacílil“ na funkci uvnitř klipu.

Změnu proveďte tímto postupem:

Page 44: Flash MX 2004 pro vývojáře webových aplikací

kapitola 9

Připojování k serverům pomocí webových služeb

S příchodem Macromedia Flash MX 2004 Professional tu máme druhý nový prostředek pro zís-kávání přístupu ve stylu RPC k funkcionalitě na serveru: přes webové služby. Místo toho, aby-chom měli jako prostředníka mezi Flashem a vaším kódem Flash Remoting Gateway, chová se jako zprostředkovatel jakákoli implementace vyhovující standardům webových služeb.

Poznámka

Funkcionalita webových služeb, kterou probíráme v této kapitole, je k dispozici pouze ve vydání Professional Flashe MX 2004. Jestliže nepoužíváte profesionální vydání, ale přesto se chcete připojovat k existujícím webovým službám, můžete jako alternativu prozkoumat Flash Remoting. Flash Remoting Gateway se může na vašem serveru chovat jako proxy, připojí vás k nějaké webové službě na jiném serveru v zastoupení vaší animace Flashe. Podrobnosti viz kapitola 8,“ Připojování k serverům pomocí Flash Remoting“ a vaše dokumentace Flash Remoting. Viz také oddíl „Volby pro připojování k webovým službám“ v této kapitole.

Přehled podpory webových služeb ve Flashi

Než začneme s konkrétními příklady, měl bych na úvod říci pár slov, která by vám pomohla dob-ře pochopit schopnosti webových služeb dostupných ve Flash MX 2004. V tomto oddílu uvádím přehled nové podpory webových služeb ve Flashi. Absolvujete také velmi rychlý kurz „letem-svě-tem“ o tom, co jsou webové služby a co znamenají pro vás.

Co jsou to webové služby?No, tak to je ta nejlepší otázka! Pro účely našeho výkladu se dají webové služby chápat jako speciální objekty, které sídlí, metaforicky, na nějakém webovém serveru. Podobně jako objekty v mnoha jiných programovacích jazycích, mohou mít mnoho metod a vlastností. Mazaná finta je v tom, že jsou metody a vlastnosti dostupné pomocí otevřené, standardní specifikace prostých jazyků a protokolů. Důsledkem je, že k jakékoli webové službě může přistupovat a využívat ji každý klient, který specifikaci rozumí. Nezáleží na tom, zda jsou služba a klient na téže lokální síti, zda byly vytvořeny stejným programovacím jazykem, nebo zda běží na stejném operačním systému nebo platformě.

335

Page 45: Flash MX 2004 pro vývojáře webových aplikací

336 FLASH MX Professional 2004 pro vývojáře webových aplikací

Poznámka

No dobře, kompletní neutralita vůči platformám je stále ještě předmětem vývoje. Jak patrně víte, existují v současné běžné praxi dvě hlavní odrůdy webových služeb. Říci, že ta jedna je od Sun a druhá od Microsoftu, je patrně přílišné zevšeobecnění, leč prospěšné. Každopádně, když spolu tyto odrůdy hovoří, ne vždy se jim to dobře daří. Většina vývojářů nástrojů jiných společností – jako ti bystří hoši od Macromedia – usilují o to, aby jejich nástroje pracovaly stejně s oběma odrůdami.

Nemám dostatek času ani prostoru na to, abych se pouštěl do teoretického výkladu histo-rie webových služeb, druhů potíží, které webové služby vyřešily nejlépe, ani kam spadají v stále překotném evolučním vývoji distribuované výpočetní techniky. Konec konců, tohle není kni-ha o webových službách. Chcete-li se o nich dozvědět víc, vyzývám vás, abyste si obstarali něja-kou knihu věnovanou budování webových služeb s vaším oblíbeným aplikačním serverem, nebo abyste podnikli průzkumnou cestu online (vhodné místo, kde se dá začít, je třeba www.xml.com).

Jak člověk vytvoří webovou službu?Další skvělá otázka! Odpovědí je, že to závisí na aplikačním serveru, neboli programovacím prostředí, které používáte. Každý aplikační server, kterým se v knize explicitně zabýváme – ColdFusion, ASP.NET a J2EE – poskytuje přinejmenším jeden druh prostředků pro vytváření webových služeb bez zbytečných nerváků a starostí. Obvykle píšete stejný druh kódu na straně serveru, jako normálně. Jen ho uložíte se speciální příponou souboru, umístíte do speciálního adresáře, nebo ho zaregistrujete s jistým druhem konfiguračního souboru nebo vizuálního roz-hraní.

V této kapitole uvidíte několik prostých příkladů, je ale na vás, abyste se naučili, jak se vytvá-řejí a konfigurují webové služby na vašem serveru. Abych to vyjádřil z jiného úhlu pohledu, ka-pitola vás chce naučit, jak se připojuje k webovým službám, které už na vašich serverech existují; ne, jak se vytvářejí služby na zelené louce. K naposled zmíněnému tématu existuje spousta jiných knih a prostředků.

Několik stručných definicPodobně jako každá jiná moderní technologie vztahující se k internetu, i webové služby přichá-zejí se svou vlastní sadou akronymů a terminologií. V následujícím stručném výčtu jsou uvede-ny specifické termíny, s nimiž se budete setkávat v průběhu této kapitoly. Je určen především pro čtenáře, kteří s webovými službami začínají. V žádném případě to není kompletní sada definic, měla by však být postačující k tomu, aby pro vás nebyl zbytek kapitoly úplnou záhadou.

• WSLD ( Web Services Description Language). WSDL je formát založený na XML pro po-pis metod a vlastností, které poskytuje konkrétní webová služba. Všichni klienti webové služby – jedním z nich je Flash – používají popis WSDL služby k tomu, aby zjistili, jaké ar-gumenty požadují jednotlivé metody, jaké datové typy mají argumenty a vlastnosti služby atd. Přehrávač Flashe využívá tyto informace při běhu pro připojení k serveru; IDE Flashe

flash_geeks.indb Odd1:336 20.9.2004 14:39:50

Page 46: Flash MX 2004 pro vývojáře webových aplikací

Připojování k serverům pomocí webových služeb 337

používá tyto informace v době návrhu, aby vám zobrazilo metody a vlastnosti, které jsou k dispozici pro skriptování nebo vázání. Podle toho, z jaké branže pocházíte, můžete se na tento druh procesu odkazovat jako na „odhalení“ nebo „introspekci“ komponenty.

• URL WSDL. Popis WSDL konkrétní webové služby se tradičně činí dostupným jako URL HTTP, takže k ní mají snadný přístup klienti, kteří se o použití služby zajímají. Této URL se obvykle říká URL WSDL, což stačí, protože každý ví, o co jde. Pro vás, jakožto vývojá-ře nebo programátora, je URL WSDL obvykle jediná věc, kterou potřebujete znát dopředu, hodláte-li v nějakém konkrétním projektu použít nějakou webovou službu. Odtud si ho vezme vaše programovací nebo vývojové prostředí – v tomto případě IDE Flashe – a zajistí, aby vám byly metody a vlastnosti dostupné, buď v kódu, nebo v nějakém druhu vizuálního zobrazení. Ve Flashi budou metody a vlastnosti vidět v panelu Web Services a v inspektoru komponenty. Jak to funguje, uvidíte v průběhu kapitoly.

• SOAP ( Simple Object Access Protocol). SOAP je specifikace, která se používá, když chce nějaký klient webové služby použít nějakou metodu nebo vlastnost konkrétní webové služ-by. SOAP definuje, primárně, formát XML obsahující informace o tom, k čemu chce kli-ent přistoupit (například kterou metodu chce zavolat, nebo hodnotu které vlastnosti chce získat nebo nastavit), a také jaká data půjdou spolu s požadavkem (jako třeba hodnoty ar-gumentů metod). Stejný základní formát použije i server, když odesílá odpověď zpět klien-tovi. Záměrně vynechávám různé odborné záležitosti – používají se jistá speciální záhlaví HTTP atd. – základní idea ale je, že se tyto „pakety“ informací kódovaných jako XML ode-sílají tam a zpět přes HTTP, a že takto spolu v podstatě klient a server komunikují.

• UDDI ( Universal Description Discovery and Integration). Když někoho slyšíte, jak mlu-ví o WSDL a SOAP, vychází ze stejných úst také často UDDI. Pomocí UDDI se vytváře-jí „adresáře“, které mohou lidé nebo procesy využívat, když hledají URL WSDL webových služeb. Je to ve světě webových služeb něco jako DNS (nebo možná 411). Implementace webových služeb Flashe každopádně podporu UDDI nepotřebuje. Předpokladem, který je docela férový, je, že víte, ke které webové službě se chcete připojit. Je více než pravděpodob-né, že jste ji sami vytvořili.

• Klient neboli konzument webové služby. Každý software. který ví, jak má mluvit s webo-vou službou a volat její metody, je klient webové služby (někdy se mu také říká konzument webové služby). Často se stává, že je klientem jiný server, který je buď na stejné lokální síti, nebo někde na internetu. Jindy je klientem samostatná aplikace instalovaná na uživatelo-vě stroji. Samozřejmě, klienti webových služeb, které budeme probírat v této knize, jsou SWF, kteří se přímo připojují k webovým službám jako klienti (o specifikách se více dozví-te v příštím oddílu).

Dobrá, to by mělo pro potřeby zbývající části kapitoly stačit. Další informace o těchto po-jmech a termínech si vyhledejte v dokumentaci toho aplikačního serveru, který používáte. V dokumentaci byste také měli najít informace o tom, jak máte sestrojovat své vlastní webo-

flash_geeks.indb Odd1:337 20.9.2004 14:39:51

Page 47: Flash MX 2004 pro vývojáře webových aplikací

338 FLASH MX Professional 2004 pro vývojáře webových aplikací

vé služby, k nimž pak bude možné přistupovat z Flashe nebo z kteréhokoli jiného klienta webové služby.

Flash jako klient webové službyJeště jednou připomenu, že konzumentem webových služeb je pouze Flash MX 2004 ve vydání Professional. Funkcionalita je zabudovaná přímo do IDE Flashe, a při publikaci se kompiluje do vašich souborů SWF. Vskutku, je dobré mít stále na paměti, že při práci s webovými službami ve Flashi pracujete se dvěma různými klienty:

• V době návrhu se IDE Flashe může chovat jako klient webových služeb, k nimž chce přistu-povat vaše animace. Každá metoda služby vám pak bude dostupná v různých rozvíracích seznamech a voličích parametrů v inspektoru komponenty a v panelu Properties a také v novém panelu Web Services. Účelem této funkcionality je ulehčit vám život jakožto vývo-jáři. Místo toho, abyste si museli pamatovat názvy všech metod a jejich argumentů (a znovu a znovu je psát), můžete to hodit na bedra IDE Flashe, které bude sledovat vše potřebné.

• Při běhu se vaše SWF také chovají jako klienti webových služeb, takže různé prvky uživa-telského rozhraní i kód skriptu mohou být v interakci s vašimi servery (nebo se servery ji-ných výrobců). Funkcionalita při běhu ví, jak stáhnout a interpretovat popisy WSDL služby zrovna tak, jako to ví IDE Flashe. Co je ale důležitější, ví také, jak vykonávat skutečné me-tody webové služby, takže lze přistupovat ke skutečným datům nebo logice na serveru.

Tedy, zatímco se IDE Flashe především zajímá o metadata webové služby (část WSDL), vaše SWF se především zabývají skutečnými voláními metod (část SOAP).

Volby pro připojování k webovým službámPři práci s webovými službami ve Flash MX 2004 máte na výběr několik voleb uvedených v ná-sledujícím výčtu. První z nich je nejsrozumitelnější a také se s ní pracuje nejsnadněji. Z těchto důvodů ji také většina lidí nejčastěji volí. Připomínám, že poslední dvě volby nevyžadují profe-sionální vydání Flashe.

• Komponenta WebServiceConnectorWebServiceConnector. Je to volba, která nejnápadněji ční v IDE Flashe, v dokumentaci Flashe, i v seznamu nových schopností. Přetáhnete prostě komponentu WebServiceConnector na plochu, přidělíte jí URL WSDL, ke které se má připojit, pak přidáte řádek skriptu, který zavolá metodu trigger(). Komponenta podporuje vázání dat, takže s její pomocí můžete, chcete-li, aktualizovat ovládací prvky uživatelského roz-hraní, aniž byste museli psát dodatečné skripty. Protože je tak flexibilní, relativně snad-no se po užívá, a protože je příhodná i pro práci s novými schopnostmi rámce Flashe pro vázání dat (ale i pro práci bez něj), bude většina výkladu v kapitole věnována práci prá-vě s touto komponentou. Naučíte se s ní pracovat v příštím oddílu „Práce s komponentou WebServiceConnector“.

flash_geeks.indb Odd1:338 20.9.2004 14:39:51

Page 48: Flash MX 2004 pro vývojáře webových aplikací

Připojování k serverům pomocí webových služeb 339

• Instance třídy WebService. Dáváte-li přednost připojování k webové službě bez jakýchko-li komponent používaných v době návrhu, můžete přes skript vytvořit až při běhu instan-ci WebService. Tato volba by se vám mohla hodit tehdy, kdybyste potřebovali, aby se vaše animace připojovala k webovým službám dynamicky (tj. kde webová služba je, nebo jaké má metody a vlastnosti, není známo v době návrhu). Volbu proberu v oddílu „Připojování k webové službě pouze pomocí skriptu“

• Přes Flash Remoting. Většina implementací Flash Remoting Gateway (včetně té, která je zahrnutá do ColdFusion, a brány pro ASP.NET) poskytuje zabudovanou podporu pro při-pojování k webovým službám na serveru. Webová služba bude pro Flash viditelná jako vzdálená služba ve stylu Remoting, což zase znamená, že metody služby budou pro Flash dostupné jako vzdálené metody (k nimž lze přistupovat jako k jakékoli jiné vzdálené funk-ci služby). Podrobnosti o Flash Remoting viz kapitola 8.

• Přes jakoukoli jinou techniku probranou v této knize. Nové schopnosti webových slu-žeb ve Flashi jsou bezva, protože IDE Flashe a přehrávač Flashe mají nyní zabudované chá-pání WSDL a SOAP, takže se můžete k webovým službám připojovat přímo. Není ovšem žádný zákon, který by vám zakazoval, abyste se připojovali ke svým vlastním stránkám na serveru pomocí jakýchkoli technik, a aby vaše stránky na serveru hovořily s webovými službami za scénou. Můžete se vrátit zpět do kapitol 6, 7 a 8 – do kapitol věnovaných čisté-mu textu, resp. XML, resp. Remoting – a použít techniky, které jsou v kapitolách popsané. V příkladech na serveru byste dotazy nahradili voláním webových služeb (v patřičné synta-xi pro server, který používáte). Jistě, Flash nebude vědět, že mluví s webovou službou. Bude si myslet, že prostě mluví s nějakou stránkou ad-hoc na serveru. To nemusí nutně být špat-né řešení. Záleží na tom, jakou máte rádi všeobecnou architekturu svých webových aplika-cí. Doporučuji vám, abyste měli při čtení zbytku kapitoly tuto možnost stále na paměti.

Práce s komponentou WebServiceConnector

V několika příštích oddílech se seznámíte s komponentou WebServiceConnector. Budete pra-covat s ukázkovým dokumentem Flashe, který jsem nazval Rating Chart. Umožňuje uživate-lům zobrazit informace o aktuálním hodnocení nějaké písně (uživatelé písně hodnotí v příkladu Song Rater kapitoly 8). Čerstvá hodnotící data stará nejvýše minutu poskytne webová služba. K nim pak přistoupí Flash a zobrazí je jako jednoduchý sloupkový graf (viz obrázek 9.1).

flash_geeks.indb Odd1:339 20.9.2004 14:39:51

Page 49: Flash MX 2004 pro vývojáře webových aplikací

340 FLASH MX Professional 2004 pro vývojáře webových aplikací

Obrázek 9.1. Data aktuálního hodnocení písní se zobrazí jako sloupkový graf.

Uživatelé mohou specifikovat období, za které chtějí hodnocení zobrazit. Udělají to tak, že napíšou datum do polí From a Through (od – do), nebo použijí jim poskytnutý objekt pro vý-běr data (viz obrázek 9.2).

Obrázek 9.2. Uživatelé si vybírají období, které se má na grafu zobrazit.

Uživatelé mohou také specifikovat, že by rádi viděli sérii informací. Vyberou v rozvíracím seznamu Animated snapshots položku daily, weekly nebo monthly (po dni, po týdnech, po mě-sících) (viz obrázek 9.3). Jestliže například uživatel vybere weekly, uvidí animovaný graf, který

flash_geeks.indb Odd1:340 20.9.2004 14:39:51

Page 50: Flash MX 2004 pro vývojáře webových aplikací

Připojování k serverům pomocí webových služeb 341

zrcadlí týdenní změny v hodnocení písní. Nejprve se objeví informace vztahující se k prvnímu týdnu, následuje krátká pauza, pak následují informace za druhý týden atd.

Uživatel také může na jakýkoli sloupek umísit kurzor myši, čímž zobrazování pozastaví; když dá kurzor ze sloupku pryč, bude zobrazování ve stylu krok za krokem pokračovat.

Obrázek 9.3. Uživatelé získají animované grafy, zvolí-li něco jiného než volbu none.

Kód na serveruJako obvykle se nejprve podíváme na kód na serveru, který pohání náš příklad. Každý z výpi-sů 9.1, 9.2 a 9.3 vytváří webovou službu, která vystavuje stejnou sadu metod Flashi (nebo jaké-mukoli jinému klientovi webové služby, který si k nim přeje přistupovat) pomocí ColdFusion, .NET, nebo Java. Přestože se kód i jiné implementační detaily v každém výpisu liší – pravděpo-dobně jsou to nejvíce odlišné výpisy v celé knize – všechny poskytují, z hlediska Flashe, ekviva-lentní funkcionalitu.

V tabulce 9.1 jsou uvedeny metody, které veřejně vystavuje naše webová služba, bez ohledu na to, jaký se použil aplikační server. (Každá jednotlivá implementace může mít i jiné metody, ty se ale používají interně.)

Tabulka 9.1 Metody, které vystavují příklady webové služby tohoto oddílu

Metoda Popis

getSongs() Vrátí informace o písních. Metoda vrátí pole objektů, pro každý záznam písně v databázi jeden. Každý objekt obsahuje dvě vlastnosti: idSong a sSongName.

getSongRatings(dStartDate, dEndDate, spanDivider)

Vrátí informace o hodnocení písní. Argumenty dStartDate a dEndDate definují časové období, za které se mají informace vrátit. Argument spanDivider sděluje metodě, zda se má období rozdělit do dílčích období: lze ho nastavit na d, ww, m nebo q, což vyjadřuje dny, týdny, měsíce a čtvrtletí; jestliže se nastaví na none nebo na nějakou jinou hodnotu, vrátí se jen jediná množina dat.Metoda vrátí pole objektů, pro každé období jeden. Má-li spanDivider hodnotu none, bude jen jediný objekt, má-li některou z hodnot d, ww, m nebo q, bude objektů několik. Každý objekt obsahuje tři vlastnosti: dStartDate a dEndDate určují aktuální časové období; songs je pole písní z databáze. Každá píseň je reprezentovaná dalším objektem, který má tři vlastnosti: idSong, AvgRating a NumRatings.

flash_geeks.indb Odd1:341 20.9.2004 14:39:53

Page 51: Flash MX 2004 pro vývojáře webových aplikací

342 FLASH MX Professional 2004 pro vývojáře webových aplikací

Verze pro ColdFusionVýpis 9.1 ukazuje verzi ColdFusion webové služby, kterou využívá příklad Rating Chart. Vytvoří komponentu ColdFusion (CFC) s názvem SongRatingWebService. CFC obsahuje dvě funkce: veřejně přístupné metody getSongs() a getSongRatings() uvedené v tabulce 9.1, dále pak in-terní pracovní funkci s názvem getSeriesData(), která získává z databáze data za dané obdo-bí.

Poznámka

Názvy vašich vlastních CFC nemusí končit na WebService. Dělám to zde jen proto, aby byl z názvů zřejmý účel věcí.

Výpis 9.1 SongRatingWebService.cfc – Verze ColdFusion webové služby

<cfcomponent>

<!--- Tato funkce je vystavena přes webové služby ---> <cffunction name="getSongs" access="remote" returntype="query"> <!--- Lokální proměnné ---> <cfset var result = ""> <!--- Získá informace o písních z databáze ---> <cfquery name="result" datasource="VenueDB"> SELECT idSong, sSongName FROM Songs ORDER BY sSongName </cfquery> <!--- Vrátí result ---> <cfreturn result> </cffunction> <!--- Tato funkce je vystavena přes webové služby ---> <cffunction name="getSongRatings" access="remote" returntype="array"> <cfargument name="dStartDate" type="date" required="Yes"> <cfargument name="dEndDate" type="date" required="Yes"> <cfargument name="spanDivider" type="string" required="Yes"> <!--- Lokální proměnné ---> <cfset var result = ArrayNew(1)> <cfset var tempEndDate = ""> <cfset var seriesData = ""> <!--- Různé módy, v závislosti na argumentu spanDivider ---> <cfswitch expression="#spanDivider#"> <!--- Specifikuje-li se "none" nebo jiná, neznámá hodnota --->

flash_geeks.indb Odd1:342 20.9.2004 14:39:53

Page 52: Flash MX 2004 pro vývojáře webových aplikací

Připojování k serverům pomocí webových služeb 343

<cfdefaultcase> <!--- Získá data za toto období, připojí k poli result ---> <cfset seriesData = getSeriesData(dStartDate, dEndDate)> <cfset ArrayAppend(result, seriesData)> </cfdefaultcase> <!--- Jestliže byla specifikovaná platná hodnota pro rozdělení ---> <!--- období, vrátí několik dílčích období ---> <cfcase value="m,d,ww,q" delimiters=","> <!--- Cyklus, dokud nedojdeme na poslední období ---> <cfloop condition="dStartDate lte dEndDate"> <!--- Tohle je koncové datum tohoto období ---> <cfset tempEndDate = DateAdd(spanDivider, 1, dStartDate)> <!--- Získá data za toto období, přidá je do pole result ---> <cfset seriesData = getSeriesData(dStartDate, tempEndDate)> <cfset ArrayAppend(result, seriesData)> <!--- Tohle je počáteční datum dalšího období ---> <cfset dStartDate = tempEndDate> </cfloop> </cfcase> </cfswitch> <!--- Vrátí result ---> <cfreturn result> </cffunction> <!--- Interní funkce: vrátí data za jediné období ---> <cffunction name="getSeriesData" access="private" returntype="Struct"> <cfargument name="dStartDate" type="date" required="Yes"> <cfargument name="dEndDate" type="date" required="Yes">

<!--- Lokální proměnné ---> <cfset var result = StructNew()> <cfset var RatingsQuery = ""> <!--- Získá z databáze informace o písni a hodnocení ---> <cfquery name="RatingsQuery" datasource="VenueDB"> SELECT s.idSong, AVG(sr.nRating) AS AvgRating, COUNT(sr.idSongRating) AS NumRatings FROM Songs s LEFT OUTER JOIN SongRatings sr ON (s.idSong = sr.idSong AND dRatingDate >= <cfqueryparam value="#dStartDate#" cfsqltype="CF_SQL_TIMESTAMP"> AND dRatingDate <= <cfqueryparam value="#dEndDate#" cfsqltype="CF_SQL_TIMESTAMP">) GROUP BY s.idSong </cfquery>

flash_geeks.indb Odd1:343 20.9.2004 14:39:54

Page 53: Flash MX 2004 pro vývojáře webových aplikací

344 FLASH MX Professional 2004 pro vývojáře webových aplikací

<!--- Naplní datovou strukturu, která reprezentuje tuto sérii ---> <cfset result["startDate"] = dStartDate> <cfset result["endDate"] = dEndDate> <cfset result["songs"] = RatingsQuery>

<!--- Vrátí result---> <cfreturn result> </cffunction>

</cfcomponent>

Poznámka

ColdFusion bohužel nedodržuje velikost písmen v názvech sloupců. Místo toho, aby je ukládal se stejnou velikostí písmen, s jakou přišly z databáze, uloží ColdFusion interně názvy sloupců v samých velkých písmenech. To znamená, že se názvy sloupců přenesou do Flashe ve velkých písmenech, proto je musíte v kódu ActionScriptu psát také velkými písmeny.

Jak vidíte, je výpis docela prostý. Protože byla metoda getSongs() označena atributem ac-cess="remote", stane se dostupnou, jakmile se k CFC přistoupí jako k webové službě. Vnitřek funkce je extrémně jednoduchý: nad databází se vykoná dotaz s názvem result. Jeho výsledky se pak vrátí do Flashe (nebo do jakéhokoli jiného klienta, který informace požadoval) jako sada záznamů ve stylu výsledků dotazu.

Uvnitř metody getSongRatings() (která je také dostupná pro vzdálený přístup) se děje dvo-jí druh zpracování; závisí na argumentu spanDivider. Má-li spanDivider hodnotu none (nebo jakoukoli nefunkční hodnotu), zavolá funkce prostě interní metodu getSeriesData() a přidá výsledek do pole result. Má-li spanDivider jednu z dohodnutých hodnot (den, týden, měsíc, čtvrtletí), cykluje se přes období a volá se getSeriesData() pro každé dílčí období. Až veřejná funkce dokončí svou práci, bude pole result obsahovat objekt (který zase bude obsahovat pole objektů vztahující se k písním) pro každé dílčí období.

Poznámka

Existuje mnoho, velmi mnoho způsobů, jak se dá napsat tento kód . Určitě to není nejefektivnější kód (hlavně proto, že vyžaduje separátní dotaz pro každé časové období), je ale velmi srozumitelný a dá se použít pro většinu databázových systémů. Ve skutečné praxi byste patrně napsali chytřejší příkaz SQL (nebo uloženou proceduru), který by získal všechny požadované informace najednou.

Nyní byste měli být schopni ověřit, že je webová služba dostupná. Navštivte ve svém prohlíže-či tuto URL: http://localhost/venue/chapter09/SongRatingWebService.cfc (za předpo-kladu že je na vašem místním stroji typická instalace ColdFusion). Až dodáte své heslo (použijte stejné, které používáte pro ColdFusion Administrator), odpoví server dokumentační stránkou s názvy a argumenty všech metod (viz obrázek 9.4).

flash_geeks.indb Odd1:344 20.9.2004 14:39:54

Page 54: Flash MX 2004 pro vývojáře webových aplikací

Připojování k serverům pomocí webových služeb 345

Obrázek 9.4. ColdFusion poskytuje pro CFC tuto automatickou dokumentační stránku.

Verze pro Microsoft .NETVýpis 9.2 ukazuje verzi .NET webové služby, kterou využívá příklad Rating Chart. Tato webo-vá služba byla napsaná, aby byl kód co nejjednodušší, jako jediný ASM ( Active Server Method) (soubor .asmx). Funkce označené řádkem [WebService] budou veřejně dostupné jako meto-dy webové služby. Ve skutečné praxi byste možná zvolili pro svůj skutečný kód separátní soubor kódu (technika s „kódem v pozadí“, neboli code-behind).

Podrobnosti o sestrojování webových služeb XML s ASP.NET si najděte v dokumentaci .NET Framework SDK.

Výpis 9.2 SongRatingWebService.asmx – Verze Microsoft .NET webové služby

<%@ WebService Language="C#" Class="SongRatingWebService" %>using System.Web.Services;using System;using System.Data;using System.Data.Odbc;using System.Collections;using System.Xml.Serialization;

[WebService(Namespace="http://nateweiss.com/fsg/webservices")]public class SongRatingWebService : WebService {

[WebMethod(Description="Returns IDs and names of songs")]

flash_geeks.indb Odd1:345 20.9.2004 14:39:54

Page 55: Flash MX 2004 pro vývojáře webových aplikací

346 FLASH MX Professional 2004 pro vývojáře webových aplikací

public Song[] getSongs() { // Databázový dotaz vracející data o písních string sql = "SELECT idSong, sSongName " + "FROM Songs ORDER BY sSongName"; OdbcConnection connection = new OdbcConnection("DSN=VenueDB"); OdbcCommand command = new OdbcCommand(sql, connection); connection.Open(); OdbcDataReader reader = command.ExecuteReader(); // Vyplní instancemi písní ArrayList ArrayList list = new ArrayList(); // Pro každý záznam z databáze vytvoří strukturu Song while(reader.Read()) { Song song = new Song(); song.IDSONG = reader.GetInt32(0); song.SSONGNAME = reader.GetString(1); list.Add(song); }

// Převede ArrayList na normální pole C# Song[] result = new Song[list.Count]; list.CopyTo(result); // Vrátí pole return result; }

[WebMethod(Description="Returns aggregated ratings for songs")] public SongRatingSeries[] getSongRatings( DateTime dStartDate, DateTime dEndDate, string spanDivider) { // K uchování sérií využije pole s měnitelnou velikostí ArrayList list = new ArrayList();

// Jestliže nejsou dílčí období if (spanDivider == "none") { // Získá sérii dat za období list.Add(getSeriesData(dStartDate, dEndDate)); // Jestliže bylo specifikované dílčí období } else { DateTime dTempEnd = new DateTime();

flash_geeks.indb Odd1:346 20.9.2004 14:39:55

Page 56: Flash MX 2004 pro vývojáře webových aplikací

Připojování k serverům pomocí webových služeb 347

// Cykluje, dokud se nedostaneme na poslední dílčí období while(dStartDate <= dEndDate) { // Spočte koncové datum tohoto období switch(spanDivider) { case "d": dTempEnd = dStartDate.AddDays(1); break; case "ww": dTempEnd = dStartDate.AddDays(7); break; case "m": dTempEnd = dStartDate.AddMonths(1); break; case "q": dTempEnd = dStartDate.AddMonths(3); break; }

// Získá sérii dat pro dané období, přidá je do pole list.Add(getSeriesData(dStartDate, dTempEnd)); // Tohle je počáteční datum dalšího dílčího období dStartDate = dTempEnd; } }

// Převede ArrayList na normální pole C# SongRatingSeries[] result = new SongRatingSeries[list.Count]; list.CopyTo(result); // Vrátí result return result; } // Interní funkce: vrací data jediného období private SongRatingSeries getSeriesData( DateTime startDate, DateTime endDate) { // Dotaz SQL, který získává informace o písních a jejich hodnocení string sql = "SELECT s.idSong, AVG(sr.nRating) AS AvgRating, " + "COUNT(sr.idSongRating) AS NumRatings " + "FROM Songs s LEFT OUTER JOIN SongRatings sr " + "ON (s.idSong = sr.idSong " + "AND sr.dRatingDate >= ? "+ "AND sr.dRatingDate <= ? )" + "GROUP BY s.idSong";

// Definuje databázové připojení // (V praxi byste pokaždé nevytvářeli nové připojení) OdbcConnection connection = new OdbcConnection("DSN=VenueDB"); OdbcCommand command = new OdbcCommand(sql, connection);

// Naplní zástupce data nezávisle na databázi command.Parameters.Add("dRatingDate", OdbcType.DateTime); command.Parameters.Add("dRatingDate", OdbcType.DateTime); command.Parameters[0].Value = startDate;

flash_geeks.indb Odd1:347 20.9.2004 14:39:56

Page 57: Flash MX 2004 pro vývojáře webových aplikací

348 FLASH MX Professional 2004 pro vývojáře webových aplikací

command.Parameters[1].Value = endDate; // Vykoná dotaz connection.Open(); OdbcDataReader reader = command.ExecuteReader(); // Naplní datovou strukturu reprezentující tuto sérii dat SongRatingSeries result = new SongRatingSeries(); result.startDate = startDate; result.endDate = endDate;

// Záznamy dat se budou udržovat v poli s měnitelnou velikostí ArrayList list = new ArrayList();

// Naplní pole daty while(reader.Read()) { SongRating rec = new SongRating(); rec.IDSONG = reader.GetInt32(0); rec.NUMRATINGS = reader.GetInt32(2); // GetDecimal() generuje chybu, když se získá null if (! reader.IsDBNull(1)) { rec.AVGRATING = reader.GetDecimal(1); } list.Add(rec); }

// Převede ArrayList na normální pole C# result.songs = new SongRating[list.Count]; if (list.Count > 0) { list.CopyTo(result.songs); } // Vrátí result return result; } // Metoda getSongs() vrátí pole této struct public struct Song { public int IDSONG; public string SSONGNAME; }

// Metoda getSeriesData() vrátí pole této struct public struct SongRatingSeries { public DateTime startDate; public DateTime endDate; public SongRating[] songs; }

flash_geeks.indb Odd1:348 20.9.2004 14:39:56

Page 58: Flash MX 2004 pro vývojáře webových aplikací

Připojování k serverům pomocí webových služeb 349

// Vlastnost SongRatingSeries.songs je pole této struct public struct SongRating { public int IDSONG; public decimal AVGRATING; public int NUMRATINGS; }}

.NET verze webové služby bohužel vyžaduje o něco víc kódu, než jste možná ochotni strá-vit. V době, kdy jsem tohle psal, neposkytovala komponenta WebServicesConnector dodávaná s počátečním vydáním Flash MX 2004 Professional přímou podporu metod, které vracejí instan-ce DataSet. .NET. Alternativou je vrátit pole objektů, což se probírá v oddílu „Sady záznamů ve stylu výsledků dotazu a pole objektů“ této kapitoly, ke kterému se dostaneme za moment.

Normálně by člověk očekával, že bude moci pro objekty v poli použít hešovací tabulky nebo jiný obdobný typ. Webové služby .NET ovšem nemohou vracet hešovací tabulky (alespoň v do-bě, když jsem tohle psal); musíte použít nějaký objekt se striktnější definicí. Nejpřímější řešení je definovat vlastní typ struct pro každou kombinaci databázových sloupců, které chcete z webo-vých služeb vracet. (Mohli byste samozřejmě třídy struct definovat v separátním jmenném pro-storu, aby se daly lépe opětovně využívat.)

Kromě toho, jestliže plníte pole objektů pomocí nějakého čtenáře dat (DataReader), je čas-to nezbytné použít ArrayList, nikoli běžné pole s pevnou délkou (viz výpis 9.2), protože počet databázových záznamů, které čtenář dat načítá, není znám, dokud se nedojde na konec sady zá-znamů. Poté, co se ArrayList naplní, můžete ho převést na normální pole metodou ArrayList.CopyTo(). Pak bude Flash moci zkonzumovat pole objektů, jako kdyby to byla sada záznamů vý-sledků dotazu.

Nyní byste měli být schopni ověřit, že je webová služba funkční. Navštivte ve svém prohlíže-či tuto URL: http://localhost/venue/chapter09/SongRatingWebService.asmx (za předpo-kladu, že je na vašem místním stroji typická instalace .NET). IIS (Internet Information Server) by měl odpovědět jedinou webovou stránkou, na které jsou vypsané veřejné metody služby. Když kliknete na názvu metody, dostanete se na stránku, kde můžete metodu z prohlížeče otestovat (je to vidět na obrázku 9.5).

flash_geeks.indb Odd1:349 20.9.2004 14:39:56

Page 59: Flash MX 2004 pro vývojáře webových aplikací

350 FLASH MX Professional 2004 pro vývojáře webových aplikací

Obrázek 9.5. IIS poskytuje pro každou webovou službu tuto automatickou dokumentační a testovací stránku.

Verze Java/J2EEVýpis 9.3 ukazuje verzi Java webové služby, kterou využívá příklad Rating Chart. Výpis je poměr-ně bezproblémová implementace metod vypsaných výše. Jedním z prvků, které stojí za zmínku, je soukromá pomocná funkce makeArrayList(), která vezme java.sql.ResultSet a převede ho na java.util.ArrayLIst vyplněný instancemi java.util.Hashtable, kde každá hešovací tabulka reprezentuje řádek dat z databáze. Tento krok je nezbytný, protože ResultSet není pří-mo serializovatelný přes webové služby.

Poznámka

Alternativou by bylo vrátit nějaký objekt, který podporuje rozhraní javax.sql.WebRowSet. Očekává se, že je bude podporovat komponenta WebServiceConnector Flashe. Tato alternativa bude pravděpodobně efektivnější, nebylo ale možné dát pro knihu dohromady bezproblémový příklad, protože v aktuální distribuci Java není zařazena skutečná implementace WebRowSet (definuje jen rozhraní). V době, kdy jsem tohle psal, se očekávalo, že verze 1.5 Java JRE bude zahrnovat standardní implementace různých rozhraní RowSet, takže je pravděpodobné, že až budete knihu číst, bude k dispozici více informací.

Výpis 9.3 SongRatingWebService.jws – Verze Java webové služby

/* Bude-li tento soubor uložen jako .jws, bude vystavený mnoha enginami jako "instantní" webová služba. Alternativně ho lze uložit a zkompilovat jako obyčejnou třídu Java, a pak konfigurovat, aby byla vystavena jako webová služba pomocí prvku <service> ve vašem konfiguračním souboru WEB-INF/server-config.wsdd vašeho serveru JSP/J2EE.*/import java.sql.*;

flash_geeks.indb Odd1:350 20.9.2004 14:39:57

Page 60: Flash MX 2004 pro vývojáře webových aplikací

Připojování k serverům pomocí webových služeb 351

import java.util.*;

public class SongRatingWebService {

private String dbDriver = "sun.jdbc.odbc.JdbcOdbcDriver"; private String dbURL = "jdbc:odbc:VenueDB"; // Tato funkce je vystavena přes webové služby public ArrayList getSongs() throws java.lang.ClassNotFoundException, java.sql.SQLException { // Tohle je dotaz SQL, kterým se načtou data String sql = "SELECT idSong AS IDSONG, sSongName AS SSONGNAME" + " FROM Songs ORDER BY sSongName";

// Vykoná dotaz SQL nad ukázkovou databází Class.forName(dbDriver); Connection con=DriverManager.getConnection(dbURL); ResultSet rs = con.createStatement().executeQuery(sql);

return makeArrayList(rs); } // Tato funkce je vystavena přes webové služby public ArrayList getSongRatings( java.util.Date dStartDate, java.util.Date dEndDate, String spanDivider) throws java.lang.ClassNotFoundException, java.sql.SQLException { // Sérii dat bude udržovat v poli s měnitelnou velikostí ArrayList result = new ArrayList();

// Jestliže se nežádají dílčí období if (spanDivider.equals("none")) { result.add(getSeriesData(dStartDate, dEndDate)); // Jestliže bylo specifikované nějaké dílčí období } else { // Pro přidávání data získá instanci třídy Calendar GregorianCalendar cal = new GregorianCalendar(); // Cykluje, dokud se nedostane k poslednímu časovému období while(dStartDate.compareTo(dEndDate) <= 0) { // Spočte koncové datum tohoto období cal.setTime(dStartDate); if (spanDivider.equals("ww")) cal.add(cal.WEEK_OF_YEAR, 1); else if (spanDivider.equals("d")) cal.add(cal.DATE, 1);

flash_geeks.indb Odd1:351 20.9.2004 14:39:57

Page 61: Flash MX 2004 pro vývojáře webových aplikací

352 FLASH MX Professional 2004 pro vývojáře webových aplikací

else if (spanDivider.equals("m")) cal.add(cal.MONTH, 1); else if (spanDivider.equals("q")) cal.add(cal.MONTH, 3); // Získá sérii dat pro období, přidá je do pole result.add(getSeriesData(dStartDate, cal.getTime())); dStartDate = cal.getTime(); } } // Vrátí result return result; } // Interní funkce: vrátí data za jediné časové období private Hashtable getSeriesData( java.util.Date dStartDate, java.util.Date dEndDate) throws java.lang.ClassNotFoundException, java.sql.SQLException { // Získá databázové připojení Class.forName(dbDriver); Connection con = DriverManager.getConnection(dbURL); // Kód SQL pro získání informací o písních a o jejich hodnocení String sql = "SELECT s.idSong AS IDSONG, " + "AVG(sr.nRating) AS AVGRATING, " + "COUNT(sr.idSongRating) AS NUMRATINGS " + "FROM Songs s LEFT OUTER JOIN SongRatings sr " + "ON (s.idSong = sr.idSong " + "AND sr.dRatingDate >= ? "+ "AND sr.dRatingDate <= ? )" + "GROUP BY s.idSong"; // Nastaví parametry dotazu a vykoná dotaz PreparedStatement statement = con.prepareStatement(sql); statement.setTimestamp(1, new Timestamp(dStartDate.getTime())); statement.setTimestamp(2, new Timestamp(dEndDate.getTime())); ResultSet rs = statement.executeQuery(); // Naplní hešovací tabulku, která reprezentuje tuto sérii Hashtable result = new Hashtable(); result.put("startDate", dStartDate); result.put("endDate", dEndDate); result.put("songs", makeArrayList(rs)); // Vrátí result return result; }

flash_geeks.indb Odd1:352 20.9.2004 14:39:58

Page 62: Flash MX 2004 pro vývojáře webových aplikací

Připojování k serverům pomocí webových služeb 353

// Pomocná funkce, která ulehčuje získání java.util.ArrayList naplněného // instancemi java.util.Hashtable pro každý řádek v ResultSet private ArrayList makeArrayList(ResultSet rs) throws java.sql.SQLException { // Tohle je pole s měnitelnou velikostí, které se vrátí ArrayList result = new ArrayList();

// Získá metadata (názvy sloupců a podobně) z ResultSet ResultSetMetaData meta = rs.getMetaData();

// Pro každý řádek v ResultSet while (rs.next()) { // Nová hešovací tabulka pro tento řádek Hashtable hash = new Hashtable(); // Pro každý sloupec v ResultSet přidá do hešovací tabulky // dvojici název/hodnota for (int i = 1; i <= meta.getColumnCount(); i++) { Object val = rs.getObject(i); if (val == null) val = ""; hash.put(meta.getColumnName(i), val); } // Přidá hešovací tabulku do pole result.add(hash); } // Vrátí result return result; }}

Mnohé enginy Java Web Services podporují dva různé způsoby vytváření webové služby. Prvním je uložit zdrojový kód Java nějaké obyčejné třídy jako soubor .jws ( Java Web Service). Server třídu za pochodu zkompiluje a vystaví její veřejné metody jako metody webové služby. Nebo se třída uloží někam na cestu ke třídám serveru, a pak se přidá do konfiguračního soubo-ru server-config.wsdd ve vaší složce WEB-INF prvek <service>.

Ve výpisu 9.3 se předpokládá, že používáte takový engin webové služby, který podporuje jednodušší techniku .jws. JRun 4, ColdFusion MX 6.1 a další servery J2EE vybavené enginem Apache AXIS podporují soubory .jws. Jestliže váš server Java nepodporuje soubory .jws, přesto by se vám mělo podařit příklad rozchodit, když uložíte výpis 9.3 s příponou .java, zkompiluje-te ho, přidáte třídu na cestu ke třídám, a pak přidáte do server-config.wsdd následující prvek <service>:

flash_geeks.indb Odd1:353 20.9.2004 14:39:58

Page 63: Flash MX 2004 pro vývojáře webových aplikací

354 FLASH MX Professional 2004 pro vývojáře webových aplikací

<service name=“RongRatingWebService“ provider=“java:RPC“> <parameter name=“methodName“ value=“getSongs getSongRatings“/> <parameter name=“className“ value=“venue.chapter09.SongRatingWebService“/></service>

Nyní byste měli být schopni ověřit, že je webová služba funkční. Navštivte ve svém prohlížeči tuto URL: http://localhost/venue/chapter09/SongRatingWebService.jws (za předpokla-du, že je na vašem místním stroji typická instalace JRun nebo jiná instalace vybavená AXIS). Váš server by měl odpovědět prostou webovou stránkou, na které by měl být název služby (jak je vi-dět na obrázku 9.6). Podle toho, o jaký server se jedná, možná zde budou i odkazy na automatic-kou dokumentaci nebo na testovací stránky.

Obrázek 9.6.Většina implementací Java poskytne pro webovou službu stránku HTML.

Nepoužíváte-li soubory .jws, bude URL pro stránku, kterou vidíte na obrázku 9.6, jiná. Může být dost závislá na serveru Java, který používáte. Zkuste jako první pokus http://localhost/services/SongRatingWebService.

Sady záznamů ve stylu výsledků dotazu a pole objektůKdyž jsem psal tuto část knihy, uměla funkcionalita webových služeb dodávaná s Flashem pří-mo konzumovat sady záznamů dat z ColdFusion. V Java a .NET vám to může dát kvůli následu-jícím věcem poněkud víc práce.

• Metoda webové služby založená na ColdFusion, která vrací sadu záznamů ve stylu výsled-ků dotazu, odešle data do Flashe pomocí datového typu QueryBean. Uvnitř ActionScriptu se s tímto datovým typem zachází jako s každým jiným polem objektů (kde každý objekt v poli má pro každý sloupec dvojici název/hodnota, a kde každý prvek pole reprezentuje řá-dek). Skutečně, výstup takové metody můžete změnit z jednoho návratového typu na jiný

flash_geeks.indb Odd1:354 20.9.2004 14:39:58

Page 64: Flash MX 2004 pro vývojáře webových aplikací

Připojování k serverům pomocí webových služeb 355

(například na nějaký dotaz, nebo na nějaké pole struktur), aniž byste museli sahat na kód ActionScriptu .

• Metodu webové služby založenou na Javě, která vrací nějakou implementaci javax.sql.WebRowSet, by měl Flash zkonzumovat, aniž by se muselo zařizovat mnoho speciálních záležitostí. Protože ale v době, kdy jsem tohle psal, nebyla taková implementace součástí typické distribuce Javy, příklady v této knize tuto schopnost nevyužívají. Alternativou je na-psat metodu na straně serveru tak, že vrátí pole objektů (hešovací tabulky, například) a Fla-sh je zpracuje stejným způsobem.

• Metodu webové služby .NET, která vrací sadu záznamů ve stylu ADO.NET, nemohou přímo konzumovat komponenty webových služeb, které se dodávaly s počáteční verzí Flash MX 2004. Data musíte převést na pole objektů a vrátit toto pole. Je docela možné, že se v prů-běhu doby, než se kniha dostane do tisku, komponenty Flashe zaktualizují, a že to, co jsem právě napsal, už platit nebude.

Protože ColdFusion vždy vrací názvy sloupců ve velkých písmenech (viz poznámka za výpi-sem 9.1) , uvádějí se ve všech výpisech této kapitoly názvy sloupců velkými písmeny. Kromě toho, verze .NET a Java (výpisy 9.2 a 9.3) používají ve svých databázových dotazech klauzule AS, aby si vynutily názvy sloupců ve velkých písmenech. Tyto neobvyklé praktiky jsou zde hlavně proto, aby se dal se všemi servery snadněji použít tentýž SWF. Nepracujete-li s ColdFusion, můžete pře-jmenovávání s AS vynechat a použít ve svém kódu ActionScriptu obvyklé názvy sloupců s velký-mi písmeny jen na začátku slov (sSongName, ne SSONGNAME).

Testování kódu na straně serveruChcete-li otestovat, zda kód na serveru z výpisů 9.1, 9.2, nebo 9.3 pracuje správně, navštivte URL WSDL nové webové služby na svém serveru. Přesná URL WSDL se bude trochu měnit podle toho, který aplikační server používáte, zda je instalovaný na vašem místním stroji, a jak je na-konfigurovaný.

V tabulce 9.2 jsou uvedené URL WSDL, které nejpravděpodobněji použijete pro přístup k no-vé webové službě na svém serveru. Jako obvykle nahraďte localhost skutečným názvem nebo IP adresou vašeho serveru, není-li nainstalovaný na vašem místním stroji. Kromě toho nezapo-meňte přidat číslo portu HTTP, jestliže váš server naslouchá jinde než na výchozím portu (80).

Tabulka 9.2 Typické URL WSDL pro ukázkové webové služby

Server URL WSDL

ColdFusion MX http://localhost/venue/chapter09/SongRatingWebService.cfc?WSDL

Microsoft .NET http://localhost/venue/chapter09/SongRatingWebService.asmx?WSDL

JRun 4 http://localhost/venue/chapter09/SongRatingWebService.jws?WSDL

... pokračování

flash_geeks.indb Odd1:355 20.9.2004 14:39:59

Page 65: Flash MX 2004 pro vývojáře webových aplikací

356 FLASH MX Professional 2004 pro vývojáře webových aplikací

Server URL WSDL

Jiné J2EE Přesná URL bude záviset na engině webové služby, kterou budete používat (Tomcat/AXIS, WebSphere atd.) Nejslibnějšími kandidáty jsou tyto dvě URL:http://localhost/venue/chapter09/SongRatingWebService.jws?WSDLhttp://localhost/services/SongRatingWebService?WSDL

Když ve svém webovém prohlížeči navštívíte patřičnou URL z tabulky 9.2, měli byste do-stat zpět obsah WSDL, který popisuje novou webovou službu. Přesný obsah WSDL je poněkud závislý na serveru, který používáte, měl by ale obsahovat jasné odkazy na metodu getSongRa-tings() a její argumenty (viz obrázek 9.7). Jestliže se vám zdá, že se neobjevil správný WSDL, nebo obdržíte-z vašeho aplikačního serveru nějakou chybovou zprávu, bude možná nutné, abys-te se podívali do dokumentace vašeho serveru a zjistili, zda není třeba učinit nějaké dodatečné konfigurační kroky.

Obrázek 9.7.Váš server by nyní měl vrátit obsah WSDL, který popisuje novou službu.

Poznámka

S obsahem se netrapte; není pro vás důležité, abyste rozuměli, co přesně dělají všechny prvky, atributy a odkazy na jmenný prostor ve WSDL. Tomu potřebuje rozumět pouze Flash – nebo ten klient webové služby, který má ke službě přistoupit. Chcete-li se dozvědět něco navíc, podnikněte online několik rychlých hledání, jimiž se dostanete k referenční příručce WSDL, kde se vysvětluje vše velmi podrobně. Není to zrovna lehká četba na dovolenou, ale možná zjistíte, že je to docela zajímavé.

Komponenty použité v příkladu Rating ChartOtevřete teď dokument RatingChart.fla (najdete ho ve složce ukázkových souborů kapitoly). Uvidíte, že je to relativně prostý dokument se čtyřmi vrstvami:

flash_geeks.indb Odd1:356 20.9.2004 14:40:00

Page 66: Flash MX 2004 pro vývojáře webových aplikací

Připojování k serverům pomocí webových služeb 357

• Vrstva Actions obsahuje jen jediný řádek kódu: direktivu #include, která vkládá exter-ní soubor s názvem RatingChartMainCode.as. V něm je umístěn skutečný kód Action-Scriptu pro dokument.

• Vrstva UI Elements obsahuje ovládací prvky uživatelského rozhraní pro výběr počáteč-ního a koncového data atd. (jsou vidět na obrázku 9.3). Vrstva dále obsahuje dvě instance komponenty WebServiceConnector s názvy wsGetSongs a wsGetSongRatings.

• Vrstva UI Background obsahuje jen něco stínování a textů, aby byl vzhled rozhraní v ro-zumné míře hezký.

• Vrstva Bar Chart obsahuje instanci komponenty SimpleBarChart. Jak její název napo-vídá, umí komponenta produkovat jednoduché sloupkové grafy (více o tom za moment). Instanci na ploše jsem přidělil název instance bcChart.

Některé z komponent jsme ještě v knize neprobírali. Většinou se ale chovají a používají bez-problémově (vysvětlují dobře samy sebe), takže pro všechny tyto komponenty neuvádím kom-pletní samostatný úvod a referenční příručky tříd. Informace o konkrétních podporovaných vlastnostech, metodách a událostech si můžete vyhledat v dokumentaci Flashe, většinou ale pů-jde jen o to, přetáhnout na plochu instanci dané komponenty a nastavit několik jejích vlastnos-tí v inspektoru komponenty.

Takže uvedu jen stručný přehled komponent použitých v příkladu, abyste si udělali představu o tom, co se bude dít ve zbývající části oddílu. V následujícím výčtu jsou uvedeny komponenty, které najdete v dokumentu RatingChart.fla. Ke každé z nich připojuji několik poznámek.

• Dvě komponenty DateFieldDateField s názvy dfStartDatedfStartDate a dfEndDatedfEndDate. Komponenty DateField jsou skvělé, když potřebujete, aby uživatel mohl snadno a rychle zadat datum. Uživatelé mohou datum napsat, nebo si kliknutím na ikoně zobrazí kalendář (je vidět na obrázku 9.2) a vyberou datum v něm.

• Komponenta ComboBoxComboBox s názvem dbSpanDividerdbSpanDivider. Její vlastnost data byla v inspektoru komponenty nastavena na [0, 1, 7, 30], a vlastnost labels na odpovídající popisky (pro nic, dny, týdny, měsíce atd.). Jestliže například uživatel vybere z pole se seznamem hodnotu weekly (týdně), bude její hodnota 7. Aktuální hodnota, kterou uživatel právě vy-bral, je v ActionScriptu dostupná jako hodnota vlastnosti value.

• Komponenta Button s viditelným nápisem ShowShow. Tlačítko má v panelu Actions ke své události click připojený jeden řádek kódu. Řádek volá metodu trigger() (viz tabulka 9.3 v příštím oddílu) komponenty WebServiceConnector na ploše. Připomínám, že kompo-nenty Button odpalují události click, zatímco symboly tlačítek, která vyrábíte sami, od-palují událost onRelease. Jako vždy můžete buď vytvořit zpracovatele události v nějakém snímku, nebo napsat třídu ActionScriptu 2.0 a zavěsit ji na tlačítko pomocí addEventLis-tener() (a nedávat kód do panelu Actions k samotnému objektu tlačítka). Podrobnosti o různých možnostech reakcí na události viz kapitola 4, „Slabikář ActionScriptu“.

flash_geeks.indb Odd1:357 20.9.2004 14:40:01

Page 67: Flash MX 2004 pro vývojáře webových aplikací

358 FLASH MX Professional 2004 pro vývojáře webových aplikací

• Komponenta SimpleBarChartSimpleBarChart s názvem bcChartbcChart. Komponenta SimpleBarChart nepatří mezi komponenty, které se dodávají s Flashem. Vytvořil jsem ji pro potřeby příkladu a vy-světluji ji stručně v dodatku A, „Připomínky k budování komponenty SimpleBarChart“. Vystavuje nevelkou sadu vlastností a metod, jimiž se grafu sdělí, jaká data má zobrazit a jak je má prezentovat.

Poznámka

Komponenta SimpleBarChart, kterou používám v této kapitole, je relativně prostá a obsahuje jen několik schopností. Napsal jsem ji speciálně pro potřeby knihy tak, aby to byl funkční příklad propracovaný do dostatečné hloubky. Aby na něm by bylo vidět, co to znamená, když chcete vyrobit své vlastní vizuální prostředky pro data. Chcete-li nějaký vyspělejší graf, nebo potřebujete jiný typ grafu nebo sloupků (a nechcete se s tím psát), navštivte stránky Macromedia Flash Exchange na adrese www.macromedia.com. Je tam k dispozici mnoho vyspělých, na komponentách založených řešení (obvykle levných) jiných výrobců. Dalším skvělým místem pro hledání komponent je www.flashcomponents.net.

Referenční příručka komponenty WebServiceConnector

Když jste se seznámili s kódem na straně serveru, který dodává data pro příklad Rating Chart, je na čase, abychom se zblízka podívali na komponentu Flashe, kterou používáme pro připoje-ní k serveru: WebServiceConnector. Tato vyspělá komponenta umožňuje neobyčejně snadno budovat animace Flashe, které konzumují (tj. užívají) webové služby. Jak uvidíte v příštím oddí-lu, chcete-li zavolat jakoukoli metodu nějaké webové služby, stačí udělat jen několik drobných krůčků.

V tabulce 9.3 jsou uvedeny metody, vlastnosti a události, které podporuje komponenta WebServiceConnector.

Tabulka 9.3 Členy komponenty WebServiceConnector

Člen Popis

WSDLURL Vlastnost. URL WSDL webové služby, ke které chcete přistoupit. Připomínám, že název této vlastnosti je v samých velkých písmenech (což je jistá anomálie). Na konkrétní URL WSDL, kterou pravděpodobně použijete při připojování k vašemu serveru v příkladu Rating Chart, se podívejte do tabulky 9.2.

operation Vlastnost typu String. Název metody webové služby, kterou chcete volat (například getSongRatings, chcete-li zavolat metodu getSongRatings() z tabulky 9.1). Vezměte prosím na vědomí, že se specifikovaná metoda webové služby nezavolá, dokud se při běhu přes skript nevykoná metoda trigger() komponenty.

suppressInvalid-Calls

Vlastnost. Určuje, zda se má volání metody webové služby potlačit, jestliže jsou hodnoty dodané pro parametry služby neplatné (například mají špatný datový typ). Má-li hodnotu false (výchozí), metoda webové služby se přesto zavolá, což může znamenat, že webová služba vygeneruje chybovou zprávu (v závislosti na tom, jak jazyk na straně serveru zpracovává konverze datových typů atd.). Má-li hodnotu true, metoda webové služby se nezavolá; místo toho komponenta odpálí událost status s vlastností code nastavenou na InvalidParams.

flash_geeks.indb Odd1:358 20.9.2004 14:40:01

Page 68: Flash MX 2004 pro vývojáře webových aplikací

Připojování k serverům pomocí webových služeb 359

Člen Popis

multipleSimulta-neous Allowed

Vlastnost. Určuje, zda bude moci komponenta vykonávat několik volání webové služby najednou. Má-li hodnotu true (výchozí), je povoleno více volání; má-li hodnotu false, odpálí druhé volání událost status s vlastností code nastavenou na CallAlreadyInProgress, není-li první volání ještě dokončené. Stojí za zmínku, že se zde nejedná ani o zásobník nebo frontu typuFIFO (první tam a první ven); takže není žádná garance, že server nebude reagovat na druhé či třetí volání, ještě než se dokončí první volání. Komponenta bude odpalovat své události result v tom pořadí, v jakém docházejí odpovědi od serveru, které mohou, ale nemusejí být ve stejném pořadí, v jakém byly iniciovány.

params Vlastnost. Parametry (argumenty), které se mají dodat metodě webové služby, jako pole. Parametry musíte uvést ve stejném pořadí, v jakém jsou definované v implementaci metody na serveru (a tedy ve stejném pořadí, v jakém jsou popsané ve WSDL služby). Často se pro poskytování těchto parametrů využívá vázání dat, nedodáváte pole params sami.

trigger() Metoda. Vykoná metodu webové služby. Komponenta odpálí svou událost result, když obdrží odpověď od serveru. Podle toho, jaké hodnoty mají vlastnosti suppressInvalidCalls a multipleSimultaneousAllowed, je možné, že volání bude potlačeno; pokud k tomu dojde, komponenta odpálí svou událost status s patřičnou hodnotou vlastnosti code.

status Událost. Odpálí se, když se změní stav komponenty. Flash předá události jediný argument, což je stavový objekt. Stavový objekt obsahuje vlastnosti code, target a data. Z nich je nejzajímavější vlastnost code; bude nastavena na StatusChange (indikuje normální operaci), CallAlreadyInProgress (což může nastat, když má multipleSimultaneousAllowed hodnotu false), InvalidParams nebo WebServiceFault (indikuje chybovou podmínku). Vlastnost target je odkaz na WebServiceConnector, která odpálila událost. Vlastnost data obsahuje dodatečné informace o stavu volání webové služby. Informace budou různé podle obsahu code. Konkrétní hodnoty vlastnosti data, které Flash poskytuje za různých okolností, si vyhledejte v dokumentaci Flashe.

results Vlastnost. Data, pokud jsou nějaká, která vrací metoda webové služby. Datový typ vlastnosti závisí na metodě webové služby (results bude String, jestliže metoda vrací řetězec, instance třídy Array, jestliže metoda vrací pole atd.).

result Událost. Odpálí se po úspěšném dokončení volání metody webové služby. Flash předá do jakéhokoli zpracovatele události, kterého poskytnete, jediný argument (říká se mu objekt události). Objekt result obsahuje vlastnosti type a target. Vlastnost type je vždy nastavená na řetězec result; target je odkaz na WebServiceConnector, která odpálila událost. Na data vrácená vzdálenou metodou se můžete odkázat pomocí target.results nebo název_konektoru.results (kde název_konektoru zastupuje název instance komponenty).

send Událost. Odpálí se jako důsledek volání metody trigger(), těsně před tím, než se kontaktuje server, aby vykonal metodu webové služby. Do zpracovatelů události, které poskytnete pro tuto událost, se předává objekt události; objekt obsahuje vlastnosti type a target (viz událost result v předchozím řádku tabulky).

Poznámka

Členy komponenty WebServiceConnector vypsané v tabulce 9.3 se také aplikují na třídu WebService, kterou vytváříte při běhu syntaxí new WebService(). Podrobnosti viz oddíl „Připojování k webové službě pouze pomocí skriptu“ později v této kapitole.

flash_geeks.indb Odd1:359 20.9.2004 14:40:02

Page 69: Flash MX 2004 pro vývojáře webových aplikací

360 FLASH MX Professional 2004 pro vývojáře webových aplikací

Základní způsob používání komponenty WebServiceConnector

Když už teď víte, jaké metody, vlastnosti a události poskytuje komponenta WebServiceConnector, pojďme se podívat, jak se dají některé její členy využít v praxi.

Pohlédněte na ploše v dokumentu RatingChart.fla na horní WebServiceConnector (komponenta má název instance wsGetRatings). Vyberte komponentu a otevřete panel inspek-tora komponenty. Na stránce Parameters si všimněte, že WSDLURL byla nastavena na jednu z URL uvedených v tabulce 9.2 a že vlastnost operation byla nastavena na getSongRatings (viz ta-bulka 9.1). Na stránce Schema byla vlastnost params naplněna argumenty metody getSongRa-tings() (dStartDate, dEndDate a spanDivider). Na stránce Bindings byly tyto tři parametry svázány s ovládacími prvky dfStartDate, dfEndDate a cbSpanDivider.

Zajímá-li vás proces, kterým se takto připraví komponenta WebServiceConnector, odstraň-te teď její instanci z plochy a opětovně ji vytvořte pomocí postupu uvedeného za poznámkou.

Poznámka

Následující kroky vás doprovodí postupem, jímž svážete s WebServiceConnector dva ovládací prvky pro výběr data a jeden rozvírací seznam. Podle toho, jaký styl práce máte v oblibě, možná raději zkopírujete hodnoty z ovládacích prvků do argumentů webové služby přes skript (a nedovolíte, aby kopírování hodnot provedlo za vás vázání dat). Jestliže to chcete udělat takto, přeskočte celý proces a rovnou místo vázání přidejte potřebných pár řádků kódu (ukázka viz oddíl „Připojování k webové službě pouze pomocí skriptu“ později v této kapitole.

1. Přetáhněte z panelu Components na plochu novou instanci WebServiceConnector a při-dělte jí název instance wsGetSongRatings. Nezáleží na tom, kam komponentu umístíte, protože při prohlížení animace nebude vidět. Já je obvykle umisťuji do šedé pracovní ob-lasti obklopující bílou část plochy.

2. Na stránce Parameters panelu Properties nebo inspektora komponenty vyplňte hodnotu WSDLURL patřičnou URL pro váš server (podrobnosti viz tabulka 9.2 výše). Až stisknete Enter, pravděpodobně zjistíte, že Flash chvilku šrotuje v pozadí. IDE kontaktuje váš ser-ver, aby získalo kód WSDL popisující váš server (viz obrázek 9.7) výše.

3. Stále na stránce Parameters zadejte pro operation hodnotu getSongRatingsgetSongRatings. Hodnotu můžete napsat ručně, nebo ji vybrat z rozvíracího seznamu (viz obrázek 9.8).

Obrázek 9.8. Metody, které poskytuje webová služba, jsou dostupné v rozvíracím seznamu operation.

flash_geeks.indb Odd1:360 20.9.2004 14:40:02

Page 70: Flash MX 2004 pro vývojáře webových aplikací

Připojování k serverům pomocí webových služeb 361

Poznámka

Hleďme, hleďme. Jakpak vlastně Flash ten seznam naplnil? Získal dostupné operace (metody) z obsahu WSDL, který si stáhl z vašeho serveru. Jestliže vás to nevzrušilo, je s vámi patrně něco v nepořádku. Pro jistotu si přeměřte tep.

4. Stále na stránce Parameters nastavte multipleSimutaneousAllowed na false (podrob-nosti viz tabulka 9.3).

5. Aktivujte v inspektoru komponenty stránku Schema a všimněte si, že prvky schématu už jsou naplněné; nemusíte to dělat sami. Pod prvkem params – který reprezentuje ar-gumenty metody webové služby -. byste měli vidět prvky s názvy dStartDate, dEndDa-te a spanDivider (viz obrázek 9.9). Dále si všimněte, že byly patřičně nastaveny i datové typy argumentů (argumenty dStartDatea dEndDate obsahují datum, spanDivider je řetězec). Kromě toho byl nastaven datový typ results na Array (prvek [n] pod ním je zástupce prvků pole). Všechno se to stalo automaticky, když jste pro parametr operati-on vybrali getSongRating (to je vidět na obrázku 9.8 výše). Na stránce Schema nemusíte upravovat žádné prvky; jen vezměte na vědomí, že Flash ví, co každá metoda vaší webové služby potřebuje, a co vrací.

Poznámka

V mnohých situacích není nutné ručně upravovat pro metody webové služby žádná nastavení jednotlivých prvků ve schématu. Několik nastavení je ale k dispozici a chcete-li, můžete je prozkoumat. Konkrétně, nastavení formatter a encoder se mohou hodit tehdy, chcete-li zobrazit informace (jako je třeba datum) napsané do ovládacích prvků TextInput nebo Label jako naformátované řetězce. Kromě toho může být prospěšné i nastavení validation options, vážete-li ovládací prvky uživatelského rozhraní proto, abyste vytvořili nějaké rozhraní pro pořizování dat. Některé z těchto voleb probereme v kapitole 11, „Budování lepších formulářů s Flashem“. Kompletní vysvětlení jednotlivých nastavení najdete v dokumentaci Flashe.

Obrázek 9.9. Metadata webové služby pro argument a návratovou hodnotu se vám automaticky naplní na stránce Schema komponenty.

flash_geeks.indb Odd1:361 20.9.2004 14:40:03

Page 71: Flash MX 2004 pro vývojáře webových aplikací

362 FLASH MX Professional 2004 pro vývojáře webových aplikací

6. Klikněte v inspektoru komponenty na záložku stránky Bindings. Klikněte na tlačítko Add Binding (na znaménko plus), pak v dialogovém okně Add Binding zvolte parametr dStartDate (viz obrázek 9.10). Klepněte na OK, čímž vazbu přidáte.

Obrázek 9.10. Každý argument, který webová služba očekává, můžete vázat na data.

7. Klikněte na volbu bound to nové vazby, pak klikněte vpravo na ikoně lupy (viz obrázek 9.11), abyste otevřeli dialogové okno Bound To.

Obrázek 9.11. Poté, co přidáte argumentu vazbu, musíte uvést ovládací prvek, se kterým má být svázán.

8. Vyberte na levé straně dialogového okna Bound To ovládací prvek dfStartDate a ověř-te, že je na pravé straně vybraná vlastnost selectedDate (viz obrázek 9.12). Některé ovládací prvky uživatelského rozhraní mají na pravé straně několik prvků, z nichž může-te volit; ovládací prvky DateField však mají jen jeden prvek, selectedDate, (reprezen-tuje samozřejmě datum, které uživatel vybere při běhu).

flash_geeks.indb Odd1:362 20.9.2004 14:40:04

Page 72: Flash MX 2004 pro vývojáře webových aplikací

Připojování k serverům pomocí webových služeb 363

Obrázek 9.12. Závěrečným krokem při vázání je vlastnost selectedDate ovládacího prvku DateField.

9. Zopakujte kroky 6 až 8 pro parametr dEndDate a komponentu dfEndDate.

10. Zopakujte kroky 6 až 8 ještě jednou, tentokrát pro parametr spanDivider a ovládací pr-vek cbSpanDivider. Až se dostanete do dialogového okna Bound To (viz obrázek 9.12), zvolte vlastnost value (protějšek selectedDate). U ovládacích prvků ComboBox je hod-nota toho, co uživatel vybral, dostupná ve vlastnosti value; tento ovládací prvek nevysta-vuje vlastnost selectedDate.

Poznámka

Komponenta ComboBox má ještě několik dalších vlastností, které lze vázat na data (dataProvider, selectedIndex a selectedItem). Každý typ komponenty vystavuje jiné vlastnosti, které lze vázat na data. To si už prozkoumejte samostatně, nebo se obraťte na dokumentaci Flashe, která obsahuje pro každou komponentu kompletní seznam takových vlastností.

Několik slov ke komponentě SimpleBarChart

Než se ponoříme do kódu ActionScriptu příkladu Rating Chart, měli byste dobře rozumět tomu, co dělají metody, které vystavuje komponenta SimpleBarChart. V tabulce 9.4 jsou uvedené čle-ny komponenty, které se v příkladu používají. Další výklad k této komponentě – včetně para-metrů, které můžete nastavovat v panelu Properties nebo v inspektoru komponenty – najdete v dodatku A.

Poznámka

Připomínám, že tato komponenta není součástí dodávky Flashe. Napsal jsem ji pro potřeby knihy jako ukázku takového druhu komponent pro vizualizace dat, o kterých vy nebo váš tým zvažujete, že byste je mohli začít budovat úplně od začátku.

flash_geeks.indb Odd1:363 20.9.2004 14:40:05

Page 73: Flash MX 2004 pro vývojáře webových aplikací

364 FLASH MX Professional 2004 pro vývojáře webových aplikací

Tabulka 9.4 Členy komponenty SimpleBarChart

Člen Popis

addField(name, label) Metoda. Přidá do sloupkového grafu sloupec (bude reprezentován sloupkem grafu). name je libovolný řetězec nebo identifikační číslo jednoznačně určující sloupec; nebude v grafu vidět. label je popisek, který se objeví dole na grafu.

addSeries(data, title) Metoda. Přidá do sloupkového grafu řadu datových bodů. Argument data je objekt (asociativní pole) obsahující vlastnosti pro každý sloupec dodaný pomocí addField(). Hodnota každé vlastnosti je číslo, které se má reprezentovat v grafu. Argument title je řetězec, který se má použít jako titulek grafu, když se zobrazuje daná řada dat.

clearAll() Metoda. Odstraní všechny sloupce a řady dat z grafu, vlastně graf resetuje.

draw() Metoda. Způsobí, že graf zobrazí první řadu dat v podobě sloupku grafu.

refreshInterval Vlastnost. Počet milisekund, které mají uplynout mezi zobrazením dvou po sobě jdoucích řad dat. Hodnota 2000 znamená, že graf bude po zobrazení každé řady dat 2 vteřiny pauzovat. Jestliže je jen jediná řada dat, vlastnost nemá žádný účinek. Je-li vlastnost nastavená na 0, zobrazení se nebude automaticky posouvat z řady na řadu; můžete to ale zařídit pomocí metod next() a previous() (viz dodatek A).

Takže, máte-li na ploše nějakou komponentu SimpleBarChart s názvem instance bcChart, mohli byste zobrazit informace v grafu tímto stylem:

bcChart.addField(“lp“, “Liz Phair“);bcChart.addField(“nw“, “Nate Weiss“);bcChart.addSeries({nw:34, lp:36}, “věk v roce 2003“);bcChart.addSeries({nw:35, lp:36}, “ věk v roce 2004“);bcChart.addSeries({nw:36, lp:36}, “ věk v roce 2005“);bcChart.draw();

Výsledkem by byl graf se dvěma sloupky. Graf by zobrazil tři porce dat, jednu za druhou. Jeden sloupek by se v každém roce zvýšil o 1, druhý by zůstával stále stejně vysoký.

Poznámka

Ještě jednou připomínám, že podrobnější informace k SimpleBarChart najdete v dodatku A. Potřebujete-li pro své grafy nějakou vyspělejší komponentu, prozkoumejte Flash Charting Components na stránkách Macromedia Flash Exchange na adrese www.macromedia.com.

Kód ActionScriptuKdyž máme na ploše všechny potřebné ovládací prvky, je na čase prohlédnout si kód ActionScriptu, který pohání příklad Rating Chart. Podobně jako příklad Song Rater z kapitoly 8, je většina kódu ActionScriptu i tohoto příkladu obsažena v jediném externím souboru ActionScriptu, jmenu-je se RatingChartMainCode.as. Soubor je vložen do snímku 1 dokumentu RatingChart.fla řádkem:

flash_geeks.indb Odd1:364 20.9.2004 14:40:05


Recommended