Flex tipy a triky – Webservices
23.11.2006· Autor: Ondřej Brichta·
Přidat komentář
V dnešním tipu se podíváme na komunikaci Flex aplikace a webservice služby, která vrací název země dle zadané domény a nebo služby generující chemické prvky.
Web services
Jedná se o webové služby, se kterými lze dle stanovených pravidel komunikovat a získávat z nich potřebná data. Prakticky tak coby uživatelé těchto služeb nemusíme mít žádné informace o jejich pozadí, musíme znát pouze jejich název, umístění a funkce, pomocí kterých se volají jednotlivé požadavky.
Komunikace s webovými službami probíhá na základě předávání XML objektů přes http protokol. Jednoduchý požadavek na webovou službu pak může vypadat takto:
<mx:WebService id="geoIpWebService" wsdl="http://www.webservicex.net/geoipservice.asmx?WSDL">
<mx:operation name="GetGeoIP" result="result(event)" resultFormat="object">
<mx:request xmlns="http://www.webservicex.net">
<IPAddress>"89.102.134.217"</IPAddress>
</mx:request>
</mx:operation>
</mx:WebService>
Webová služba je v MXML kódu deklarovaná pomocí vlastnho tagu, s potřebným atributem určujícím adresu s popisem webové služby - wsdl. Dále je vše již otázkou „operation" tagu, který zpřesňuje volanou metodu a funkci, která přebírá výsledky volané služby. Samotný požadavek je definován tagem „request", který obsahuje cestu k webové službě a dále obsahuje v subelementech atributy volané služby.
Praktická ukázka
Abychom si vyzkoušeli webové služby na konkrétním příkladu, využijeme volně dostupné webservices z domény: http://www.webservicex.net
Zdrojový MXM kód aplikace pak bude vypadat takto:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" verticalAlign="middle" horizontalAlign="center">
<mx:Script>
<![CDATA[
import mx.controls.List;
import mx.rpc.soap.Operation;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
private function clickHandler(event:MouseEvent):void
{
this.geoIpWebService.getOperation("GetGeoIP").send();
}
private function result(event:ResultEvent):void
{
var result:Object = event.result;
Alert.show(
result.ReturnCodeDetails + " : " + result.IP + "\n\n" +
"Kód země: " + result.CountryCode + "\n" +
"Jméno země: " + result.CountryName + "\n");
}
private function fault(event:FaultEvent):void
{
Alert.show(event.toString(), "Připojení se nezdařilo");
}
]]>
</mx:Script>
<mx:TitleWindow id="titleWindow" width="320" height="240" layout="horizontal">
<mx:Label id="ipLabel" text="IP adresa:" />
<mx:TextInput id="ipInput" text="89.102.134.217" maxChars="15" />
<mx:ControlBar id="bar" verticalAlign="middle" horizontalAlign="center">
<mx:Button id="findButton" label="Odeslat" click="clickHandler(event)"/>
</mx:ControlBar>
<mx:horizontalAlign>center</mx:horizontalAlign>
<mx:verticalAlign>middle</mx:verticalAlign>
<mx:title>Ukázka </mx:title>
</mx:TitleWindow>
<mx:WebService id="geoIpWebService" wsdl="http://www.webservicex.net/geoipservice.asmx?WSDL" showBusyCursor="true">
<mx:operation name="GetGeoIP" result="result(event)" fault="fault(event)" resultFormat="object">
<mx:request xmlns="http://www.webservicex.net">
<IPAddress>{this.ipInput.text}</IPAddress>
</mx:request>
</mx:operation>
</mx:WebService>
</mx:Application>
Volaná služba umožňuje zobrazit název země, dle zadané IP aresy uživatele. Praktickou ukázku lze vyzkoušet zde:webservices
Periodická tabulka
Druhou ukázkou bude zobrazení chemických prvků, včetně jejich značek. Budeme k tomuto potřebovat dvě komponenty, pomocí kterých upravíme vzhled tabulky, kde se budou výsledky zobrazovat:
Kopomenta „popisek_prvek"
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="150" height="30">
<mx:Label x="0" y="0" text="{data.ElementName}" width="150" height="20"/>
</mx:Canvas>
Komponenta „popisek_znacka"
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="60" height="20" show="initApp();" initialize="initApp();">
<mx:Script>
<![CDATA[
import mx.rpc.soap.Operation;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
private function initApp():void{
this.prvky.getOperation("GetElementSymbol").send();
}
private function result(event:ResultEvent):void
{
var result:XML = new XML(event.result);
popisek.text = result.Table.Symbol;
}
private function fault(event:FaultEvent):void
{
popisek.text = "nenalezeno";
}
]]>
</mx:Script>
<mx:Label id="popisek" x="0" y="0" width="150" height="20"/>
<mx:WebService id="prvky" wsdl="http://www.webservicex.net/periodictable.asmx?WSDL" showBusyCursor="true">
<mx:operation name="GetElementSymbol" result="result(event)" fault="fault(event)" resultFormat="object">
<mx:request xmlns="http://www.webservicex.net">
<ElementName>{this.data.ElementName}</ElementName>
</mx:request>
</mx:operation>
</mx:WebService>
</mx:Canvas>
Nakonec skript samotné aplikace bude vypadat takto:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp();">
<mx:Script>
<![CDATA[
[Bindable]
private var mainXML:XML;
import mx.rpc.soap.Operation;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
private function initApp():void{
this.prvky_all.getOperation("GetAtoms").send();
}
private function result(event:ResultEvent):void
{
var result:XML = new XML(event.result);
mainXML = result;
}
private function fault(event:FaultEvent):void
{
//nenalezeno
}
]]>
</mx:Script>
<mx:DataGrid cachePolicy="on" rowHeight="30" dataProvider="{mainXML.Table}" x="54" y="45" height="450">
<mx:columns>
<mx:DataGridColumn width="200" headerText="Název prvku" itemRenderer="popisek_prvek"/>
<mx:DataGridColumn width="200" headerText="Značka prvku" itemRenderer="popisek_znacka"/>
</mx:columns>
</mx:DataGrid>
<mx:WebService id="prvky_all" wsdl="http://www.webservicex.net/periodictable.asmx?WSDL" showBusyCursor="true">
<mx:operation name="GetAtoms" result="result(event)" fault="fault(event)" resultFormat="object">
<mx:request xmlns="http://www.webservicex.net">
</mx:request>
</mx:operation>
</mx:WebService>
</mx:Application>
Výslednou aplikaci si lze prohlédnout zde: prvky
Zdrojové soubory jsou k dispozici zde: webservices.zip
Ondřej Brichta Vývojář flashových a mobilních AIR aplikací, šéfredaktor Flash.cz, školitel produktů Flash, Flex, Flash Media Server
E-mail: ob(zavinac)obria.cz |
Web:
http://www.obria.cz
|
Motto: <°))))><
Seriál:
Tipy a triky
Tipy a triky je seriál zaměřený na zajímavá řešení a vylepšení flashových aplikací