Vous êtes sur la page 1sur 139

Accs aux donnes avec

ADOBE FLEX 4

Dernire mise jour le 18/3/2010

2010 Adobe Systems Incorporated. All rights reserved.


Copyright

Accs aux donnes avec Adobe Flex 4. Adobe, the Adobe logo, ActionScript, Adobe AIR, ColdFusion, Dreamweaver, Flash, Flash Player, Flash Builder, Flex, Flex Builder, and LiveCycle are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries. Microsoft and Windows are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries. Apple, Macintosh, and Mac OS are trademarks of Apple Inc., registered in the United States and other countries. Java is a trademarks or registered trademark of Sun Microsystems, Inc. in the United States and other countries. Linux is the registered trademark of Linus Torvalds in the U.S. and other countries. All other trademarks are the property of their respective owners. This Work is licensed under the Creative Commons Attribution Non-Commercial 3.0 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ Adobe Systems Incorporated, 345 Park Avenue, San Jose, California 95110, USA.

Dernire mise jour le 18/3/2010

iii

Sommaire
Chapitre 1 : Prsentation de laccs aux services de donnes Accs aux donnes dans Flex compar dautres technologies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Utilisation de Flash Builder pour accder aux services de donnes Composants daccs aux donnes ...................................................... 3 ..................................................................................... 5

Chapitre 2 : Cration dapplications centres sur les donnes avec Flash Builder Cration dun projet Flex pour laccs des services de donnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Connexion des services de donnes Installation de Zend Framework Gnration de lapplication client Test des oprations de service .................................................................................. 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

Utilisation dune occurrence de serveur unique

Configuration des types de donnes pour les oprations de service de donnes Gestion de laccs aux donnes partir du serveur

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

Gnration du code Flash Builder pour les applications client

Dploiement des applications accdant aux services de donnes

Chapitre 3 : Implmentation de services pour des applications centres sur les donnes AMF (Action Message Format) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Dfinition de type ct client et ct serveur Implmentation de services ColdFusion Implmentation de services PHP Dbogage de services distants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

Exemple dimplmentation de services partir de plusieurs sources

Chapitre 4 : Accs aux donnes ct serveur Utilisation de composants HTTPService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Utilisation de composants WebService Utilisation de composants RemoteObject Traitement des rsultats des services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

Transmission de paramtres explicites et liaison de paramtres

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

Dernire mise jour le 18/3/2010

Chapitre 1 : Prsentation de laccs aux services de donnes


Accs aux donnes dans Flex compar dautres technologies
Flex nutilise pas les sources de donnes et les donnes de la mme manire que les applications dont linterface utilisateur fait appel HTML.

Traitement ct client et traitement ct serveur


Contrairement aux ensembles de modles HTML crs laide de servlets, denvironnements JSP, ASP, PHP ou CFML, Flex spare le code client du code serveur. Linterface utilisateur de lapplication est compile dans un fichier binaire SWF envoy au client. Lorsque lapplication effectue une demande un service de donnes, le fichier SWF nest pas recompil et aucune ractualisation de page nest requise. Le service distant ne renvoie que des donnes. Flex lie les donnes renvoyes des composants de linterface utilisateur dans lapplication client. Lorsquun utilisateur clique sur le contrle Button dune application par exemple, le code ct client appelle un service Web. Les donnes de rsultat provenant du service Web sont renvoyes dans le fichier SWF binaire sans ractualisation de page. Les donnes de rsultat peuvent alors tre utilises comme contenu dynamique dans lapplication.
<?xm l version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768" xmlns:employeesservice="services.employeesservice.*" xmlns:valueObjects="valueObjects.*"> <fx:Declarations> <s:WebService id="RestaurantSvc" wsdl="http://examples.adobe.com/flex3app/restaurant_ws/RestaurantWS.xml?wsdl" /> <s:CallResponder id="getRestaurantsResult" result="restaurants = getRestaurantsResult.lastResult as Restaurant"/> </fx:Declarations> <fx:Script> <![CDATA[ import mx.controls.Alert; protected function b1_clickHandler(event:MouseEvent):void { getRestaurantsResult.token = RestaurantWS.getRestaurantss(); } ]]> </fx:Script> . . . <s:Button id="b1" label="GetRestaurants" click="button_clickHandler(event)"/>

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 2


Prsentation de laccs aux services de donnes

Comparons cet exemple Flex lexemple suivant, dans lequel du code JSP est utilis pour appeler un service Web avec une balise personnalise JSP. Lorsquun utilisateur demande le code JSP, la demande du service Web est effectue sur le serveur et non pas sur le client. Le rsultat est utilis pour gnrer du contenu dans la page HTML. Le serveur dapplication regnre la page HTML entire avant de la renvoyer au navigateur Web de lutilisateur.
<%@ taglib prefix="web" uri="webservicetag" %> <% String str1="BRL"; String str2="USD";%> <!-- Call the web service. --> <web:invoke url="http://www.itfinity.net:8008/soap/exrates/default.asp" namespace="http://www.itfinity.net/soap/exrates/exrates.xsd" operation="GetRate" resulttype="double" result="myresult"> <web:param name="fromCurr" value="<%=str1%>"/> <web:param name="ToCurr" value="<%=str2%>"/> </web:invoke> <!-- Display the web service result. --> <%= pageContext.getAttribute("myresult") %>

Accs la source de donnes


Une autre diffrence entre Flex et les autres technologies dapplication Web rside dans labsence (dans Flex) de communication directe avec une source de donnes. Vous utilisez un composant daccs aux donnes pour vous connecter un service distant et interagir avec la source de donnes ct serveur. Lexemple suivant prsente une page ColdFusion accdant directement une source de donnes :
... <CFQUERY DATASOURCE="Dsn" NAME="myQuery"> SELECT * FROM table </CFQUERY> ...

Une fonctionnalit similaire est obtenue dans Flex en ayant recours un service HTTPService, un service Web ou un composant RemoteObject afin dappeler un objet ct serveur qui renvoie les rsultats dune source de donnes.

Evnements, appels de service et liaison de donnes


Flex est une technologie oriente vnement. Une action de lutilisateur ou un vnement de programme peut dclencher laccs un service. Par exemple, lutilisateur cliquant sur un bouton constitue un vnement daction qui peut tre utilis pour dclencher un appel de service. Un vnement de programme peut tre une application terminant la cration dun composant de linterface utilisateur tel quun composant DataGrid. Lvnement creationComplete pour le composant DataGrid peut tre utilis pour appeler un service distant qui renseignera ce composant. Dans Flex, les appels de service sont asynchrones. Lapplication client na pas besoin dattendre les donnes renvoyes. Les appels de service asynchrones prsentent des avantages lors de lextraction ou de la mise jour de jeux de donnes volumineux. Lapplication client nest pas bloque par lattente de lextraction ou de la mise jour des donnes.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 3


Prsentation de laccs aux services de donnes

Les donnes renvoyes par un appel de service sont stockes dans une proprit CallResponder associe lappel de service. Les composants de linterface utilisateur font alors appel la liaison de donnes pour extraire de la proprit CallResponder les donnes renvoyes. La liaison de donnes dans Flex vous permet de mettre jour dynamiquement un composant de linterface utilisateur avec une source de donnes. Par exemple, un composant Flex peut associer son attribut text lattribut lastResult dune proprit CallResponder. En cas de modification des donnes de CallResponder, le composant Flex est automatiquement mis jour. Flex implmente galement la liaison de donnes bidirectionnelle qui garantit la mise jour automatique dun composant Flex ou dune source de donnes dont les donnes sont modifies. Un autre avantage de la liaison de donnes bidirectionnelle rside dans la mise jour de donnes distantes partir des saisies effectues par un utilisateur dans un composant Form ou dans un composant de donnes Flex.

Voir aussi
Cration dapplications centres sur les donnes avec Flash Builder la page 8

Utilisation de Flash Builder pour accder aux services de donnes


Flex Builder 3 permet dimplmenter des appels de procdures distants des services de donnes laide des composants daccs aux donnes Flex. Cependant, Flash Builder simplifie ce processus. Flash Builder fournit des assistants et des outils permettant deffectuer les oprations suivantes :

Accs aux services de donnes Configuration des donnes renvoyes par le service de donnes Assistance pour la pagination des donnes renvoyes par le service Assistance pour la fonctionnalit de gestion des donnes qui synchronise plusieurs mises jour des donnes du
serveur

Gnration de code client pour laccs aux services de donnes Liaison des donnes renvoyes par le service aux composants de linterface utilisateur

Flux de travaux Flash Builder pour laccs aux services


Appliquez le flux de travaux suivant lorsque vous utilisez Flash Builder pour crer une application qui accde des services de donnes.
1 Selon les circonstances, vous commencerez soit par vous connecter un service de donnes, soit par construire

linterface utilisateur. Connexion au service distant Si vous commencez par vous connecter au service distant, vous devez ensuite construire linterface utilisateur. Construction de linterface utilisateur Si vous commencez par construire linterface utilisateur, vous devez ensuite vous connecter au service distant. Remarque : la premire action effectue relve dun choix personnel. Par exemple, si la conception dune interface utilisateur est dj prvue, vous pouvez commencer par construire linterface utilisateur. A linverse, vous pouvez commencer par vous connecter aux donnes et laisser Flash Builder vous aider gnrer les composants dapplication.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 4


Prsentation de laccs aux services de donnes

2 Liez les oprations de donnes des composants dapplications.

Flash Builder vous assiste de diverses manires pour lier les oprations de donnes des composants dapplications. Dans Flash Builder, procdez comme suit :

Gnrez diffrents formulaires pour les donnes renvoyes par les oprations de service. Slectionnez les oprations de service que vous souhaitez lier aux composants de linterface utilisateur. Gnrez un formulaire pour reprsenter les donnes complexes renvoyes par un service.
3 (Facultatif) Grez lextraction et la mise jour des donnes.

Les outils Flash Builder vous permettent dimplmenter la pagination des donnes renvoyes et de coordonner la mise jour des jeux de donnes. Lors du retour de gros volumes denregistrements de donnes, vous implmentez gnralement la pagination pour extraire un jeu denregistrements selon vos besoins. Pour les applications mettant jour plusieurs enregistrements, vous pouvez implmenter des fonctions de gestion de donnes. Les fonctions de la gestion des donnes sont parmi dautres :

Fonction de validation pour la mise jour simultane des enregistrements modifis Mcanisme dannulation des modifications avant leur criture sur le serveur Gnration de code pour la mise jour automatique des composants dinterface utilisateur au fur et mesure
que des enregistrements sont ajouts, supprims ou modifis
4 Excutez lapplication et surveillez le flux de donnes.

Une fois lapplication termine, excutez-la pour en observer le fonctionnement. Utilisez le Moniteur de rseau Flash Builder pour afficher les donnes transmises entre lapplication et le service. Le Moniteur de rseau est utile pour diagnostiquer les erreurs et analyser les performances. Flash Builder fournit galement des environnements robustes de dbogage et de dfinition de profil. Le Moniteur de rseau et le profileur Flash sont disponibles avec Flash Builder Premium.

Voir aussi
Cration dapplications centres sur les donnes avec Flash Builder la page 8

Dveloppement des services pris en charge par Flash Builder


Les assistants et les outils Flash Builder prennent en charge laccs aux implmentations des types de services suivants :

Services PHP Services ColdFusion BlazeDS Services LiveCycle Data Services Services HTTP (de style REST) Services Web (SOAP) Fichiers XML statiques
Si vous avez besoin dune prise en charge doutils pour dautres types de services (Ruby on Rails, par exemple), vous pouvez dvelopper limplmentation Flash Builder. Voir Rfrence dextensibilit Flash Builder.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 5


Prsentation de laccs aux services de donnes

Composants daccs aux donnes


Les composants daccs aux donnes permettent une application client dappeler des oprations et des services travers un rseau. Les composants daccs aux donnes utilisent des appels de procdure distante pour interagir avec les environnements de serveur. Les trois composants daccs aux donnes sont les composants RemoteObject, HTTPService et WebService. Les composants daccs aux donnes sont conus pour les applications client dans lesquelles un modle dappel et de rponse constitue un bon choix pour accder aux donnes externes. Ces composants permettent au client deffectuer des demandes asynchrones des services distants qui traitent les demandes, puis de renvoyer les donnes lapplication. Un composant daccs aux donnes appelle un service distant. Il stocke ensuite les donnes de rponse du service dans un objet ActionScript ou tout autre format renvoy par le service. Utilisez les composants daccs aux donnes dans lapplication client pour quelle fonctionne avec trois types de services :

Services dobjets distants (RemoteObject) Services Web (WebServices) Services HTTP (HTTPService)
Adobe Flash Builder fournit des assistants et des outils permettant denvelopper limplmentation dun composant daccs aux donnes dans une enveloppe de service. Lenveloppe de service encapsule la fonctionnalit du composant daccs aux donnes, rendant invisible une grande partie de limplmentation de niveau infrieur et vous permettant ainsi de vous concentrer sur limplmentation de services et la gnration dapplications client pour accder ces services. Pour plus dinformations sur lutilisation de Flash Builder pour accder aux services de donnes, voir Cration dapplications centres sur les donnes avec Flash Builder la page 8.

Accs aux services


Par dfaut, Adobe Flash Player bloque laccs tout hte qui ne correspond pas exactement celui utilis pour charger une application. Si vous nutilisez pas Adobe LiveCycle Data Services pour traiter les demandes par proxy, un service HTTP ou Web doit rsider sur le serveur hbergeant lapplication ou le serveur distant hbergeant le service HTTP ou Web doit dfinir un fichier crossdomain.xml. Le fichier crossdomain.xml permet un serveur dindiquer que ses donnes et ses documents sont disponibles pour les fichiers SWF traits partir de certains domaines ou de tous les domaines. Le fichier crossdomain.xml doit figurer la racine Web du serveur que lapplication contacte.

Composants HTTPService
Utilisez les composants HTTPService pour lenvoi de requtes HTTP GET ou POST et afin dinclure les donnes de rponses HTTP dans une application client. Si vous utilisez Flex pour crer des applications de bureau (excutes dans Adobe AIR), les requtes HTTP PUT et DELETE sont prises en charge. Si vous utilisez Adobe LiveCycle Data Services ou BlazeDS, vous pouvez faire appel un HTTPProxyService grce auquel vous pourrez utiliser des mthodes HTTP supplmentaires. Le service HTTPProxyService vous permet denvoyer des requtes GET, POST, HEAD, OPTIONS, PUT, TRACE ou DELETE. Un service HTTP peut consister en nimporte quel URI HTTP qui accepte des demandes HTTP et envoie des rponses. Un autre nom courant pour ce type de service est service Web de style REST. REST signifie REpresentational State Transfer, un style architectural pour les systmes hypermdia distribus.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 6


Prsentation de laccs aux services de donnes

Les composants HTTPService savrent utiles lorsque vous ne pouvez pas exposer la mme fonctionnalit en tant que service Web SOAP ou service dobjet distant. Vous pouvez par exemple utiliser des composants HTTPService pour interagir avec des pages JavaServer (JSP), des servlets et des pages ASP qui ne sont pas disponibles comme services Web ou destinations de service distant. Lorsque vous appelez la mthode send() de lobjet HTTPService, elle effectue une demande HTTP auprs de lURI spcifi et une rponse HTTP est renvoye. Si vous le souhaitez, vous pouvez transmettre des arguments lURI spcifi. Flash Builder fournit des flux de travaux qui vous permettent de vous connecter de manire interactive des services HTTP. Pour plus dinformations, voir Accs aux services HTTP la page 13.

Voir aussi
Accs aux services HTTP la page 13 Thse : Representational State Transfer (REST) par Roy Thomas Fielding

Composants WebService
Les composants WebService vous permettent daccder aux services Web SOAP (modules logiciels comportant des mthodes). Les mthodes de service Web sont aussi appeles oprations. Les interfaces de service Web sont dfinies laide du langage WSDL (Web Services Description Language). Les services Web fournissent aux modules logiciels excuts sur diffrentes plateformes une mthode conforme aux standards leur permettant dinteragir entre eux. Pour plus dinformations sur les services Web, voir la section relative aux services Web du site World Wide Web Consortium, www.w3.org/2002/ws/. Les applications client peuvent interagir avec des services Web qui dfinissent leurs interfaces dans un document WSDL, disponible en tant quURL. WSDL est un format standard permettant de dcrire les messages quun service Web comprend, le format des rponses de ce service ces messages, les protocoles que le service Web prend en charge et ladresse laquelle envoyer les messages. Flex prend en charge WSDL 1.1, dcrit ladresse www.w3.org/TR/wsdl, ainsi que les services Web cods RPC et littral document. Il prend galement en charge les demandes et les rsultats de service Web formats en tant que messages SOAP et transports via HTTP. SOAP fournit la dfinition du format XML que vous pouvez utiliser pour changer des informations structures et types entre un client de service Web (une application cre avec Flex, par exemple) et un service Web. Vous pouvez utiliser un composant WebService pour vous connecter un service Web SOAP lorsque les services Web constituent un standard tabli dans lenvironnement. Les composants WebService sont galement utiles pour les objets situs dans un environnement dentreprise mais qui ne sont pas ncessairement disponibles sur le chemin source de lapplication Web. Flash Builder fournit des flux de travaux qui vous permettent de vous connecter de manire interactive des services Web. Pour plus dinformations, voir Accs aux services Web la page 16.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 7


Prsentation de laccs aux services de donnes

Composants RemoteObject
Les services dobjets distants vous permettent daccder la logique commerciale directement dans son format natif au lieu de la formater en tant que XML, comme vous le faites avec les services Web ou de style REST. Vous conomisez ainsi le temps ncessaire pour exposer la logique existante au format XML. Un autre avantage des services dobjets distants rside dans la vitesse de communication travers le rseau. Les changes de donnes seffectuent encore via HTTP ou https, mais les donnes elles-mmes sont srialises dans une reprsentation binaire. Lutilisation de composants RemoteObject rduit le volume de donnes qui transitent sur le rseau, diminue la mmoire utilise ct client et acclre le traitement. ColdFusion, PHP, BlazeDS et Adobe LiveCycle Data Services peuvent utiliser une dfinition de type ct serveur lors de laccs des donnes du serveur. Lapplication client accde un objet Java, un composant ColdFusion (qui constitue un objet Java en interne) ou une classe PHP directement par linvocation distante dune mthode sur un objet dsign. Lobjet sur le serveur utilise ses propres types de donnes natifs en tant quarguments, interroge une base de donnes avec ces arguments, puis renvoie les valeurs dans leurs types de donnes natifs. Lorsque la dfinition de type ct serveur nest pas disponible, Flash Builder dispose doutils pour implmenter la dfinition de type ct client. Utilisez Flash Builder afin de configurer et de dfinir des types pour les donnes renvoyes du service. La dfinition de type ct client permet lapplication client dinterroger une base de donnes et dextraire des donnes correctement types. La dfinition de type ct client est requise pour un service qui ne dfinit pas le type de donnes renvoyes par le service. Flash Builder fournit des flux de travaux qui vous permettent de vous connecter de manire interactive des services dobjets distants. Pour plus dinformations, voir Connexion des services de donnes la page 9.

Dernire mise jour le 18/3/2010

Chapitre 2 : Cration dapplications centres sur les donnes avec Flash Builder
Les outils Flash Builder peuvent vous aider crer des applications accdant des services de donnes. Commencez par crer un projet Flex pour vos applications. Vous pouvez ensuite tablir une connexion un service de donnes, configurer laccs aux donnes du service, puis crer une interface utilisateur pour une application. Dans certains cas, vous devez commencer par crer linterface utilisateur, puis accder au service de donnes.

Cration dun projet Flex pour laccs des services de donnes


Flex accde aux services de donnes en tant quobjets distants, services HTTP (style REST) ou services Web (SOAP). Utilisez un objet distant pour accder aux types de services de donnes suivants :

Services ColdFusion Services PHP au format AMF BlazeDS LiveCycle Data Services
Pour plus dinformations sur lutilisation de lassistant LiveCycle Service Discovery, voir Utilisation de LiveCycle Discovery. Pour tout service auquel laccs seffectue par le biais dun objet distant, crez un projet Flex configur pour le type de serveur dapplication appropri. Lassistant de nouveau projet Flex vous guide au cours des tapes de configuration dun projet pour les types de serveurs dapplications rpertoris ci-dessous.
Type de serveur PHP ColdFusion Services dobjets distants pris en charge

Services PHP au format AMF ColdFusion Flash Remoting BlazeDS LiveCycle Data Services BlazeDS LiveCycle Data Services

J2EE

Vous pouvez vous connecter des services HTTP et Web partir de nimporte quel projet Flex, y compris les projets sans technologie de serveur spcifie. Un projet configur pour accder un objet distant peut accder uniquement un service dobjets distants pour lequel il est configur. Par exemple, vous ne pouvez pas accder un service PHP bas sur AMF partir dun projet configur pour ColdFusion. Cependant, vous pouvez vous connecter un service PHP partir dun tel projet si vous vous y connectez en tant que service Web ou HTTP.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 9


Cration dapplications centres sur les donnes avec Flash Builder

Voir aussi
Prsentation de laccs aux services de donnes la page 1

Changement du type de serveur dun projet


Flash Builder vous avertit si vous tentez daccder un service pour lequel aucun projet Flex nest configur. Si le projet Flex ne spcifie pas la configuration de serveur correcte, Flash Builder fournit un lien vers la bote de dialogue Proprits du projet. Cette bote de dialogue vous permet de configurer le projet afin daccder au service de donnes. Flash Builder vous avertit par exemple lorsque vous tentez daccder un service PHP bas sur AMF partir dun projet qui ne spcifie aucune configuration de serveur. Si le projet Flex a t prcdemment configur pour laccs un autre type de service, crez un nouveau projet Flex ou modifiez la configuration du projet actuel. En cas de modification de la configuration de serveur dun projet, vous ne pourrez plus accder aux services prcdemment configurs. Par exemple, si vous modifiez une configuration de projet de ColdFusion vers PHP, les services ColdFusion auxquels vous tenterez daccder dans le projet ne seront plus disponibles. Vous pouvez accder diffrents types de services partir du mme projet en configurant des services en tant que services HTTP ou Web.

Fichier de rgulation interdomaines


Un fichier de rgulation interdomaines est requis pour laccs aux services se trouvant sur un autre domaine partir du fichier SWF pour lapplication. Situs dans le mme domaine que lapplication, les services au format AMF ne ncessitent gnralement pas de fichier de rgulation interdomaines.

Connexion des services de donnes


Utilisez lassistant de service Flash Builder pour vous connecter un service de donnes. Pour les services dobjets distants, vous pouvez en rgle gnrale spcifier un projet Flex ayant un type de serveurs dapplications correspondant. Flash Builder introspecte le service et peut configurer des types de retour pour les donnes renvoyes par le service. Les services dobjets distants incluent les services de donnes implments dans ColdFusion, PHP, BlazeDS et LiveCycle Data Services. Pour plus dinformations sur lutilisation de lassistant LiveCycle Service Discovery, voir Utilisation de LiveCycle Discovery.

Voir aussi
Cration dun projet Flex pour laccs des services de donnes la page 8

Accs aux services ColdFusion


Utilisez lassistant de service Flash Builder pour accder au service de donnes ColdFusion implment en tant que composant ColdFusion (CFC). Flex accde ces services en qualit dobjets distants. Utilisez un projet Flex spcifiant ColdFusion comme type de serveurs dapplications. Lors de la cration du projet Flex, activez loption Utiliser le service daccs aux objets distants et slectionnez ColdFusion Flash Remoting.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 10


Cration dapplications centres sur les donnes avec Flash Builder

Connexion des services de donnes ColdFusion


Cette procdure part du principe que vous avez implment un service ColdFusion et cr un projet Flex afin daccder aux services ColdFusion.
1 Dans le menu Donnes de Flash Builder, slectionnez Connexion aux donnes/services pour ouvrir lassistant de

connexion un service.
2 Dans la bote de dialogue Slection dun type de service, choisissez ColdFusion. Cliquez sur Suivant. 3 Dans la bote de dialogue Configuration du service ColdFusion, recherchez lemplacement du fichier CFC qui

implmente le service. Remarque : si vous navez pas implment de service ColdFusion, Flash Builder peut gnrer un exemple de service partir dun tableau de base de donnes simple. Utilisez lexemple gnr en guise dillustration de laccs aux services de donnes. Voir Gnration dun exemple de service ColdFusion partir dun tableau de base de donnes la page 10.
4 (Facultatif) Modifiez les dtails du service.
Nom du service Spcifiez un nom pour le service. Flash Builder gnre un nom pour le service, bas sur le nom du fichier du service. Les noms possibles pour un service sont soumis certaines restrictions. Voir Affectation de noms aux services de donnes la page 21. Package de services Spcifiez un nom pour le package contenant les fichiers ActionScript gnrs qui accdent au service. Flash Builder gnre un package bas le nom du service et le place dans un package de services. Package du type de donnes Spcifiez un nom pour le package contenant les fichiers de classe ActionScript gnrs qui dfinissent les types de donnes rcuprs partir du service. Par dfaut, Flash Builder cre le package valueObjects.

5 (Facultatif) Cliquez sur Suivant pour afficher les oprations de service. 6 Cliquez sur Terminer pour gnrer des fichiers ActionScript qui accdent au service.

Remarque : une fois la connexion tablie, vous pouvez modifier les proprits du service. Slectionnez le service dans la vue Donnes/Services. Dans le menu contextuel, slectionnez Proprits. Etape suivante : Configuration des types de donnes pour les oprations de service de donnes la page 28.

Gnration dun exemple de service ColdFusion partir dun tableau de base de donnes
Flash Builder peut gnrer un exemple de service ColdFusion que vous pouvez utiliser en tant que prototype pour vos propres services. Lexemple de service accde un tableau de base de donnes simple et dispose de mthodes de cration, de lecture, de mise jour et de suppression. Flash Builder configure les types de donnes de retour pour les services gnrs et active des fonctionnalits daccs aux donnes telles que la pagination ou la gestion de donnes. Important : utilisez le service gnr uniquement dans un environnement de dveloppement fiable. Le code gnr permet toute personne disposant dun accs rseau votre serveur daccder aux donnes du tableau de donnes et de les modifier ou supprimer. Avant de dployer ce service, assurez-vous daugmenter la protection et de restreindre laccs de faon adquate. Pour plus dinformations sur la rdaction de services scuriss, voir Securing Data Services.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 11


Cration dapplications centres sur les donnes avec Flash Builder

La procdure suivante part du principe que vous avez cr un projet Flex pour accder aux services ColdFusion et disposez de sources de donnes ColdFusion.
1 Dans le menu Donnes de Flash Builder, slectionnez Connexion aux donnes/services pour ouvrir lassistant de

connexion un service.
2 Dans la bote de dialogue Slection dun type de service, choisissez ColdFusion. Cliquez sur Suivant. 3 Dans la bote de dialogue Configuration du service ColdFusion, cliquez sur le lien afin de gnrer un exemple de

service.
4 Slectionnez loption Gnrer partir dune source de donnes RDS et indiquez une source de donnes et une table

ColdFusion. Si la table ne dfinit pas de cl primaire, slectionnez-en une. Remarque : en labsence de source de donnes ColdFusion disponible, slectionnez loption Gnrer partir dun modle. Flash Builder rdige un exemple de composant ColdFusion (CFC) avec des oprations de service courantes. Supprimez les marques de commentaires de certaines fonctions du CFC et modifiez les oprations pour crer un exemple de service que vous pourrez utiliser comme prototype.
5 Utilisez lemplacement par dfaut ou spcifiez-en un nouveau. Cliquez sur OK.

Flash Builder gnre lexemple de service. Modifiez le nom du service et les emplacements de package afin de remplacer les valeurs par dfaut.
6 (Facultatif) Cliquez sur Suivant pour afficher les oprations du service. 7 Cliquez sur Terminer.

Flash Builder gnre des fichiers ActionScript qui accdent lexemple de service. Il ouvre galement lexemple de service dans un diteur du systme enregistr pour ldition de fichiers ColdFusion CFC.

Accs aux services PHP


Utilisez lassistant de service Flash Builder pour vous connecter un service de donnes implment sous PHP. Flex utilise le format AMF (Action Message Format) pour srialiser les donnes entre lapplication client et le service de donnes. Flash Builder installe la structure Zend AMF pour fournir un accs aux services implments sous PHP. Voir Installation de Zend Framework la page 21. Accdez aux services de donnes PHP partir dun projet Flex dont le type de serveurs dapplications spcifi est PHP. Le service de donnes doit tre disponible sous la racine Web dfinie la configuration du projet pour PHP. Placez le service dans un rpertoire de services, comme illustr ci-dessous :
<webroot>/MyServiceFolder/services

Voir aussi
Cration dun projet Flex pour laccs des services de donnes la page 8

Connexion des services de donnes PHP


Cette procdure part du principe que vous avez implment un service PHP et cr un projet Flex afin daccder aux services PHP.
1 Dans le menu Donnes de Flash Builder, slectionnez Connexion aux donnes/services pour ouvrir lassistant de

connexion un service.
2 Dans la bote de dialogue Slection dun type de service, choisissez PHP. Cliquez sur Suivant. 3 Dans la bote de dialogue Configuration du service PHP, recherchez le fichier PHP implmentant le service.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 12


Cration dapplications centres sur les donnes avec Flash Builder

Remarque : si vous navez pas implment de service PHP, Flash Builder peut gnrer un exemple de service partir dun tableau de base de donnes simple. Utilisez lexemple gnr en guise dillustration de laccs aux services de donnes. Voir Gnration dun exemple de service PHP partir dun tableau de base de donnes la page 12.
4 (Facultatif) Modifiez les dtails du service.
Nom du service Spcifiez un nom pour le service. Flash Builder gnre un nom pour le service bas le nom du fichier du service. Les noms possibles pour un service sont soumis certaines restrictions. Voir Affectation de noms aux services de donnes la page 21. Package de services Spcifiez un nom pour le package contenant les fichiers ActionScript gnrs qui accdent au service. Flash Builder gnre un package bas sur le nom du service et le place dans un package services. Package du type de donnes Spcifiez un nom pour le package contenant les fichiers de classe ActionScript gnrs qui dfinissent les types de donnes rcuprs partir du service. Par dfaut, Flash Builder cre le package valueObjects.

5 Cliquez sur Suivant pour afficher les oprations de service.

Si vous ne disposez pas de la version prise en charge de Zend Framework pour laccs aux services PHP, Flash Builder vous invite en installer la version minimale. Voir Installation de Zend Framework la page 21.
6 Cliquez sur Terminer.

Flash Builder gnre des fichiers ActionScript qui accdent au service. Remarque : une fois la connexion tablie, vous pouvez modifier les proprits du service. Slectionnez le service dans la vue Donnes/Services. Dans le menu contextuel, slectionnez Proprits. Etape suivante : Configuration des types de donnes pour les oprations de service de donnes la page 28.

Gnration dun exemple de service PHP partir dun tableau de base de donnes
Flash Builder peut gnrer un exemple de service PHP que vous pouvez utiliser en tant que prototype pour vos propres services. Lexemple de service accde un tableau de base de donnes MySQL simple et dispose de mthodes de cration, de lecture, de mise jour et de suppression. Flash Builder configure les types de donnes de retour pour les services gnrs et active des fonctionnalits daccs aux donnes telles que la pagination ou la gestion de donnes. Important : utilisez le service gnr uniquement dans un environnement de dveloppement fiable. Le code gnr permet toute personne disposant dun accs rseau votre serveur daccder aux donnes du tableau de donnes et de les modifier ou supprimer. Avant de dployer ce service, assurez-vous daugmenter la protection et de restreindre laccs de faon adquate. Pour plus dinformations sur la rdaction de services scuriss, voir Securing Data Services. La procdure suivante part du principe que vous avez cr un projet Flex pour accder aux services PHP et disposez de sources de donnes MySQL.
1 Dans le menu Donnes de Flash Builder, slectionnez Connexion aux donnes/services pour ouvrir lassistant de

connexion un service.
2 Dans la bote de dialogue Slection dun type de service, choisissez PHP. Cliquez sur Suivant. 3 Dans la bote de dialogue Configuration du service PHP, cliquez sur le lien afin de gnrer un exemple de service.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 13


Cration dapplications centres sur les donnes avec Flash Builder

4 Slectionnez Gnrer partir dune base de donnes et spcifiez les informations de connexion la base de donnes.

Cliquez sur Connexion la base de donnes. Remarque : en labsence de source de donnes PHP disponible, slectionnez loption Gnrer partir dun modle. Flash Builder rdige un exemple de projet avec des oprations de service courantes. Supprimez les marques de commentaires de certaines zones du projet et modifiez les oprations pour crer un exemple de service que vous pourrez utiliser comme prototype.
5 Slectionnez un tableau dans la base de donnes et spcifiez la cl primaire. 6 Utilisez lemplacement par dfaut ou spcifiez-en un nouveau. Cliquez sur OK.

Si vous ne disposez pas de la version prise en charge de Zend Framework pour laccs aux services PHP, Flash Builder vous invite en installer la version minimale. Voir Installation de Zend Framework la page 21. Flash Builder gnre lexemple de service. Modifiez le nom du service et les emplacements de package afin de remplacer les valeurs par dfaut.
7 (Facultatif) Cliquez sur Suivant pour afficher les oprations du service. 8 Cliquez sur Terminer.

Flash Builder gnre des fichiers ActionScript qui accdent lexemple de service. Il ouvre galement lexemple de service dans un diteur du systme enregistr pour ldition de fichiers PHP.

Accs aux services HTTP


Utilisez lassistant de service Flash Builder pour vous connecter aux services HTTP. Vous pouvez vous connecter des services HTTP partir de nimporte quel projet Flex. Il nest pas ncessaire de spcifier une technologie de serveur pour le projet. Un fichier de rgulation interdomaines est requis pour laccs aux services dont le domaine ne correspond pas celui du fichier SWF de lapplication client. Voir Utilisation de fichiers de rgulation interdomaines.

Configuration des services HTTP


Il existe plusieurs faons de configurer laccs aux services HTTP. Lassistant de configuration du service HTTP prend en charge les options suivantes.

URL de base en tant que prfixe


Cette option savre pratique pour accder plusieurs oprations partir dun service unique. Si vous spcifiez une URL de base vers le service, il vous suffit ensuite de spcifier pour chaque opration le chemin relatif vers les oprations HTTP. Lutilisation dune URL de base ne permet pas daccder plusieurs services.

URL avec paramtres de requte


Lors de la spcification dune URL vers une opration, vous pouvez inclure les paramtres de requte pour les oprations de service. Lassistant de configuration du service HTTP renseigne le tableau Paramtres avec chaque paramtre inclus dans lURL de lopration.

Services RESTful
Flash Builder prend en charge laccs aux services RESTful qui utilisent des paramtres dlimits au lieu du paramtre de requte GET. Par exemple, supposons que vous utilisez lURL suivante pour accder un service RESTful :
http://restfulService/items/itemID

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 14


Cration dapplications centres sur les donnes avec Flash Builder

Utilisez des accolades ({}) pour spcifier les paramtres de lURL de lopration, comme lillustre lexemple suivant :
http://restfulService/{items}/{itemID}

Lassistant de configuration du service HTTP renseigne ensuite le tableau Paramtres.


Nom items itemID Type de donnes String String Type de paramtre URL URL

Lorsque vous spcifiez des paramtres pour un service RESTful, Type de donnes et Type de paramtre sont toujours configurs en tant que String et URL respectivement. Remarque : vous pouvez associer des paramtres de service RESTful avec des paramtres de requte lors de la spcification de lURL vers une opration.

Chemin vers un fichier local pour une URL dopration


Pour une URL dopration, vous pouvez spcifier un chemin vers un fichier local qui implmente les services HTTP. Par exemple, spcifiez ce qui suit pour une URL dopration :
c:/MyHttpServices/MyHttpService.xml

Ajout doprations GET et POST


Vous pouvez ajouter des oprations supplmentaires lors de la configuration dun service HTTP. Cliquez sur le bouton Ajouter du tableau Oprations. Spcifiez la mthode de lopration (GET ou POST).

Ajout de paramtres une opration


Vous pouvez ajouter des paramtres lopration que vous aurez pralablement slectionne dans le tableau Oprations. Slectionnez une opration, puis cliquez sur le bouton Ajouter du tableau Paramtres. Spcifiez un nom et un type de donnes pour le paramtre ajout. Le type de paramtre (GET ou POST) correspond la mthode de lopration.

Type de contenu pour les oprations POST


Pour les oprations POST, vous pouvez spcifier le type de contenu. Il peut sagir de application/x-www-formurlencoded ou de application/xml. Si vous slectionnez application/xml comme type de contenu, Flash Builder gnre un paramtre de requte non modifiable, dont le nom par dfaut est strXML. Vous pourrez spcifier le paramtre actuel lexcution.
Nom strXML Type de donnes String Type de paramtre POST

Vous ne pouvez pas ajouter de paramtres supplmentaires pour le type de contenu application/xml.

Connexion des services HTTP


1 Dans le menu Donnes de Flash Builder, slectionnez Connexion aux donnes/services pour ouvrir lassistant de

connexion un service.
2 Dans la bote de dialogue Slection dun type de service, choisissez HTTP. Cliquez sur Suivant.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 15


Cration dapplications centres sur les donnes avec Flash Builder

3 (Facultatif) Spcifiez une URL de base utiliser en tant que prfixe pour toutes les oprations. 4 Sous Oprations, spcifiez les lments suivants pour chaque opration laquelle vous souhaitez accder :

Mthode de lopration (GET ou POST) URL de lopration de service


Vous pouvez inclure dans lURL nimporte quel paramtre dopration. Utilisez des accolades ({}) pour spcifier des paramtres de service de style REST. Flash Builder prend en charge laccs aux protocoles suivants :
http:// https://

Chemins daccs standard tels que C:/ ou /Applications/

Nom de lopration
5 Spcifiez le nom et le type de donnes de chaque paramtre dopration de lURL slectionne. 6 (Facultatif) Cliquez sur Ajouter ou Supprimer pour ajouter ou supprimer des paramtres pour lopration

slectionne.
7 (Facultatif) Modifiez les dtails du service.
Nom du service Spcifiez un nom pour le service. Flash Builder gnre un nom pour le service, bas le nom du fichier du service. Les noms possibles pour un service sont soumis certaines restrictions. Voir Affectation de noms aux services de donnes la page 21. Package de services Spcifiez un nom pour le package contenant les fichiers ActionScript gnrs qui accdent au service. Flash Builder gnre un package bas sur le nom du service et le place dans un package services. Package du type de donnes Spcifiez un nom pour le package contenant les fichiers de classe ActionScript gnrs qui dfinissent les types de donnes rcuprs partir du service. Par dfaut, Flash Builder cre le package valueObjects.

8 (Facultatif) Modifiez le nom du package gnr pour le service. 9 Cliquez sur Terminer.

Flash Builder gnre des fichiers ActionScript qui accdent au service. Une fois la connexion au service HTTP tablie, configurez les types de retour des oprations de service. Lors de la configuration du type de retour, les types de paramtres de lopration sont galement configurs. Voir Configuration des types de donnes pour les oprations de service de donnes la page 28. Remarque : une fois la connexion tablie, vous pouvez modifier les proprits du service. Slectionnez le service dans la vue Donnes/Services. Dans le menu contextuel, slectionnez Proprits. Etape suivante : Configuration des types de donnes pour les oprations de service de donnes la page 28.

Accs un fichier XML implmentant des services HTTP


Vous pouvez accder un fichier XML statique qui implmente un service HTTP. Ce fichier XML statique peut tre un fichier local ou tre disponible sous la forme dune URL.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 16


Cration dapplications centres sur les donnes avec Flash Builder

Le service utilise une mthode GET qui renvoie une rponse XML. Cette fonctionnalit est utile pour apprendre connatre les services HTTP dans Flex et pour tablir des prototypes de donnes fictives dans les applications client. Lors de laccs au service, spcifiez le nud renvoyant la rponse XML. Flash Builder utilise ce nud pour configurer automatiquement un type de retour pour les donnes. Une fois la connexion au service tablie, vous pouvez lier des oprations du service des composants dinterface utilisateur.

Connexion un fichier de service XML


1 Dans le menu Donnes de Flash Builder, slectionnez Connexion aux donnes/services pour ouvrir lassistant de

connexion un service.
2 Dans la bote de dialogue Slection dun type de service, slectionnez XML. Cliquez sur Suivant. 3 Spcifiez Fichier local ou URL, puis accdez au fichier. 4 Slectionnez un nud dans le fichier contenant la rponse souhaite.

Indiquez si la rponse est un tableau Array. Flash Builder configure un type de retour pour le nud slectionn.
5 Modifiez les dtails du service.
Nom du service Spcifiez un nom pour le service. Flash Builder gnre un nom pour le service, bas le nom du fichier du service. Les noms possibles pour un service sont soumis certaines restrictions. Voir Affectation de noms aux services de donnes la page 21. Package de services Spcifiez un nom pour le package contenant les fichiers ActionScript gnrs qui accdent au service. Flash Builder gnre un package bas sur le nom du service et le place dans un package services. Package du type de donnes Spcifiez un nom pour le package contenant les fichiers de classe ActionScript gnrs qui dfinissent les types de donnes rcuprs partir du service. Par dfaut, Flash Builder cre le package valueObjects.

6 (Facultatif) Modifiez le nom du package gnr pour le service. 7 Cliquez sur Terminer.

Flash Builder gnre des fichiers ActionScript qui accdent au service. Remarque : une fois la connexion tablie, vous pouvez modifier les proprits du service. Slectionnez le service dans la vue Donnes/Services. Dans le menu contextuel, slectionnez Proprits.

Accs aux services Web


Utilisez lassistant de service Flash Builder pour vous connecter aux services Web (SOAP). Vous pouvez vous connecter des services Web partir de nimporte quel projet Flex. Il nest pas ncessaire de spcifier une technologie de serveur pour le projet. Un fichier de rgulation interdomaines est requis pour laccs aux services se trouvant sur un autre domaine partir du fichier SWF pour lapplication client.

Voir aussi
Using cross-domain policy files

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 17


Cration dapplications centres sur les donnes avec Flash Builder

Connexion des services Web


1 Dans le menu Donnes de Flash Builder, slectionnez Connexion aux donnes/services pour ouvrir lassistant de

connexion un service.
2 Dans la bote de dialogue Slection dun type de service, choisissez Service Web (WSDL). Cliquez sur Suivant. 3 (LiveCycle Data Services/BlazeDS) Si vous avez install LiveCycle Data Services ou BlazeDS, vous pouvez accder

au service Web via un proxy. Slectionnez loption Par une destination proxy LCDS/BlazeDS. Spcifiez une destination. Cliquez sur Suivant et passez ltape 5. Remarque : loption daccs aux services Web via un proxy LiveCycle Data Services est active uniquement si le type de serveurs dapplications spcifi pour le projet Flex est J2EE.
4 Saisissez un URI pour le service SOAP. 5 (Facultatif) Modifiez les dtails du service.
Nom du service Spcifiez un nom pour le service. Flash Builder gnre un nom pour le service bas sur lURI WSDL. Les noms possibles pour un service sont soumis certaines restrictions. Voir Affectation de noms aux services de donnes la page 21. Package de services Spcifiez un nom pour le package contenant les fichiers ActionScript gnrs qui accdent au service. Flash Builder gnre un package bas sur le nom du service et le place dans un package services. Package du type de donnes Spcifiez un nom pour le package contenant les fichiers de classe ActionScript gnrs qui dfinissent les types de donnes rcuprs partir du service. Par dfaut, Flash Builder cre le package dataValues.

6 (Facultatif) Configurez la gnration de code pour le service.


Service Port Liste doprations Slectionnez lun des services disponibles. Flash Builder gnre un nom pour le service bas sur lURI WSDL. Slectionnez les oprations du service auquel vous souhaitez accder dans votre application client.

7 Cliquez sur Terminer.

Flash Builder gnre des fichiers ActionScript qui accdent au service. Remarque : une fois la connexion tablie, vous pouvez modifier les proprits du service. Slectionnez le service dans la vue Donnes/Services. Dans le menu contextuel, slectionnez Proprits. Une fois la connexion au service Web tablie, configurez les types de retour des oprations de service. Pour plus dinformations, voir Configuration des types de donnes pour les oprations de service de donnes la page 28.

Accs BlazeDS
Vous pouvez accder aux services BlazeDS uniquement si vous avez install Adobe BlazeDS et configur un serveur RDS (Remote Development Services). Pour plus dinformations sur linstallation et la configuration de BlazeDS, voir la documentation dAdobe LiveCycle Data Services ES.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 18


Cration dapplications centres sur les donnes avec Flash Builder

En rgle gnrale, vous accdez aux services de donnes BlazeDS partir dun projet Flex dont le type de serveurs dapplications spcifi est J2EE.

Voir aussi
Cration dun projet Flex pour laccs des services de donnes la page 8

Connexion des services BlazeDS


Cette procdure part du principe que vous avez install BlazeDS, configur un serveur de dveloppement distant et cr un projet Flex afin daccder aux services BlazeDS.
1 Dans le menu Donnes de Flash Builder, slectionnez Connexion aux donnes/services pour ouvrir lassistant de

connexion un service.
2 Dans la bote de dialogue Slection dun type de service, choisissez BlazeDS. Cliquez sur Suivant. 3 Slectionnez une destination importer. 4 (Facultatif) Modifiez les dtails du service.
Nom du service Spcifiez un nom pour le service. Flash Builder gnre un nom pour le service bas sur la destination. Les noms possibles pour un service sont soumis certaines restrictions. Voir Affectation de noms aux services de donnes la page 21. Package de services Spcifiez un nom pour le package contenant les fichiers ActionScript gnrs qui accdent au service. Flash Builder gnre un package bas sur le nom du service et le place dans un package services. Package du type de donnes Spcifiez un nom pour le package contenant les fichiers de classe ActionScript gnrs qui dfinissent les types de donnes rcuprs partir du service. Par dfaut, Flash Builder cre le package valueObjects.

5 Cliquez sur Terminer.

Flash Builder gnre des fichiers ActionScript qui accdent au service. Remarque : une fois la connexion tablie, vous pouvez modifier les proprits du service. Slectionnez le service dans la vue Donnes/Services. Dans le menu contextuel, slectionnez Proprits.

Accs Adobe LiveCycle Data Services


Vous pouvez accder aux services disponibles partir de LiveCycle Data Services uniquement si vous avez install Adobe LiveCycle Data Services ES et configur un serveur RDS (Remote Development Services). Pour plus dinformations sur linstallation et la configuration de LiveCycle Data Services, voir la documentation Adobe LiveCycle Data Services ES. Vous pouvez accder LiveCycle Data Services partir dun projet Flex dont le type de serveurs dapplications spcifi est soit J2EE soit ColdFusion.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 19


Cration dapplications centres sur les donnes avec Flash Builder

Types de service pour LiveCycle Data Services


Lors de la connexion LiveCycle Data Services, les types de services de donnes suivants sont disponibles en tant que destinations.

Service distant
Les services distants sont implments laide de la dfinition de types AMF. Ils ne fournissent aucune gestion de donnes ct serveur. Vous pouvez utiliser les outils Flash Builder pour configurer la gestion de donnes ct client. Voir Activation de la gestion des donnes la page 35.

Service de donnes
Les services de donnes implmentent la gestion de donnes ct serveur. Pour plus dinformations, reportez-vous la documentation LiveCycle Data Services.

Service Web
Les services Web sont disponibles par le biais dun proxy LiveCycle configur en tant que destination LiveCycle Data Services. La dfinition de type ct serveur nest gnralement pas fournie lors de la connexion un service Web.

Configuration et gestion de types de donnes


Flash Builder fournit des outils pour la configuration et la gestion des donnes ct client. Les outils Flash Builder disponibles dpendent du type de destination LiveCycle Data Services.

Service distant
Les services distants implmentent la dfinition de types AMF sur le service. Il nest pas ncessaire de configurer des types de donnes de retour pour les destinations de service distant. Cependant, vous pouvez utiliser Flash Builder pour gnrer du code pour la gestion de donnes ct client. Voir Activation de la gestion des donnes la page 35.

Service de donnes
Les services de donnes implmentent les types de donnes ct serveur. Il nest pas ncessaire de configurer des types de donnes de retour pour les destinations de service de donnes. Les destinations de service de donnes fournissent galement la gestion des donnes ct serveur. Vous ne pouvez pas utiliser la gestion des donnes ct client avec les destinations de service de donnes.

Service Web
En rgle gnrale, les destinations de service Web disponibles par le biais dun proxy LiveCycle Data Service nimplmentent pas la dfinition de type ct serveur. Vous pouvez utiliser les outils Flash Builder pour configurer des types de retour pour les oprations de service Web. Voir Configuration des types de donnes pour les oprations de service de donnes la page 28. Vous pouvez utiliser Flash Builder pour gnrer du code pour la gestion des donnes ct client. Voir Activation de la gestion des donnes la page 35.

Connexion aux destinations LiveCycle Data Service (destinations de service de donnes et de service distant)
Cette procdure part du principe que vous avez install LiveCycle Data Services, configur un serveur de dveloppement distant et cr un projet Flex pour laccs aux services LCDS.
1 Dans le menu Donnes de Flash Builder, slectionnez Connexion aux donnes/services pour ouvrir lassistant de

connexion un service.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 20


Cration dapplications centres sur les donnes avec Flash Builder

2 Dans la bote de dialogue Slection dun type de service, choisissez LCDS. Cliquez sur Suivant. 3 Saisissez votre identifiant de connexion, le cas chant. 4 (Facultatif) Modifiez les dtails du service.
Nom du service Nindiquez aucun nom de service. Flash Builder gnre un nom de service. Il gnre un nom pour le service bas sur la destination. Spcifiez un nom pour le package contenant les fichiers ActionScript gnrs qui accdent au service. Flash Builder gnre un package bas sur le nom du service et le place dans un package services. Destinations Spcifiez une ou plusieurs destinations disponibles partir du serveur LiveCycle Data Services. Spcifiez un nom pour le package de type de donnes. Ce package contient les fichiers de classe ActionScript gnrs qui dfinissent les types de donnes rcuprs partir du service. Par dfaut, Flash Builder cre le package valueObjects.

Package de services

Package du type de donnes

5 Cliquez sur Terminer.

Flash Builder gnre des fichiers ActionScript qui accdent au service. Remarque : une fois la connexion tablie, vous pouvez modifier les proprits du service. Slectionnez le service dans la vue Donnes/Services. Dans le menu contextuel, slectionnez Proprits.

Connexion aux destinations LiveCycle Data Service (destinations de service Web)


Cette procdure part du principe que vous avez install LiveCycle Data Services, configur un serveur de dveloppement distant et cr un projet Flex afin daccder aux services LCDS.
1 Dans le menu Donnes de Flash Builder, slectionnez Connexion aux donnes/services pour ouvrir lassistant de

connexion un service.
2 Dans la bote de dialogue Slection dun type de service, choisissez Service Web. Cliquez sur Suivant. 3 Slectionnez loption Par une destination proxy LCDS/BlazeDS. 4 Saisissez votre identifiant de connexion, le cas chant. 5 Slectionnez la destination. 6 (Facultatif) Modifiez les dtails du service. Cliquez sur Suivant.
Nom du service Spcifiez un nom pour le service. Flash Builder gnre un nom pour le service bas sur le nom de la destination. Les noms possibles pour un service sont soumis certaines restrictions. Voir Affectation de noms aux services de donnes la page 21. Package de services Spcifiez un nom pour le package contenant les fichiers ActionScript gnrs qui accdent au service. Flash Builder gnre un package bas sur le nom du service et le place dans un package services. Package du type de donnes Spcifiez un nom pour le package contenant les fichiers de classe ActionScript gnrs qui dfinissent les types de donnes rcuprs partir du service. Par dfaut, Flash Builder cre le package dataValues.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 21


Cration dapplications centres sur les donnes avec Flash Builder

7 (Facultatif) Configurez la gnration de code pour le service.


Service Port Liste doprations Slectionnez les oprations du service auquel vous souhaitez accder dans votre application client. Slectionnez un service et un port partir des services et ports disponibles.

8 Cliquez sur Terminer.

Flash Builder gnre des fichiers ActionScript qui accdent au service. Remarque : une fois la connexion tablie, vous pouvez modifier les proprits du service. Slectionnez le service dans la vue Donnes/Services. Dans le menu contextuel, slectionnez Proprits.

Voir aussi
Cration dun projet Flex pour laccs des services de donnes la page 8

Affectation de noms aux services de donnes


Il existe des restrictions sur les noms autoriss pour les services de donnes dont laccs seffectue partir de Flash Builder. Certaines restrictions ne sont pas apparentes tant que vous ne compilez pas votre application. Les rgles dattribution des noms pour les services sont :

Le nom du service ne peut pas commencer par un nombre. Les noms de service ne peuvent pas tre des mots-cls ActionScript. Vous ne pouvez pas utiliser un nom de classe ActionScript, y compris les classes personnalises, en tant que nom
de service.

(PHP uniquement) Flash Builder ne peut pas importer un service dont le nom comporte des traits de soulignement.
Remarque : il est recommand dutiliser des noms de service diffrant des noms de vos fichiers MXML.

Installation de Zend Framework


Lors de laccs initial aux services PHP, Flash Builder dtermine si la version de Zend Framework prise en charge est installe. Si cette version est introuvable, Flash Builder vous invite en confirmer linstallation. Si vous acceptez, Flash Builder installe une version minimale de Zend Framework. Si vous refusez, installez manuellement Zend Framework si vous souhaitez accder aux services PHP.

Installation par dfaut de Flash Builder


Flash Builder installe Zend Framework dans un dossier ZendFramework situ dans le rpertoire racine de votre serveur Web :
<web root>/ZendFramework/

Pour les projets Flex accdant aux services PHP, Flash Builder cre les fichiers de configuration suivants dans le dossier de sortie du projet :

amf_config.ini gateway.php

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 22


Cration dapplications centres sur les donnes avec Flash Builder

Serveurs de production
Pour les serveurs de production, Adobe vous recommande de dplacer le dossier ZendFramework hors de la racine Web. Mettez jour la variable zend_path dfinie dans le fichier amf_config.ini. Si la variable zend_path est commente, supprimez-en le commentaire. Spcifiez lemplacement de linstallation Zend Framework.

Installation manuelle de Zend Framework


Vous avez la possibilit dinstaller manuellement Zend Framework.
1 Tlchargez la dernire version de Zend Framework.

Vous pouvez installer le package minimal ou le package complet. Flash Builder installe le package minimal.
2 Extrayez la version tlcharge dans un emplacement du systme. 3 Dans le dossier du projet Flex permettant daccder aux services PHP, mettez jour la variable zend_path dfinie

dans le fichier amf_config.ini. Si la variable zend_path est commente, supprimez-en le commentaire. Spcifiez le chemin absolu vers lemplacement de linstallation Zend Framework.

Dpannage dune installation Zend Framework


Voici quelques conseils pour rsoudre les erreurs susceptibles de survenir lors de la connexion Zend Framework.

Installation manuelle de Zend Framework


Si vous avez install manuellement Zend Framework, examinez la variable zend_path dans le fichier amf_config.ini. Le fichier amf_config.ini se trouve dans le dossier de sortie du projet. Vrifiez ce qui suit :

Zend_amf nest pas comment. Le chemin spcifi vers votre installation Zend Framework est correct : Il sagit dun chemin absolu vers une destination situe sur le systme de fichiers local. Vous ne pouvez pas
spcifier un chemin vers une ressource rseau mappe.

Le chemin mne au dossier de bibliothque de linstallation Zend Framework. Habituellement, le dossier de


bibliothque est situ dans les emplacements suivants : (Windows) C:\apache\PHPFrameworks/ZendFramework/library (Mac OS) /utilisateur/apache/PHP/frameworks/ZendFramework/library

Installation de Zend Framework par Flash Builder


Si Zend Framework a t install par Flash Builder, vrifiez ce qui suit :

Lemplacement du dossier racine Web


Flash Builder installe Zend Framework dans le dossier racine Web du projet. Vrifiez-en lemplacement. Slectionnez Projet > Proprits > Serveur Flex.

La variable zend_path du fichier amf_config.ini


Le fichier amf_config.ini se trouve dans le dossier de sortie du projet.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 23


Cration dapplications centres sur les donnes avec Flash Builder

Vrifiez ce qui suit :

zend_amf nest pas comment.

Le chemin spcifi pointe vers linstallation Zend Framework la racine Web du projet. Il sagit dun chemin absolu vers une destination situe sur le systme de fichiers local. Vous ne pouvez pas
spcifier un chemin vers une ressource rseau mappe.

Utilisation dune occurrence de serveur unique


Une fois la connexion un service de donnes tablie, chaque application dun projet peut accder ce service. Par dfaut, chaque application cre sa propre occurrence de service lorsquelle accde au serveur. Vous pouvez modifier ce comportement de sorte quun projet ne comporte quune seule occurrence de service. Chaque application dans le projet accde la mme occurrence de service. En rgle gnrale, vous crez une occurrence de serveur unique lorsque vous souhaitez coordonner laccs aux donnes partir dapplications multiples. Vous pouvez spcifier laccs une seule occurrence de service par projet ou en tant que prfrence pour tous les projets.

Accs une occurrence de serveur unique pour un projet


1 Cliquez sur Projet > Proprits > Donnes/Services. 2 Slectionnez la case cocher pour lutilisation dune occurrence de serveur unique. Cliquez sur OK.

Spcification dune occurrence de serveur unique en tant que prfrence


1 Ouvrez la bote de dialogue Prfrences. 2 Slectionnez Flash Builder > Donnes/Services. 3 Slectionnez la case cocher pour lutilisation dune occurrence de serveur unique. Cliquez sur OK.

Gnration de lapplication client


Utilisez lditeur MXML pour crer une interface utilisateur. Vous pouvez utiliser lditeur en mode Cration ou en mode Source. Aprs avoir dispos les composants pour lapplication, liez les donnes renvoyes par le service aux composants de linterface utilisateur. Gnrez des gestionnaires dvnement en fonction des interactions de lutilisateur avec lapplication. Vous pouvez aussi gnrer un formulaire partir des oprations de service disponibles dans la vue Donnes/Services.

Utilisation du mode Cration pour gnrer une application


Flex fournit un riche ensemble de conteneurs et de contrles que vous pouvez utiliser pour crer une interface utilisateur. Un conteneur offre une structure hirarchique pour organiser et prsenter linterface utilisateur. Il peut contenir dautres conteneurs, navigateurs, contrles et composants.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 24


Cration dapplications centres sur les donnes avec Flash Builder

Les contrles de base sont les lments de linterface utilisateur, par exemple Button, TextArea et CheckBox. Les contrles orients donnes, tels que les composants DataGrid et List, sont idaux pour laffichage des donnes obtenues partir dun service. Les navigateurs sont des conteneurs qui contrlent les mouvements de lutilisateur par le biais de conteneurs enfant, par exemple les ensembles de tabulation. En mode Cration de lditeur MXML, faites glisser des conteneurs et des contrles partir de la vue Composants et dposez-les dans la zone de cration. Agencez ensuite les composants et configurez-en les proprits. Une fois dfinie la prsentation de lapplication, reliez aux composants les donnes renvoyes par le service de donnes.

Liaison doprations de service des contrles


Plusieurs mthodes permettent de lier des oprations de service un composant dinterface utilisateur. Vous pouvez faire glisser une opration de service de la vue Donnes/Services vers un composant dans la zone de cration. Vous pouvez aussi ouvrir la bote de dialogue Lier aux donnes pour slectionner une opration lier un composant. La bote de dialogue Lier aux donnes est disponible partir de la barre doutils dans la vue Donnes/Services. Elle est galement disponible en mode Cration de lditeur MXML lorsque vous slectionnez un composant qui accepte les donnes, tel que DataGrid. Slectionnez le composant et ouvrez la bote de dialogue Lier aux donnes partir de son menu contextuel. La bote de dialogue Lier aux donnes peut galement tre ouverte partir du champ Fournisseur de donnes dans la vue Proprits. Lorsque vous liez une opration de service un composant, Flash Builder gnre du code MXML et ActionScript pour accder lopration de service partir de lapplication client.

Types de retour pour les oprations de service


Lorsque vous liez une opration de service un contrle, Flash Builder utilise le type des donnes renvoyes par lopration. En rgle gnrale, vous configurez le type de retour pour une opration de service avant de la lier un composant. Si le type de retour dune opration de service na pas t configur, la bote de dialogue Lier aux donnes vous invite terminer cette tape. Voir Configuration des types de donnes pour les oprations de service de donnes la page 28.

Liaison dune opration de service un contrle DataGrid (glisser-dposer)


Cette procdure part du principe que vous tes connect un service de donnes.
1 En mode Cration de lditeur MXML, faites glisser un composant DataGrid partir de la vue Composants et

dposez-le dans la zone de cration.


2 Faites glisser une opration de la vue Donnes/Services vers le composant DataGrid.

Si le type de retour de lopration a t pralablement configur, Flash Builder lie lopration au composant DataGrid. Le composant DataGrid change pour afficher les champs extraits de la base de donnes. Si le type de retour de lopration na pas t configur, Flash Builder ouvre la bote de dialogue Lier aux donnes. Voir Liaison dun contrle DataGrid une opration de service (bote de dialogue Lier aux donnes) la page 25.
3 Personnalisez laffichage du composant DataGrid.

Voir Configuration de composants DataGrid et AdvancedDataGrid.


4 Enregistrez et excutez lapplication.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 25


Cration dapplications centres sur les donnes avec Flash Builder

Liaison dun contrle DataGrid une opration de service (bote de dialogue Lier aux donnes)
Cette procdure part du principe que vous tes connect un service de donnes.
1 En mode Cration de lditeur MXML, faites glisser un composant DataGrid partir de la vue Composants et

dposez-le dans la zone de cration.


2 Une fois le composant DataGrid slectionn, ouvrez la bote de dialogue Lier aux donnes en utilisant lune des

mthodes suivantes :

Slectionnez Lier aux donnes partir du menu Donnes de Flash Builder, du menu contextuel du composant
DataGrid ou de la barre doutils de la vue Donnes/Services.

Dans la vue Proprits, slectionnez le bouton Lier aux donnes (disponible en regard du champ Fournisseur de
donnes).
3 Slectionnez Nouvel appel de service, puis un service et une opration.

Si vous avez li une opration de service un composant, vous pouvez utiliser ces rsultats. Dans ce cas, spcifiez Rsultat dappel existant et slectionnez lopration utiliser.
4 (Facultatif) Slectionnez Modifier type de retour.

Slectionnez Modifier type de retour si vous voulez reconfigurer le type de retour pour lopration de service. Si le type de retour de lopration na pas t prcdemment configur, slectionnez Configurer le type de retour. Voir Configuration des types de donnes pour les oprations de service de donnes la page 28.
5 Cliquez sur OK.

Le composant DataGrid change pour afficher les champs extraits de la base de donnes. Voir Configuration de composants DataGrid et AdvancedDataGrid.
6 Enregistrez et excutez lapplication.

Gnration dun appel de service une opration


Flash Builder peut gnrer une mthode ActionScript qui appelle une opration de service. Cette mthode nest pas lie un composant dinterface utilisateur, mais peut tre utilise dans le code de lapplication. Outre la mthode ActionScript, Flash Builder gnre une proprit CallResponder donnant accs aux donnes renvoyes partir de lappel de service. Voir CallResponder la page 40.

Gnration dun appel de service une opration


Cette procdure part du principe que vous tes connect un service de donnes.
1 Dans la vue Donnes/Services, slectionnez une opration. 2 Dans le menu contextuel de lopration, slectionnez Gnrer lappel de service.

Flash Builder gnre une mthode pour appeler lopration et affiche la mthode gnre en mode Source dans lditeur MXML. Il cre une proprit CallResponder qui contient le rsultat de lappel de service. Cette option est galement disponible partir de la barre doutils Donnes/Services.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 26


Cration dapplications centres sur les donnes avec Flash Builder

Cration dun formulaire pour une application


Les formulaires sont lune des mthodes les plus courantes que les applications Web utilisent pour recueillir des informations des utilisateurs. Flash Builder peut gnrer des formulaires pour les donnes obtenues partir des appels de service ou pour les types de donnes personnaliss utiliss pour accder aux donnes distantes. Lors de la gnration dun formulaire, Flash Builder cre un conteneur de prsentation Form et ajoute des composants afin dafficher ou de modifier les donnes spcifiques rcupres partir du service. Flash Builder gnre les types de formulaires suivants.
Formulaire Type de donnes Description Ce formulaire contient les composants reprsentant les champs dun type de donnes. Le composant principal correspond en rgle gnrale un contrle de donnes rpertoriant les donnes obtenues dun service. Le formulaire dtaill reprsente des lments individuels slectionns dans le composant principal. Appel de service Crez deux formulaires. Le premier spcifie les entres dune opration. Le second affiche les donnes renvoyes.

Dtail des donnes principales

Lors de la gnration dun formulaire, dfinissez les champs inclure, spcifiez le type du contrle dinterface utilisateur utilis pour reprsenter chaque champ et indiquez si le formulaire est modifiable ou non.

Cration dun formulaire


Cette procdure indique comment gnrer un formulaire pour un appel de service. Les procdures pour gnrer dautres types de formulaires sont similaires. Cette procdure suppose que vous soyez en mode Cration de lditeur MXML.
1 Plusieurs mthodes permettent dexcuter lassistant de gnration dun formulaire. Dans la vue Donnes/Services,

slectionnez une opration :

Dans le menu contextuel de lopration, slectionnez Gnrer le formulaire. Dans le menu Donnes de Flash Builder, slectionnez Gnrer le formulaire. Faites glisser lopration de la vue Donnes/Services vers un composant Form dans la zone de cration.
2 Dans lassistant Gnrer le formulaire, slectionnez Appel de service dans le champ Gnrer le formulaire pour. 3 Slectionnez Nouvel appel de service ou Rsultat dappel existant.

Spcifiez Rsultat dappel existant pour utiliser le code gnr prcdemment pour un appel de service. Sinon, activez Nouvel appel de service et slectionnez un service et une opration pour le formulaire.
4 (Facultatif) Les options disponibles sur le formulaire gnr varient en fonction de lopration.

Si lopration accepte les paramtres, vous pouvez choisir dinclure un formulaire pour les paramtres. Si lopration renvoie une valeur, vous pouvez choisir dinclure un formulaire pour la valeur renvoye. Vous pouvez choisir de rendre le formulaire modifiable ou de le rendre uniquement accessible en lecture.
5 (Facultatif) Configurez les types dentre et les types de retour.

Si lopration slectionne dispose de paramtres dentre ou renvoie une valeur, vous pouvez configurer le type dentre ou le type de retour.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 27


Cration dapplications centres sur les donnes avec Flash Builder

Pour pouvoir gnrer le formulaire, vous devez configurer les types dentre et de retour de lopration. Si vous les avez dj configurs prcdemment, vous avez ici la possibilit de les configurer nouveau. Voir Configuration des types de donnes pour les oprations de service de donnes la page 28.
6 Cliquez sur Suivant. Dans la bote de dialogue Mappage de contrle de proprit, slectionnez les champs inclure

dans le formulaire et le type de contrle pour reprsenter les donnes.


7 Cliquez sur Terminer. 8 Dans la zone de cration, rorganisez les formulaires gnrs.

Les formulaires gnrs par Flash Builder peuvent tre superposs. Slectionnez un formulaire et faites-le glisser vers un emplacement adquat. Utilisez le mode Source pour vous assurer davoir bien slectionn et dplac un formulaire et non un composant de ce dernier. La slection de formulaires superposs peut en effet savrer difficile. En mode Source, slectionnez la balise correspondant un formulaire. Basculez en mode Cration : ce formulaire est maintenant slectionn.

Gnration dun formulaire de dtails


Pour gnrer un formulaire de dtails, ajoutez un composant de contrle de donnes lapplication et liez les rsultats dune opration au contrle. Ajoutez par exemple un composant DataGrid, puis liez ce composant les rsultats dune opration telle que getItems_paged().
1 En mode Cration, slectionnez un contrle de donnes tel que DataGrid. 2 Dans le menu Donnes, slectionnez Gnrer le formulaire de dtails. 3 Gnrez le formulaire en suivant les instructions founies dans le paragraphe Cration dun formulaire.

Cration dun formulaire pour un type de donnes


Pour gnrer un formulaire avec des composants reprsentant les champs dun type de donnes personnalis, commencez par configurer le type de donnes. Voir Configuration des types de donnes pour les oprations de service de donnes la page 28.
1 Dans la vue Donnes/Services, slectionnez un type de donnes personnalis. 2 Dans le menu contextuel, slectionnez Gnrer le formulaire. 3 Assurez-vous que loption Gnrer le formulaire pour Type de donnes est slectionne, puis choisissez un type de

donnes.
4 (Facultatif) Rendez le formulaire modifiable si vous le souhaitez. 5 Cliquez sur Terminer.

Gnration de gestionnaires dvnement pour lextraction de donnes distantes


Lorsque vous reliez une opration de service de donnes un composant, Flash Builder cre un gestionnaire dvnement qui renseigne le composant avec les donnes extraites du service. Par exemple, si vous reliez une opration getAllItems() un DataGrid, Flash Builder gnre un gestionnaire dvnement creationComplete. Le composant DataGrid rfrence le gestionnaire dvnements gnr. Les rsultats de lappel deviennent le fournisseur de donnes du composant DataGrid.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 28


Cration dapplications centres sur les donnes avec Flash Builder

. . . protected function dataGrid_creationCompleteHandler(event:FlexEvent):void { getAllItemsResult.token = productService.getAllItems(); } . . . <mx:DataGrid creationComplete="dataGrid_creationCompleteHandler(event)" dataProvider="{getAllItemsResult.lastResult}"> . . . </mx:DataGrid> . . .

Lorsque vous excutez lapplication, le gestionnaire dvnement renseigne le composant DataGrid cr avec les donnes extraites du service. Lorsque vous crez des gestionnaires dvnement, vous pouvez accepter les gestionnaires crs ou les remplacer par des gestionnaires adapts vos besoins. Vous pouvez par exemple remplacer le gestionnaire dvnement creationComplete sur DataGrid par un gestionnaire creationComplete sur Application. Vous pouvez galement gnrer ou crer des gestionnaires dvnement pour des contrles acceptant les interactions avec lutilisateur, par exemple les contrles Button et Text.

Cration dun gestionnaire dvnement pour un composant dinterface utilisateur


1 Crez une application contenant un composant dinterface utilisateur tel que DataGrid ou Button. 2 Passez en mode Cration de lditeur MXML.

Utilisez lune des mthodes suivantes :

A partir de la vue Donnes/Services, faites glisser une opration sur un composant dinterface utilisateur. Slectionnez le composant dinterface utilisateur, puis cliquez sur licne de gnration dun gestionnaire
dvnement dans la vue Proprits. Slectionnez Gnrer le gestionnaire dvnement. Flash Builder cre un gestionnaire pour lvnement par dfaut du composant. Pour un bouton par exemple, le gestionnaire dvnement est lvnement Click. Flash Builder passe en mode Source de lditeur et met en vidence le stub gnr pour le gestionnaire dvnement. Compltez le code restant pour le gestionnaire dvnement. Flash Builder comporte un assistant de contenu facilitant le codage du gestionnaire dvnement.

Configuration des types de donnes pour les oprations de service de donnes


Lors de la connexion un service de donnes, Flash Builder doit connatre le type des donnes renvoyes par une opration de service. Les types de donnes pris en charge sont ceux reconnus par AMF pour changer des donnes avec un service de donnes ou un service distant. De nombreux services de donnes dfinissent le type des donnes renvoyes sur le serveur (dfinition de type ct serveur). Toutefois, si le serveur ne dfinit pas le type, lapplication client doit configurer le type des donnes renvoyes (dfinition de type ct client).

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 29


Cration dapplications centres sur les donnes avec Flash Builder

Les oprations de service qui spcifient les paramtres doivent galement spcifier un type correspondant aux donnes auxquelles le service permet daccder. La dfinition de type ct client permet de configurer le type des paramtres dentre. Lors de la configuration des types pour la dfinition de type ct client, Flash Builder reconnat uniquement les types de donnes AMF. Le type peut galement tre un type de donnes personnalis reprsentant des donnes complexes ou un type vide pour indiquer que lopration ne renvoie aucune donne. Vous pouvez configurer des types dfinis par lutilisateur pour les oprations de service qui renvoient des donnes complexes. Si vous rcuprez par exemple des enregistrements dune base de donnes demploys, vous allez dfinir le retour de donnes complexes comme Employ. Dans ce cas, le type de donnes personnalis pour Employ contient des entres pour chaque champ de lenregistrement de base de donnes. Types de donnes pour la dfinition de type ct client
Type de donnes Types ActionScript Description Boolean Boolean[] ByteArray ByteArray[] Date Date[] int int[] Number Number[] Object Object[] String String[] Aucune donne renvoye Type dfini par lutilisateur void CustomType CustomType[]

Type dfini par lutilisateur (Employ)


Champ emp_no first_name last_name hire_date birth_date Type de donnes Number String String Date Date

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 30


Cration dapplications centres sur les donnes avec Flash Builder

Authentification de laccs aux services


Les services de donnes ncessitent gnralement une authentification de lutilisateur avant dautoriser laccs aux services. Les services PHP, BlazeDS et ColdFusion donnant accs laide du protocole HTTP peuvent requrir une authentification supplmentaire. Dans certains cas, ces types de services ncessitent une authentification HTTP et une authentification distante. Flash Builder offre une option dauthentification du service lorsque vous effectuez les oprations suivantes :

Configuration du type de retour pour une opration


Voir Configuration du type de retour pour les donnes dune opration la page 31.

Utilisation de linterface Opration de test


Voir Test des oprations de service la page 33. Lorsque vous slectionnez loption Authentification requise, Flash Builder ouvre la bote de dialogue Authentification des services. Suivant le type de service auquel vous accdez, vous pouvez choisir lauthentification de base ou lauthentification distante.

Authentification de base
Lauthentification de base permet daccder aux services HTTP et Web. Fournissez le nom dutilisateur et le mot de passe pour accder ces services. Slectionnez les options de mmorisation du nom dutilisateur et du mot de passe si vous souhaitez que Flash Builder utilise les autorisations spcifies tout au long de la session.

Authentification distante
Lauthentification distante permet daccder aux services dobjets distants. Les services dobjets distants sont des services implments en tant quobjets distants laide de ColdFusion, PHP, BlazeDS et LiveCycle Data Services. Flash Builder ne fournit pas linterface dauthentification distante pour les projets qui nimplmentent pas de services dobjets distants. Fournissez le nom dutilisateur et le mot de passe pour accder aux services dobjets distants. Slectionnez les options de mmorisation du nom dutilisateur et du mot de passe si vous souhaitez que Flash Builder utilise les autorisations spcifies tout au long de la session.

Configuration des paramtres dentre dune opration


Pour la dfinition de type ct client, configurez les paramtres dentre des oprations disponibles partir du service de donnes. La procdure suivante part du principe quune connexion un service de donnes a t tablie dans Flash Builder et que le service de donnes dispose doprations ncessitant des paramtres dentre configurables.
1 Dans la vue Donnes/Services, slectionnez une opration contenant des paramtres dentre configurables. Dans

le menu contextuel de lopration, slectionnez Configurer les types dentre.


2 Dans la bote de dialogue Configurer les types dentre, slectionnez un type de donnes dans la liste pour chaque

argument de lopration. Cliquez sur OK. Vous pourrez galement slectionner les types de donnes de retour personnaliss pralablement dfinis. Pour la dfinition de type ct serveur, le serveur spcifie le type de donnes pour les paramtres dentre.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 31


Cration dapplications centres sur les donnes avec Flash Builder

Configuration du type de retour pour les donnes dune opration


Un service qui dfinit le type des donnes renvoyes par une opration fournit la dfinition de type ct serveur. Si un service ne dfinit pas le type des donnes renvoyes par une opration, Flash Builder utilise la dfinition de type ct client pour dfinir le type des donnes renvoyes. Flash Builder introspecte les donnes renvoyes par une opration de service afin den dterminer le type. Lorsque vous configurez le type de retour dune opration, vous avez deux options :

Dtecter automatiquement le type de retour partir de lexemple de donnes


Si le service implmente la dfinition de type ct serveur, Flash Builder dtecte le type de donnes dfini par le service. Si le service nimplmente pas la dfinition de type ct serveur, Flash Builder cre un type personnalis pour lapplication client. Pour la dfinition de type ct client, spcifiez un nom pout le type personnalis. En rgle gnrale, le nom dcrit les donnes renvoyes. Par exemple, si lopration renvoie un tableau de livres partir dun tableau de base de donnes, nommez le type Livre.

Utiliser un type de donnes existant


Un type existant peut tre dfini par le service, un type ActionScript ou un type personnalis prcdemment dfini. La procdure utilise par Flash Builder pour introspecter les donnes varie lgrement en fonction du type de service de donnes. Par exemple, la procdure utilise pour introspecter et configurer le type de retour pour un service HTTP est diffrente de celle utilise pour les services PHP ou ColdFusion.

Fusion et modification de types de donnes


Lors de lintrospection des donnes de serveur, vous pouvez fusionner les champs dun autre type de donnes ou crer un type de donnes bas sur un type de donnes existant. Voici quelques mthodes de modification dun type de donnes personnalis.

Cration dun nouveau nom pour un type de donnes existant


Crez un nouveau nom si vous prvoyez dutiliser les donnes renvoyes de diffrentes manires dans lapplication client. Par exemple, vous pouvez extraire des donnes employ qui peuvent tre utilises dans le rsum de lemploy et dans les tableaux dinformations des employs dans lapplication client.

Fusion de champs
Vous pouvez ajouter des champs renvoys un type de donnes existant. Lajout de champs supplmentaires peut tre utile lors de lassociation de donnes provenant de plusieurs sources, par exemple pour une opration JOIN renvoyant des donnes extraites de plusieurs tableaux de base de donnes. Un autre exemple est celui de donnes provenant de diffrents services, par exemple la fusion de donnes de type Livre reues dun service HTTP et dun service ColdFusion.

Configuration dun type de donnes personnalis (services PHP ou ColdFusion)


Cette procdure part du principe que vous tes connect un service de donnes implment avec PHP ou ColdFusion.
1 Dans la vue Donnes/Services, slectionnez Configurer le type de retour dans le menu contextuel dune opration. 2 Si lopration comporte des arguments, entrez les valeurs dargument. Spcifiez le type de donnes correct pour

largument.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 32


Cration dapplications centres sur les donnes avec Flash Builder

3 (Type personnalis nouveau ou modifi) Slectionnez loption de dtection automatique du type des donnes

renvoyes par cette opration. Si ce service ncessite une authentification, slectionnez Authentification requise et fournissez les autorisations requises. Voir Authentification de laccs aux services la page 30. Flash Builder introspecte lopration et cre un type de donnes personnalis. Spcifiez un nom pour le type de donnes personnalis. Si vous avez pralablement dfini un type de donnes personnalis, vous pouvez ajouter les champs renvoys la dfinition du type de donnes personnalis existant.
4 (Utilisation du type existant) Utilisez cette option pour spcifier un type ActionScript ou un type que vous avez

prcdemment configur.
5 Cliquez sur Terminer.

Configuration dun type de donnes personnalis (services HTTP)


Cette procdure part du principe que vous tes connect un service HTTP.
1 Dans la vue Donnes/Services, slectionnez Configurer le type de retour dans le menu contextuel dune opration. 2 (Nouveau type personnalis) Slectionnez loption de dtection automatique du type des donnes renvoyes par

cette opration. Si ce service ncessite une authentification, slectionnez Authentification requise et fournissez les autorisations requises. Flash Builder introspecte lopration et cre un type de donnes personnalis. Choisissez une mthode permettant Flash Builder de passer les valeurs des paramtres de lopration et cliquez sur Suivant.

(Saisie des valeurs des paramtres) Pour chaque paramtre, spcifiez une valeur.
Vous pouvez galement spcifier le type de donnes des paramtres. Flash Builder slectionne automatiquement le type de donnes par dfaut.

(Saisie de lURL du service) Saisissez lURL du service HTML, en incluant les paramtres et les valeurs dans
lURL. Par exemple :
http://httpserviceaddress/service_operation?param1=94105

(Saisie de la rponse XML/JSON) Copiez la rponse XML/JSON dans la zone de texte.


Utilisez cette option si vous tes hors ligne ou si le service HTTP est encore en cours de dveloppement, mais vous connaissez la rponse provenant du serveur.
3 (Nouveau type personnalis, suite) Spcifiez un nom de type de donnes personnalis ou slectionnez un nud

provenant des donnes renvoyes. Si vous slectionnez un nud pour les donnes renvoyes, Flash Builder cre un type de donnes personnalis pour les donnes renvoyes pour ce nud. Indiquez si les donnes sont renvoyes sous forme de tableau. Si le service renvoie un fichier XML, la liste droulante Slection de la racine est active. Slectionnez un nud dans le fichier XML pour spcifier un type de donnes.
4 (Utilisation du type existant) Utilisez cette option pour spcifier un type ActionScript ou un type prcdemment

configur.
5 Cliquez sur Terminer.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 33


Cration dapplications centres sur les donnes avec Flash Builder

Test des oprations de service


Vous pouvez utiliser Flash Builder pour tester des oprations de service et afficher les donnes renvoyes par une opration. Cette fonction est utile pour vrifier le comportement des services. Important : certaines oprations, telles que la mise jour ou la suppression, entranent une modification des donnes sur le serveur.

Test dune opration de service


Cette procdure part du principe que vous tes connect un service de donnes.
1 Dans la vue Donnes/Services, slectionnez une opration de service. Dans le menu contextuel, slectionnez

Opration de test. La vue Opration de test souvre et affiche lopration slectionne. Si lopration ncessite des paramtres dentre, la vue Opration de test comporte une liste des paramtres.
2 Pour chaque paramtre dentre requis, cliquez sur le champ Entrer une valeur et spcifiez une valeur.

Si le paramtre ncessite un type complexe, cliquez sur les points de suspension pour ouvrir un diteur de saisie dargument. Saisissez une valeur dans lditeur. Lditeur de saisie dargument accepte la notation JSON pour la reprsentation de types complexes dans ActionScript.
3 Si le serveur requiert une authentification, slectionnez loption Authentification requise. Cliquez sur Tester.

Fournissez les autorisations le cas chant. Voir Authentification de laccs aux services la page 30. Flash Builder affiche les donnes renvoyes par le service.
4 (Facultatif) Dans la vue Opration de test, slectionnez et testez dautres services et oprations disponibles.

Gestion de laccs aux donnes partir du serveur


Pagination La pagination est lextraction incrmentielle de jeux de donnes volumineux dun service distant.

Supposons par exemple que vous souhaitiez accder une base de donnes contenant 10 000 enregistrements pour en afficher les donnes dans une grille compose de 20 lignes. Vous pouvez dans ce cas implmenter une opration de pagination charge dextraire les lignes par incrments de 20 jeux. Une demande de donnes supplmentaires (matrialise par exemple par le dfilement de la grille de donnes par lutilisateur) conduit lextraction et laffichage de la page denregistrements suivante.
Gestion des donnes Dans Flash Builder, la gestion de donnes est la synchronisation des mises jour des donnes

sur le serveur partir de lapplication client. Elle permet de modifier un ou plusieurs lments dans une application client sans mettre jour le serveur, puis de valider lensemble des modifications apportes au serveur en une seule opration. Vous pouvez galement annuler les modifications sans mettre jour les donnes. La gestion de donnes implique la coordination de plusieurs oprations (cration, rcupration, mise jour et suppression) rpondant aux vnements de lapplication client, tels que la mise jour de lenregistrement de lemploy. Lors de lactivation de la gestion des donnes avec Flash Builder, ce dernier gnre un code mettant automatiquement jour les composants de linterface utilisateur. Par exemple, Flash Builder gnre un code assurant la synchronisation des composants DataGrid avec les donnes sur le serveur.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 34


Cration dapplications centres sur les donnes avec Flash Builder

Activation de la pagination
Vous pouvez activer la pagination pour un service de donnes qui implmente une fonction de pagination avec la signature suivante :
getItems_paged(startIndex:Number, numItems:Number): myDataType
Nom de la fonction startIndex Vous pouvez utiliser nimporte quel nom valide pour la fonction.

La premire ligne de donnes extraire. Dfinissez le type de donnes pour startIndex en tant que nombre dans lopration client.

numItems

Le nombre de lignes de donnes extraire dans chaque page. Dfinissez le type de donnes pour numItems en tant que nombre dans lopration client.

myDataType

Le type de donnes renvoy par le service de donnes.

Lors de limplmentation de la pagination partir dun service, vous pouvez aussi implmenter une opration count(). Lopration count() renvoie le nombre dlments renvoys par le service. Flash Builder requiert que lopration count() implmente la signature suivante :
count(): Number
Nom de la fonction Number Vous pouvez utiliser nimporte quel nom valide pour la fonction.

Nombre denregistrements extraits de lopration.

Flex utilise lopration count pour afficher correctement les composants de linterface utilisateur qui extraient des jeux de donnes volumineux. Lopration count() contribue par exemple dterminer la taille du curseur de la barre de dfilement dun objet DataGrid. Certains services distants ne fournissent pas dopration count(). La pagination continue fonctionner, mais le contrle qui affiche les donnes pagines risque de ne pas reprsenter correctement la taille du jeu de donnes. Oprations de pagination des interrogations filtres Activez la pagination des interrogations pour filtrer les rsultats envoys par la base de donnes. Lorsque vous filtrez les rsultats de linterrogation, utilisez ces signatures pour les fonctions de pagination et count.
getItems_pagedFiltered(filterParam1:String, filterParam2:String, startIndex:Number, numItems:Number): myDataType countFiltered(filterParam1:String, filterParam2:String)
filterParam1 Paramtre de filtre facultatif. Ce paramtre est le mme dans les fonctions getItems_PagedFiltered() et countFiltered(). Paramtre de filtre facultatif. Ce paramtre est le mme dans les fonctions getItems_PagedFiltered() et countFiltered().

filterParam2

Voici un fragment de code dune fonction getItems_pagedFiltered() implmente dans PHP pour accder la base de donnes MySQL. Il indique comment utiliser le paramtre de filtre facultatif.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 35


Cration dapplications centres sur les donnes avec Flash Builder

get_Items_paged($expression, $startIndex, $numItems) { . . . SELECT * from employees where name LIKE $expression LIMIT $startIndex, $numItems; . . . }

Activation de la pagination pour une opration Cette procdure part du principe que vous avez cod les oprations getItems_paged() et count() du service distant et que vous avez configur le type de donnes de retour pour lopration, ainsi que dcrit dans Configuration des types de donnes pour les oprations de service de donnes la page 28.
1 Dans la vue Donnes/Services, ouvrez le menu contextuel de lopration getItems_paged() et slectionnez

Activer la pagination.
2 En labsence de cl unique pour le type de donnes, spcifiez les attributs qui caractriseront une occurrence de ce

type de donnes de manire univoque. Cliquez sur Suivant. Cet attribut est gnralement la cl primaire.
3 (Facultatif) Spcifiez le nombre dlments rcuprer pour dfinir un format de page personnalis.

Si vous ne spcifiez pas de format de page personnalis, un format par dfaut est dfini au niveau du service. Par dfaut, une page peut contenir 20 enregistrements.
4 (Facultatif) Spcifiez lopration count(). Cliquez sur Terminer.

Lopration count() permet Flash Builder dafficher correctement les lments de linterface utilisateur, tels que la taille du curseur de la barre de dfilement. La pagination est active pour lopration. Dans la vue Donnes/Services, la signature de la fonction qui implmente la pagination ninclut plus les paramtres startIndex et numItems. Flash Builder ajoute maintenant ces valeurs de faon dynamique et les dtermine en fonction de la taille des pages dfinie par lutilisateur ou de la taille des pages par dfaut (20 enregistrements par page).

Activation de la gestion des donnes


Pour activer la gestion de donnes pour un service, le service implmente une ou plusieurs des fonctions suivantes. La gestion de donnes utilise ces fonctions pour synchroniser les mises jour des donnes sur le serveur distant :

Ajout (createItem)
createItem(item: myDatatype):int createItem(item: myDatatype):String createItem(item: myDatatype):myDataType

Le type de retour de la mthode createItem() est le type de la cl principale de la base de donnes.

Obtention de toutes les proprits (getItem)


getItem(itemID:Number): myDatatype

Mise jour (updateItem)


updateItem((item: myDataType):void updateItem((item: myDataType, originalItem: myDataType):void updateItem((item: myDataType, originalItem: myDataType, changes: String[]):void

Suppression (deleteItem)

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 36


Cration dapplications centres sur les donnes avec Flash Builder

deleteItem(itemID:Number):void

Dans Flash Builder, ces fonctions doivent avoir les signatures suivantes.
Nom de la fonction item originalItem itemID Identifiant univoque de llment, gnralement la cl primaire dans la base de donnes. Tableau correspondant aux champs dun lment Item spcifi. Cet argument est utilis uniquement dans une version de la mthode updateItem(). Type de donnes de llment du service de donnes. En gnral, vous dfinissez un type de donnes personnalis lorsque vous extrayez des donnes dun service. Vous pouvez utiliser nimporte quel nom valide pour la fonction.

Elment du type de donnes renvoy par le service de donnes.

changes[] myDataType

Indicateur autoCommit
La gestion de donnes permet de synchroniser les mises jour des donnes sur le serveur. Les modifications apportes aux donnes dans lapplication client ne sont pas mises jour sur le serveur tant que lappel de la mthode service.commit() na pas t effectu. Cependant, si vous souhaitez dsactiver cette fonctionnalit, dfinissez lindicateur autoCommit sur true. Si autoCommit est dfini sur true, les mises jours des donnes du serveur ne sont pas mises en cache, mais sont effectues immdiatement. Voir Activation de la gestion de donnes pour un service la page 42.

Indicateur deleteItemOnRemoveFromFill
Lorsque vous supprimez des lments alors que la gestion des donnes est active, utilisez lindicateur deleteItemOnRemoveFromFill. Par dfaut, cet indicateur est dfini sur true. Lorsque vous supprimez un lment, cet lment est immdiatement retir de la base de donnes. Dfinissez deleteItemOnRemoveFromFill sur false pour diffrer la suppression jusqu lappel de la mthode commit(). Lexemple suivant illustre le code pour la cration dun gestionnaire dvnement complet pour un contrle DataGrid. Si lutilisateur supprime un lment Employee slectionn dans le DataGrid, llment slectionn nest retir de la base de donnes qu lappel de la mthode commit().
protected function dg_creationCompleteHandler(event:FlexEvent):void { employeeService. getDataManager(employeeService.DATA_MANAGER_EMPLOYEE).autoCommit=false; employeeService.getDataManager( e m p l oyeeService.DATA_MANAGER_EMPLOYEE).deleteItemOnRemoveFromFill= true; getAllEmployeesResult.token = employeeService.getAllEmployees(); }

Activation de la gestion de donnes pour une opration


Cette procdure part du principe que vous avez implment les oprations requises dans le service distant et que vous avez configur le type de donnes de retour pour les oprations utilisant un type de donnes personnalis. Voir Configuration des types de donnes pour les oprations de service de donnes la page 28.
1 Dans la vue Donnes/Services, dveloppez le nud Types de donnes. 2 Accdez au menu contextuel dun type de donnes et slectionnez Activer la gestion de donnes. 3 En labsence de cl unique pour le type de donnes, spcifiez les attributs qui caractriseront une occurrence de ce

type de donnes de manire univoque. Cliquez sur Suivant.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 37


Cration dapplications centres sur les donnes avec Flash Builder

Cet attribut est gnralement la cl primaire.


4 Spcifiez les oprations dajout, dobtention de toutes les proprits, de mise jour et de suppression que vous avez

implmentes. Cliquez sur Terminer. Remarque : il nest pas ncessaire dimplmenter toutes ces fonctions. Implmentez uniquement celles qui sont requises pour votre application. La gestion des donnes est active pour lopration.

Gnration du code Flash Builder pour les applications client


Flash Builder gnre du code client donnant accs aux oprations du service distant. La gnration de code est dclenche par les oprations suivantes :

Connexion un service de donnes Actualisation du service de donnes dans la vue Donnes/Services Configuration dun type de retour pour une opration Liaison dune opration de service un contrle de linterface utilisateur Activation de la pagination pour une opration de service Activation de la gestion de donnes pour une opration de Cration dun gestionnaire dvnement ou dun appel de service

Classes du service
Utilisez lassistant de service pour vous connecter un service de donnes. Lorsque vous vous connectez un service, Flash Builder gnre un fichier de classe ActionScript donnant accs aux oprations du service. Pour les services qui accdent un composant RemoteObject, la classe gnre tend la classe RemoteObjectServiceWrapper. En rgle gnrale, les services implments avec PHP, ColdFusion, BlazeDS et LiveCycle Data Services accdent un RemoteObject. Pour les services HTTP, la classe gnre tend la classe HTTPServiceWrapper. Pour les services Web, la classe gnre tend la classe WebServiceWrapper. Flash Builder base le nom du fichier de la classe gnre sur le nom attribu au service dans lassistant de service. Par dfaut, Flash Builder place cette classe dans le dossier source principal dun projet. En rgle gnrale, ce dossier est nomm src. Le nom du package est bas sur celui du service. Par exemple, Flash Builder gnre les classes ActionScript suivantes pour une classe EmployeeService.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 38


Cration dapplications centres sur les donnes avec Flash Builder

- project | - src | + (default package) | + services | | | +employeeservice | | | + _Super_EmployeeService.as | | | + EmployeeService.as

La super-classe contient limplmentation de la classe EmployeeService. La super-classe est une classe gnre. Ne lditez jamais. Les modifications apportes la super-classe risquent dtre remplaces. Les modifications apportes limplmentation peuvent provoquer un comportement non dfini. Dans cet exemple, utilisez EmployeeService.as pour tendre la super-classe gnre et ajouter limplmentation.

Voir aussi
Connexion des services de donnes la page 9

Classes de types de donnes personnaliss


De nombreux services de donnes distants fournissent une dfinition de type ct serveur. Ces services renvoient des donnes complexes comme type de donnes personnalis. Pour les services de donnes distants ne renvoyant pas de donnes types, Flash Builder fournit une dfinition de type ct client. Avec la dfinition de type ct client, vous utilisez lassistant de connexion Flash Builder pour dfinir et configurer le type des donnes complexes renvoyes par le service. Vous pouvez par exemple dfinir et configurer un type de donnes Employ pour un service renvoyant des enregistrements dune base de donnes demploys. Flash Builder gnre une classe ActionScript pour limplmentation de chaque type de donnes personnalis envoy par le service. Il utilise cette classe pour crer des objets de valeur, quil utilise ensuite pour accder aux donnes partir du service distant. Par exemple, Flash Builder gnre les classes ActionScript suivantes pour une classe EmployeeService qui contient un type de donnes Employee :

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 39


Cration dapplications centres sur les donnes avec Flash Builder

- project | - src | + (default package) | + services | | | +employeeservice | | | + _Super_EmployeeService.as | | | + EmployeeService.as | + valueObjects | + _Super_Employee.as | + Employee.as

Les super-classes contiennent respectivement limplmentation de la classe EmployeeService et le type de donnes Employee. Nditez jamais une super-classe gnre. Les modifications apportes la super-classe risquent dtre remplaces. Les modifications apportes limplmentation peuvent provoquer un comportement non dfini. Dans cet exemple, utilisez EmployeeService.as et Employee.as pour tendre la super-classe gnre et ajouter limplmentation.

Liaison dune opration de service un contrle de linterface utilisateur


Pour obtenir des informations sur la liaison des donnes renvoyes par des oprations de service un contrle de linterface utilisateur, voir Liaison doprations de service des contrles la page 24. Lorsque vous liez une opration de service un contrle, Flash Builder gnre le code suivant :

Une balise Declarations contenant une proprit CallResponder et une balise de service Un gestionnaire dvnement pour appeler lappel de service Une liaison de donnes entre le contrle et les donnes renvoyes par lopration

Balise Declarations
Une balise Declarations est un lment MXML qui dclare des proprits de la classe actuelle qui ne sont pas des proprits par dfaut ni visuelles. Lors de la liaison dune opration de service une interface utilisateur, Flash Builder gnre une balise Declarations contenant une proprit CallResponder et une balise de service. La proprit CallResponder et la classe de service gnre sont les proprits de llment de conteneur, qui est gnralement la balise Application. Lexemple suivant prsente une balise Declarations donnant accs un service EmployeeService distant :
<fx:Declarations> <s:CallResponder id="getAllEmployeesResult"/> <employeesservice:EmployeesService id="employeesService" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/> </fx:Declarations>

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 40


Cration dapplications centres sur les donnes avec Flash Builder

CallResponder
La proprit CallResponder gre les rsultats des appels effectus un service. Elle contient une proprit de jeton dfinie sur le jeton Async renvoy par un appel de service. La proprit CallResponder contient galement une proprit lastResult, dfinie sur le dernier rsultat russi de lappel de service. Vous ajoutez des gestionnaires dvnement la proprit CallResponder pour donner accs aux donnes renvoyes par lintermdiaire de la proprit lastResult. Lorsque Flash Builder gnre une proprit CallResponder, il gnre une proprit ID en fonction du nom de lopration de service laquelle elle est lie. Lexemple de code suivant illustre les proprits CallResponder de deux oprations dun service EmployeeService. Lopration getAllItems est lie au gestionnaire dvnement creationComplete dun composant DataGrid. Lopration delete est lie llment slectionn dans le composant DataGrid. Immdiatement aprs sa cration, le composant DataGrid affiche les lments extraits de lappel de service getAllItems. Le contrle Delete Item Button supprime de la base de donnes lenregistrement slectionn dans le composant DataGrid.
<fx:Script> <![CDATA[ import mx.events.FlexEvent; import mx.controls.Alert; protected function dg_creationCompleteHandler(event:FlexEvent):void { getAllItemsResult.token = employeesService.getAllItems(); } protected function button_clickHandler(event:MouseEvent):void { deleteItemResult.token = employeesService.deleteItem(dg.selectedItem.emp_no); } ]]> </fx:Script> <fx:Declarations> <s:CallResponder id="getAllItemsResult"/> <employeesservice:EmployeesService id="employeesService" fault="Alert.show(event.fault.faultString + '\n' + event.fault.faultDetail)" showBusyCursor="true"/> <s:CallResponder id="deleteItemResult"/> </fx:Declarations> <mx:DataGrid id="dg" editable="true" creationComplete="dg_creationCompleteHandler(event)"dataProvider="{getAllItemsResult.lastRes ult}"> <mx:columns> <mx:DataGridColumn headerText="emp_no" dataField="emp_no"/> <mx:DataGridColumn headerText="last_name" dataField="last_name"/> <mx:DataGridColumn headerText="hire_date" dataField="hire_date"/> </mx:columns> </mx:DataGrid> <s:Button label="Delete Item" id="button" click="button_clickHandler(event)"/>

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 41


Cration dapplications centres sur les donnes avec Flash Builder

Gestionnaires dvnement
Lorsque vous reliez une opration de service un composant de linterface utilisateur, Flash Builder cre un gestionnaire dvnement pour la proprit CallResponder. Le gestionnaire dvnement gre les rsultats de lopration. Vous pouvez galement crer un gestionnaire dvnement dans un bloc de code ActionScript et rfrencer ce gestionnaire dvnement partir dune proprit dun composant de linterface utilisateur. Vous renseignez gnralement les contrles tels que List et DataGrid avec les donnes renvoyes par un service. Par dfaut, Flash Builder gnre pour le contrle un gestionnaire dvnement creationComplete qui est dclench immdiatement aprs la cration du contrle. Pour dautres contrles, il gnre un gestionnaire pour lvnement par dfaut. Pour un bouton par exemple, il gnre un vnement pour lvnement click. La proprit event du contrle est dfinie sur le gestionnaire dvnement gnr. Lexemple suivant illustre le gestionnaire dvnement creationComplete gnr pour un contrle DataGrid :
<fx:Script> <![CDATA[ import mx.events.FlexEvent; import mx.controls.Alert; protected function dg_creationCompleteHandler(event:FlexEvent):void { getAllItemsResult.token = employeesService.getAllItems(); } ]]> </fx:Script> . . . <mx:DataGrid id="dg" editable="true" creationComplete="dg_creationCompleteHandler(event)" dataProvider="{getAllItemsResult.lastResult}"> <mx:columns> <mx:DataGridColumn headerText="emp_no" dataField="emp_no"/> <mx:DataGridColumn headerText="last_name" dataField="last_name"/> <mx:DataGridColumn headerText="hire_date" dataField="hire_date"/> </mx:columns> </mx:DataGrid>

Vous pouvez gnrer des gestionnaires dvnement pour des contrles rpondant aux vnements user (les contrles Button, par exemple). Lexemple suivant prsente un gestionnaire dvnement gnr pour un bouton qui renseigne un contrle DataGrid :
<fx:Script> <![CDATA[ import mx.events.FlexEvent; import mx.controls.Alert; protected function button_clickHandler(event:MouseEvent):void { deleteItemResult.token = employeesService.deleteItem(dg.selectedItem.emp_no); } ]]> </fx:Script> . . . <s:Button label="Delete Item" id="button" click="button_clickHandler(event)"/>

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 42


Cration dapplications centres sur les donnes avec Flash Builder

Liaison de donnes
Lorsque vous crez une interface utilisateur, vous liez les oprations de service aux contrles. Voir Liaison doprations de service des contrles la page 24. Flash Builder gnre du code qui lie les donnes renvoyes par une opration de service au contrle de linterface utilisateur affichant les donnes. Lexemple suivant illustre le code que Flash Builder gnre pour renseigner un contrle DataGrid. Lopration getAllItems renvoie un ensemble denregistrements demploys pour le type de donnes personnalis Employ. La proprit dataProvider du contrle DataGrid est lie aux rsultats stocks dans la proprit CallResponder, getAllItemsResult. Flash Builder met automatiquement jour le contrle DataGrid en fonction des colonnes DataGridColumn correspondant chaque champ renvoy pour un enregistrement Employ. Les proprits headerText et dataField de chaque colonne sont dfinies en fonction des donnes renvoyes dans un enregistrement Employ.
<mx:DataGrid creationComplete="datagrid1_creationCompleteHandler(event)" dataProvider="{getAllItemsResult.lastResult}" editable="true"> <mx:columns> <mx:DataGridColumn headerText="gender" dataField="gender"/> <mx:DataGridColumn headerText="emp_no" dataField="emp_no"/> <mx:DataGridColumn headerText="birth_date" dataField="birth_date"/> <mx:DataGridColumn headerText="last_name" dataField="last_name"/> <mx:DataGridColumn headerText="hire_date" dataField="hire_date"/> <mx:DataGridColumn headerText="first_name" dataField="first_name"/> </mx:columns> </mx:DataGrid>

Activation de la pagination pour une opration de service


Lorsque vous activez la pagination, Flash Builder modifie limplmentation du service gnr. Lorsque vous renseignez un contrle de donnes (un contrle DataGrid ou List, par exemple) avec des donnes pagines, Flash Builder dtermine le nombre denregistrements visibles dans le contrle de donnes et le nombre total denregistrements dans la base de donnes. Il fournit ces valeurs en tant quarguments lopration de service que vous avez utilise pour implmenter la pagination. Vous navez pas modifier de code dapplication client une fois la pagination active. Pour plus dinformations, voir Activation de la pagination la page 34.

Activation de la gestion de donnes pour un service


Dans Flash Builder, la gestion de donnes est la synchronisation dun ensemble de mises jour des donnes sur le serveur. Vous pouvez activer la gestion de donnes pour les types de donnes personnaliss renvoys par un service. Avec la gestion de donnes active, vous pouvez modifier un ou plusieurs lments dans une application client sans mettre jour le serveur. Vous pouvez ensuite valider lensemble des modifications apportes au serveur en une opration. Vous pouvez aussi annuler les modifications sans mettre jour les donnes sur le serveur. Pour plus dinformations sur limplmentation de cette fonction, voir Activation de la gestion des donnes la page 35. Lorsque vous activez la gestion des donnes, Flash Builder modifie limplmentation de la classe de service gnre et de la classe gnre pour les types de donnes personnaliss. Il cre une classe DataManager pour implmenter cette fonctionnalit.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 43


Cration dapplications centres sur les donnes avec Flash Builder

Synchronisation des mises jour avec les donnes de serveur


Lorsque vous appelez des oprations de service pour un type de donnes gr, les changements sont reflts dans lapplication client. Toutefois, vous pouvez spcifier que les donnes sur le serveur ne soient mises jour que lorsque vous appelez la mthode commit() de la classe DataManager. Lorsque la gestion des donnes est active pour un service, le service comporte un indicateur autoCommit. Par dfaut, autoCommit est dfini sur false. Lindicateur autoCommit dtermine si les changements sont valids immdiatement ou sil faut attendre lappel de
service.commit().

Si autoCommit est dfini sur false, toutes les mises jour du service dans lapplication client sont mises en cache jusqu lappel de service.commit(). Vous pouvez appeler la mthode revertChanges() du service pour ignorer les changements. Si autoCommit est dfini sur true, les mises jours sont envoyes immdiatement au serveur. Vous ne pouvez pas appeler la mthode revertChanges() pour ignorer les changements. Lindicateur deleteItemOnRemoveFromFill dtermine si un lment supprim est immdiatement retir de la base de donnes. Si lindicateur est dfini sur true, llment nest supprim qu lappel de service.commit(). Le code suivant dsactive la synchronisation par gestion des donnes des mises jour avec les donnes du serveur. Les modifications apportes aux donnes du type gr sont mises jour immdiatement sur le serveur.
bookService.getDataManager(bookService.DATA_MANAGER__BOOK).autoCommit = true;

Le code suivant active la synchronisation de la gestion de donnes des mises jour des donnes du serveur. Les modifications apportes aux donnes pour le type gr ne sont mises jour qu lappel de commit() pour le service. En outre, les lments supprims ne sont retirs de la base de donnes qu lappel de commit().
bookService.getDataManager(bookService.DATA_MANAGER__BOOK).autoCommit = false; bookService.getDataManager(bookService.DATA_MANAGER__BOOK).deleteItemOnRemoveFromFill= true;

Annulation des modifications


La classe DataManager fournit la mthode revertChanges qui permet de rtablir dans lapplication client les valeurs extraites du serveur avant le dernier appel de la mthode commit. Appelez revertChanges() avant dappeler commit() pour annuler les modifications apportes un type de donnes gr dans lapplication client :
bookService.getDataManager (bookService.DATA_MANAGER_BOOK).revertChanges();

Pour valider les modifications apportes au type de donnes gr, appelez la mthode commit().
bookService.getDataManager (employeeService.DATA_MANAGER_EMPLOYEE).commit();

Vous pouvez galement appeler la mthode commit directement partir de loccurrence bookService. Lappel de la mthode commit directement partir de loccurrence de service valide toutes les modifications pour tous les types de donnes grs.
bookService.commit();

Remarque : vous ne pouvez pas appeler revertChanges() directement partir de loccurrence de service pour annuler les modifications apportes tous les types de donnes grs. Vous ne pouvez lappeler que pour un type de donnes gr spcifique. Si vous souhaitez remplacer le comportement par dfaut de la gestion des donnes et dsactiver la possibilit de rtablir les modifications, dfinissez lindicateur autoCommit sur true. Par exemple, si vous avez une occurrence de bookService et vous avez activ la gestion des donnes pour le type de donnes Book, dfinissez autoCommit sur true :

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 44


Cration dapplications centres sur les donnes avec Flash Builder

bookService.getDataManager(bookService.DATA_MANAGER__BOOK).autoCommit = true;

Les modifications apportes aux donnes pour le type gr sont dsormais mises jour immdiatement sur le serveur.

Dploiement des applications accdant aux services de donnes


Il existe de nombreux facteurs considrer lorsque vous dplacez votre application dun environnement de dveloppement vers un environnement de dploiement. Le processus de dploiement dune application dpend de votre application, de ses exigences et de votre environnement de dploiement. Par exemple, le processus de dploiement dune application dun site Web interne accessible uniquement aux employs de lentreprise est diffrent du processus de dploiement de la mme application sur un site Web public. La section Deploying applications prsente les diffrents lments considrer et inclut une liste de contrle de dploiement (Deployment checklist). La liste de contrle aborde les problmes courants de configuration de systme que les clients ont pu rencontrer lors du dploiement des applications pour la mise en production. La documentation contient galement des conseils de dpannage permettant de dtecter les problmes de dploiement les plus courants.

Meilleures pratiques pour le codage de laccs aux services de donnes


Les outils Flash Builder vous permettent de gnrer du code client pour accder aux donnes dune base de donnes. Cette fonction est disponible pour PHP et ColdFusion. Cependant, ce code est destin uniquement au prototypage. Nutilisez pas ce code comme modle pour crire des applications scurises. Par dfaut, le code gnr permet toute personne disposant dun accs rseau votre serveur dinsrer, de slectionner, de mettre jour ou de supprimer des lments du tableau de base de donnes. Voici quelques recommandations prendre en compte lors de la modification du code gnr ou de la rdaction de code accdant aux services. Pour plus dinformations, voir Securing Data Services.

Suppression de fonctions inutilises


Supprimez ou ajoutez un commentaire toute fonction que vous ne souhaitez pas utiliser dans votre application.

Ajout dauthentification
Ajoutez lauthentification utilisateur afin de vous assurer que seuls les utilisateurs de confiance peuvent accder vos informations de base de donnes.

Ajout des vrifications dautorisation


Si lauthentification est ncessaire, ajoutez les vrifications dautorisation. Mme si vous avez donn accs des utilisateurs authentifis votre application, vous devez vous assurer quils sont autoriss faire des requtes spcifiques. Par exemple, vous pouvez autoriser tous les utilisateurs slectionner, mais restreindre le nombre dutilisateurs autoriss supprimer. Un autre exemple consiste autoriser un utilisateur A extraire ses propres informations laide dune requte de slection tout en lempchant dutiliser cette mme requte pour accder aux informations de lutilisateur B.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 45


Cration dapplications centres sur les donnes avec Flash Builder

Validation de donnes
Assurez-vous dajouter la validation de donnes. Par exemple, effectuez une validation des donnes fournies toute instruction dinsertion afin de vous assurer quaucune donne errone ou malveillante ne soit accepte dans la base de donnes. La validation ct client ne permet pas de vous protger des envois de requtes manuelles votre serveur Web. La validation des donnes protge contre les pirates et garantit la qualit des informations stockes.

Restriction de la quantit de donnes extraites


Les mthodes de slection peuvent slectionner la totalit dun tableau. Dans certains cas, cela peut entraner la prsence dune quantit trop importante dinformations sur le rseau. Extrayez uniquement les donnes dont vous avez besoin. Par exemple, SELECT * partir dun tableau dutilisateurs peut renvoyer le nom de lutilisateur et son mot de passe sur le rseau.

Utilisation de SSL pour les donnes sensibles


Lutilisation dun protocole scuris permet dassurer la scurit des informations que vous envoyez.

Exportation des fichiers source avec version valide dune application


Lorsque vous exportez la version valide dune application, Flash Builder fournit loption Activer laffichage de la source. Cette option permet aux utilisateurs dafficher les fichiers source qui implmentent lapplication. Dans le cadre des projets pour serveurs, les fichiers source incluent le dossier services qui contient les fichiers fournissant laccs limplmentation du service. Important : faites preuve de prudence lorsque vous incluez des fichiers de service avec loption daffichage de la source. Lors de laccs la base de donnes, les fichiers de service exposent des dtails et peuvent comporter des informations sensibles, telles que des noms dutilisateurs et des mots de passe. Si des services sont inclus dans loption daffichage de la source, toute personne ayant accs lapplication lance peut galement accder des donnes sensibles.

Voir aussi
Flex Security

Ecriture de services scuriss


Les exemples de la documentation Adobe, y compris les didacticiels et les applications cres laide de la gnration de code Flash Builder, sont instructifs de par leur nature. Ils illustrent comment accder aux services de donnes partir dune application client. Cependant, dans la mesure o ces exemples sont conus dans une optique de clart, ils nillustrent pas les meilleures pratiques en matire daccs scuris aux donnes. La documentation Flash Builder contient des exemples, dont des applications cres partir de code gnr. Ces exemples sont destins tre dploys dans un environnement de dveloppement fiable. Un environnement de dveloppement fiable peut tre un ordinateur local ou un emplacement lintrieur dun pare-feu. Sans mesures de scurit supplmentaires, toute personne disposant dun accs au rseau peut accder votre base de donnes. Les meilleures pratiques en matire de rdaction de services incluent :

Authentifiez lutilisateur avant tout appel de mthode sur un service. Utilisez lauthentification de service pour autoriser uniquement certains utilisateurs effectuer certaines actions.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 46


Cration dapplications centres sur les donnes avec Flash Builder

Par exemple, admettons que vous disposez dune application permettant de modifier les donnes demploys avec un appel RemoteObject. Dans ce cas, utilisez lauthentification RemoteObject afin de vous assurer que seuls les gestionnaires puissent modifier les donnes des employs.

Utilisez la scurit par programmation pour limiter laccs aux services. Appliquez des contraintes de scurit dclarative des services entiers. Lorsque vous accdez un service Web (<mx:WebService>) ou HTTP (<mx:HTTPService>), lun des lments
suivants doit tre vrai :

Limplmentation de service se trouve dans le mme domaine que lapplication qui lappelle. Le systme hte du service possde un fichier crossdomain.xml qui autorise explicitement laccs partir du
domaine de lapplication.

Voir aussi
Flex Security Securing Data Services

Rdaction dapplications scurises


Adobe Flash Player excute des applications gnres avec Flash. Le contenu est livr sous forme de sries dinstructions au format binaire Flash Player laide de protocoles Web dans un format de fichier SWF dcrit prcisment. Les fichiers SWF sont en rgle gnrale hbergs sur un serveur, puis tlchargs et affichs sur lordinateur client lorsquils sont demands. La plupart du contenu correspond des instructions ActionScript binaires. ActionScript est le langage de script bas sur les normes ECMA utilis par Flash. ActionScript dispose dAPI conues pour permettre la cration et la manipulation dlments de linterface utilisateur ct client et pour travailler avec les donnes. Le modle de scurit pour Flex protge le client et le serveur. Tenez compte des deux aspects gnraux de scurit suivants :

Autorisation et authentification des utilisateurs accdant aux ressources dun serveur Flash Player oprant dans un sandbox sur le client
Flex prend en charge lutilisation de la scurit dapplications Web de tout serveur dapplication J2EE. En outre, les applications prcompiles dans Flex peuvent sintgrer au modle dauthentification et dautorisation de toute technologie de serveur sous-jacente afin dempcher les utilisateurs daccder vos applications. La structure Flex inclut galement plusieurs mcanismes de scurit intgrs vous permettant de contrler laccs aux services Web, aux services HTTP et aux ressources bases sur serveur comme les EJB. Flash Player sexcute au sein dun sandbox de scurit qui empche le piratage du client par du code dapplication malveillant. Remarque : le contenu SWF excut dans Adobe AIR suit des rgles de scurit diffrentes de celles appliques au contenu excut dans le navigateur. Pour plus de dtails, voir la rubrique sur la scurit Air de la documentation AIR. Pour obtenir des liens vers diffrentes rubriques de scurit, voir Security Topic Center sur le portail Adobe Developer Connection.

Voir aussi
Flex Security

Dernire mise jour le 18/3/2010

47

Chapitre 3 : Implmentation de services pour des applications centres sur les donnes
AMF (Action Message Format)
Flex utilise des services dobjets distants et AMF pour accder aux services implments dans ColdFusion, PHP, BlazeDS et Adobe LiveCycle Data Services ES. AMF fournit la messagerie ncessaire pour changer des donnes entre une base de donnes et lapplication client. ColdFusion, BlazeDS et Adobe LiveCycle Data Services ES fournissent chacun une structure AMF pour les services dobjet distant. Pour les services implments dans PHP, Flash Builder utilise la structure Zend AMF. Les services ColdFusion et PHP peuvent fournir une dfinition de type ct serveur. Dans la dfinition de type ct serveur, le service dfinit le type des donnes renvoyes. Toutefois, si limplmentation de service ne dfinit pas le type de donnes de retour, Flash Builder fournit la dfinition de type ct client. Il chantillonne des donnes du service, ce qui vous permet de configurer le type de retour dans lapplication client.

Dfinition de type ct client et ct serveur


Dans Flex, une application client utilise le type des donnes renvoyes par un appel de service dans les mthodes qui accdent et affichent les donnes. Cependant, les exemples de services numrs ci-dessous renvoient des donnes non types.

Implmentation de services ColdFusion la page 48 Implmentation de services PHP la page 54 Exemple dimplmentation de services partir de plusieurs sources la page 68
Par exemple, pour lopration getAllEmployees, le service renvoie un tableau dobjets non typs reprsentant des enregistrements issus de la base de donnes. Flash Builder fournit des outils qui activent la dfinition de type ct client. Les outils Flash Builder vous permettent dexaminer en dtail les donnes renvoyes et de dfinir un type personnalis pour les donnes. Vous pouvez dfinir le type de donnes personnalis Employ pour lobjet renvoy des enregistrements demploys. Chaque colonne de lenregistrement devient une proprit du type de donnes Employ. A laide du type de donnes personnalis Employ, lapplication client peut accder aux donnes renvoyes et les afficher correctement. Flash Builder peut galement accder des services implmentant une dfinition de type ct serveur. Pour obtenir des exemples de la dfinition de type ct serveur, voir Exemples de dfinition de type ct serveur dans Flash Builder.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 48


Implmentation de services pour des applications centres sur les donnes

Implmentation de services ColdFusion


Lors de limplmentation de services dans ColdFusion, implmentez les services en tant que fichiers de composants ColdFusion (CFC). Chaque CFC contient des fonctions fournissant des oprations de service. Vous pouvez crer des services ColdFusion dans nimporte quel environnement ddition (Adobe DreamWeaver ou Adobe ColdFusion Builder , par exemple). Flash Builder ne fournit pas dditeur spcifique aux fichiers ColdFusion. Louverture dun fichier ColdFusion dans Flash Builder conduit toutefois au lancement de lapplication du systme associe aux fichiers ColdFusion.

Exemples de services ColdFusion


Vous pouvez implmenter un service ColdFusion de base en crant un composant ColdFusion (CFC) qui contient les fonctions pour les oprations de service. Lexemple suivant, employeeService.cfc, illustre un EmployeeService qui implmente deux fonctions. La fonction getAllIEmployees() extrait tous les enregistrements demploys de la base de donnes. La fonction getEmployees() renvoie un enregistrement demploy unique bas sur largument emp_no de la fonction. Cet exemple illustre la dfinition de type ct client. Le service renvoie des donnes non types. Flash Builder utilise la dfinition de type ct client pour introspecter les donnes renvoyes et dfinir le type de donnes. Les exemples suivants illustrent comment implmenter les services pour la pagination et la gestion de donnes. Vous pouvez galement utiliser Flash Builder pour accder des services implmentant la dfinition de type ct serveur. Voir Dfinition de type ct client et ct serveur la page 47. Aucun exemple de dfinition de type ct serveur ntait disponible lorsque la rdaction de ce document a t acheve. Pour obtenir des exemples de dfinition de type ct serveur, voir Exemples de dfinition de type ct serveur dans Flash Builder.

Exemple dimplmentation dun service de base dans ColdFusion


Cet exemple illustre comment implmenter un service de base dans ColdFusion. Cet exemple est bas sur le code gnr par Flash Builder lors de laccs au tableau de la base de donnes. Voir Gnration dun exemple de service ColdFusion partir dun tableau de base de donnes la page 10. Cet exemple illustre la dfinition de type ct client. Voir Dfinition de type ct client et ct serveur la page 47. Pour obtenir des exemples de dfinition de type ct serveur, voir Flash Builder server-side type examples. Important : les exemples de services sont destins uniquement ltablissement dun prototype. Utilisez lexemple de service uniquement dans un environnement de dveloppement fiable. Avant de dployer ce service, assurez-vous daugmenter la protection et de restreindre laccs de faon adquate. Pour obtenir des informations sur la rdaction de services ColdFusion scuriss, voir la documentation ColdFusion About User Security.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 49


Implmentation de services pour des applications centres sur les donnes

<cfcomponent output="false"> <!--This sample service contains functions that illustrate typical service operations. This code is for prototyping only. Authenticate the user prior to allowing them to call these methods. You can find more information at http://www.adobe.com/go/cf9_usersecurity ---> <cffunction name="getAllemployees" output="false" access="remote" returntype="any" > <!--- Retrieve set of records and return them as a query or array. Add authorization or any logical checks for secure access to your data ---> <cfset var qAllItems=""> <cfquery name="qAllItems" datasource="employees"> SELECT * FROM employees </cfquery> <cfreturn qAllItems> </cffunction> <cffunction name="getemployees" output="false" access="remote" returntype="any" > <cfargument name="emp_no" type = "numeric" required="true" /> <!--- Retrieve a single record and return it as a query or array. Add authorization or any logical checks for secure access to your data ---> <cfset var qItem=""> <cfquery name="qItem" datasource="employees"> SELECT * FROM employees WHERE emp_no = <CFQUERYPARAM CFSQLTYPE="CF_SQL_INTEGER" VALUE="#ARGUMENTS.emp_no#"> </cfquery> <cfreturn qItem> </cffunction> </cfcomponent>

Points forts dEmployeeService :

Connexion la base de donnes des employs et accs au tableau des employs dans la base de donnes Renvoi dun tableau dobjets
Lors de la programmation laide de la structure Flex, les services ne renvoient que des donnes. Lapplication client gre le formatage et la prsentation des donnes. Ce modle diffre des applications ColdFusion CFM traditionnelles, qui retournent des donnes formates dans un modle HTML. Flex gre les jeux denregistrement renvoys comme tableau dobjets. Chaque ligne reprsente un enregistrement extrait de la base de donnes. Chaque colonne de lenregistrement de base de donnes devient une proprit de lobjet renvoy. Lapplication client peut ainsi accder aux donnes renvoyes comme objets avec un ensemble de proprits.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 50


Implmentation de services pour des applications centres sur les donnes

Configurez le type de donnes pour lobjet renvoy. Voir Dfinition de type ct client et ct serveur la page 47.

Fonction de gestion des erreurs du serveur ColdFusion


La gestion des erreurs fournie par ColdFusion est utile lors du dbogage dun service. Dans ColdFusion Administrator, modifiez les paramtres de dbogage et de journalisation afin de fournir des informations de dbogage plus performantes. Linterface Opration de test de Flash Builder affiche les informations renvoyes par le serveur ColdFusion. Pour plus dinformations sur les services de test, voir Dbogage de services distants la page 66.

Utilisation de cfqueryparam pour crer des requtes de base de donnes


cfqueryparam est une dfense contre les attaques par instructions dinjection SQL dans les appels au serveur. Pour plus dinformations, voir Enhancing security with cfqueryparam dans la documentation ColdFusion.

Authentification des utilisateurs avant de donner laccs aux fonctions dans ce service
Lexemple de code nillustre pas comment authentifier les utilisateurs. Voir la documentation ColdFusion About User Security.

Voir aussi
Configuration des types de donnes pour les oprations de service de donnes la page 28 Accs aux services ColdFusion la page 9 Gnration dun exemple de service ColdFusion partir dun tableau de base de donnes la page 10

Exemple dimplmentation de la pagination dans ColdFusion


Les outils Flash Builder permettent dimplmenter la pagination des donnes extraites dun service distant. La pagination est lextraction incrmentielle de jeux de donnes volumineux. Pour implmenter la pagination, Flash Builder ncessite des signatures de fonction spcifiques. Lexemple de code suivant illustre une mthode dimplmentation dun service ColdFusion pour des donnes pagines. Lexemple EmployeeServicePaged est bas sur le code gnr par Flash Builder lors de laccs au tableau de la base de donnes. Voir Gnration dun exemple de service ColdFusion partir dun tableau de base de donnes la page 10. Important : les exemples de services sont destins uniquement ltablissement dun prototype. Utilisez lexemple de service uniquement dans un environnement de dveloppement fiable. Lexemple permet toute personne disposant dun accs rseau votre serveur daccder aux donnes du tableau de la base de donnes et de les modifier ou supprimer. Avant de dployer ce service, assurez-vous daugmenter la protection et de restreindre laccs de faon adquate. Pour obtenir des informations sur la rdaction de services ColdFusion scuriss, voir la documentation ColdFusion About User Security.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 51


Implmentation de services pour des applications centres sur les donnes

<cfcomponent output="false"> <!--This sample service contains functions that illustrate typical service operations. This code is for prototyping only. Authenticate the user prior to allowing them to call these methods. You can find more information at http://www.adobe.com/go/cf9_usersecurity ---> <cffunction name="count" output="false" access="remote" returntype="numeric" > <!--Return the number of items in your table. Add authorization or any logical checks for secure access to your data ---> <cfquery name="qread" datasource="employees"> SELECT COUNT(emp_no) AS itemCount FROM employees </cfquery> <cfreturn qread.itemCount> </cffunction> <cffunction name="getemployees_paged" output="false" access="remote" returntype="any" > <cfargument name="startIndex" type="numeric" required="true" /> <cfargument name="numItems" type="numeric" required="true" /> <!---Return a page of numRows number of records as an array or query from the database for this startRow. Add authorization or any logical checks for secure access to your data ---> <!---The LIMIT keyword is valid for mysql database only. Modify it for your database ---> <cfset var qRead=""> <cfquery name="qRead" datasource="employees"> SELECT * FROM employees LIMIT #startIndex#, #numItems# </cfquery> <cfreturn qRead> </cffunction> </cfcomponent>

Le service EmployeeServicePaged renvoie des donnes non types. Utilisez les outils Flash Builder pour configurer le type de retour pour getEmployees_Paged(). Une fois le type de retour configur, activez la pagination sur lopration getEmployees_Paged().

Voir aussi
Exemples de services ColdFusion la page 48 Configuration des types de donnes pour les oprations de service de donnes la page 28 Gestion de laccs aux donnes partir du serveur la page 33

Exemple dimplmentation de la gestion de donnes dans ColdFusion


Les outils Flash Builder permettent dimplmenter la fonctionnalit de gestion des donnes pour les services distants. La gestion de donnes est la synchronisation des mises jour des donnes sur le serveur partir de lapplication client.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 52


Implmentation de services pour des applications centres sur les donnes

Pour implmenter la gestion de donnes, Flash Builder ncessite une combinaison de signatures de fonction spcifiques. Lexemple de code suivant illustre une mthode dimplmentation dun service ColdFusion pour la gestion de donnes. Lexemple EmployeeServiceDM est bas sur le code gnr par Flash Builder lors de laccs au tableau de la base de donnes. Voir Gnration dun exemple de service ColdFusion partir dun tableau de base de donnes la page 10. Important : les exemples de services sont destins uniquement ltablissement dun prototype. Utilisez lexemple de service uniquement dans un environnement de dveloppement fiable. Avant de dployer ce service, assurez-vous daugmenter la protection et de restreindre laccs de faon adquate. Pour obtenir des informations sur la rdaction de services ColdFusion scuriss, voir la documentation ColdFusion About User Security.
<cfcomponent output="false"> <!--This sample service contains functions that illustrate typical service operations. This code is for prototyping only. Authenticate the user prior to allowing them to call these methods. You can find more information at http://www.adobe.com/go/cf9_usersecurity ---> <cffunction name="getAllemployees" output="false" access="remote" returntype="any" > <!--- Auto-generated method Retrieve set of records and return them as a query or array. Add authorization or any logical checks for secure access to your data ---> <cfset var qAllItems=""> <cfquery name="qAllItems" datasource="employees"> SELECT * FROM employees </cfquery> <cfreturn qAllItems> </cffunction> <cffunction name="getemployees" output="false" access="remote" returntype="any" > <cfargument name="emp_no" type = "numeric" required="true" /> <!--Retrieve a single record and return it as a query or array. Add authorization or any logical checks for secure access to your data ---> <cfset var qItem=""> <cfquery name="qItem" datasource="employees"> SELECT * FROM employees WHERE emp_no = <CFQUERYPARAM CFSQLTYPE="CF_SQL_INTEGER" VALUE="#ARGUMENTS.emp_no#"> </cfquery> <cfreturn qItem> </cffunction> <cffunction name="createemployees" output="false" access="remote" returntype="any" > <cfargument name="item" required="true" />

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 53


Implmentation de services pour des applications centres sur les donnes

<!--Insert a new record in the database. Add authorization or any logical checks for secure access to your data ---> <cfquery name="createItem" datasource="employees" result="result"> INSERT INTO employees (birth_date, first_name, last_name, gender, hire_date) VALUES (<CFQUERYPARAM cfsqltype="CF_SQL_DATE" VALUE="#item.birth_date#">, <CFQUERYPARAM cfsqltype="CF_SQL_VARCHAR" VALUE="#item.first_name#">, <CFQUERYPARAM cfsqltype="CF_SQL_VARCHAR" VALUE="#item.last_name#">, <CFQUERYPARAM cfsqltype="CF_SQL_CHAR" VALUE="#item.gender#">, <CFQUERYPARAM cfsqltype="CF_SQL_DATE" VALUE="#item.hire_date#">) </cfquery> <!--- The GENERATED_KEY is valid for mysql database only, you can modify it for your database ---> <cfreturn result.GENERATED_KEY/> </cffunction> <cffunction name="updateemployees" output="false" access="remote" returntype="void" > <cfargument name="item" required="true" /> <!--- Update an existing record in the database. Add authorization or any logical checks for secure access to your data ---> <cfquery name="updateItem" datasource="employees"> UPDATE employees SET birth_date = <CFQUERYPARAM cfsqltype=CF_SQL_DATE VALUE="#item.birth_date#">, first_name = <CFQUERYPARAM cfsqltype=CF_SQL_VARCHAR VALUE="#item.first_name#">, last_name = <CFQUERYPARAM cfsqltype=CF_SQL_VARCHAR VALUE="#item.last_name#">, gender = <CFQUERYPARAM cfsqltype=CF_SQL_CHAR VALUE="#item.gender#">, hire_date = <CFQUERYPARAM cfsqltype=CF_SQL_DATE VALUE="#item.hire_date#">

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 54


Implmentation de services pour des applications centres sur les donnes

WHERE emp_no = <CFQUERYPARAM CFSQLTYPE="CF_SQL_INTEGER" VALUE="#item.emp_no#"> </cfquery> </cffunction> <cffunction name="deleteemployees" output="false" access="remote" returntype="void" > <cfargument name="emp_no" type="numeric" required="true" /> <!--- Delete a record in the database. Add authorization or any logical checks for secure access to your data ---> <cfquery name="delete" datasource="employees"> DELETE FROM employees WHERE emp_no = <CFQUERYPARAM CFSQLTYPE="CF_SQL_INTEGER" VALUE="#ARGUMENTS.emp_no#"> </cfquery> </cffunction> </cfcomponent>

Le service EmployeeServiceDM renvoie des donnes non types. Utilisez les outils Flash Builder pour configurer le type de retour des oprations getAllEmployeess() et getEmployees(). Utilisez Employ comme type de donnes personnalis renvoy par ces oprations. Une fois le type de retour configur, activez la gestion de donnes sur le type de donnes Employ.

Voir aussi
Exemples de services ColdFusion la page 48 Configuration des types de donnes pour les oprations de service de donnes la page 28 Gestion de laccs aux donnes partir du serveur la page 33

Gnration de CFC laide dAdobe ColdFusion Builder


Adobe ColdFusion Builder fournit la fonctionnalit Adobe CFC Generator. Utilisez CFC Generator pour gnrer un CFC ORM ou un CFC traditionnel partir dun ensemble de tables de bases de donnes. Le CFC gnr par ColdFusion Builder peut ensuite tre utilis en tant que service de donnes dans Flash Builder. Adobe CFC Generator cre des services qui implmentent la dfinition de type ct serveur. Pour plus dinformations, voir Using Adobe CFC Generator. Remarque : la fonctionnalit de mappage objet/relationnel ColdFusion (ORM (object-relational mapping) utilise un modle dobjets afin de dfinir une stratgie de mappage pour le stockage et la rcupration de donnes partir dune base de donnes relationnelle). Voir ColdFusion ORM.

Implmentation de services PHP


Lors de limplmentation de services dans PHP, vous implmentez gnralement les services en tant que classes PHP. Il nest pas ncessaire que les classes dans PHP soient des classes orientes objet. Chaque classe peut plutt constituer une bibliothque de fonctions fournissant les oprations de service.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 55


Implmentation de services pour des applications centres sur les donnes

Vous pouvez crer des services PHP dans nimporte quel environnement ddition (DreamWeaver ou Zend Studio, par exemple). Flash Builder ne fournit pas dditeur spcifique aux fichiers PHP. Louverture dun fichier PHP dans Flash Builder conduit toutefois au lancement de lapplication du systme associe aux fichiers PHP. Pour plus de commodit, Flash Builder fournit galement un diteur de texte brut que vous pouvez utiliser pour diter les fichiers PHP.

Utilisation dAMF pour laccs aux services implments dans PHP


Les services de donnes PHP sont accessibles en utilisant le format Action Message Format (AMF). AMF assure lchange de messages entre un client Flash et le serveur Web. Flash Builder utilise la structure Zend AMF pour implmenter lchange de messages AMF pour les services de donnes PHP. Pour plus dinformations sur Zend AMF, voir Guide de rfrence du programmeur Zend Framework. Pour plus dinformations sur linstallation de Zend Framework, voir Installation de Zend Framework la page 21. Remarque : lutilisation de la structure Zend AMF par Flash Builder ne signifie pas que vous devez obligatoirement utiliser les composants Zend pour la cration de services PHP. Malgr le bon fonctionnement des composants Zend avec Flash Builder, vous pouvez utiliser tout autre environnement de dveloppement pour la cration de services.

Exemples de services PHP


Vous pouvez implmenter un service PHP de base en crant un fichier de classe PHP qui contient les fonctions des oprations de service. Lexemple suivant illustre un EmployeeService qui implmente deux fonctions :

getAllIEmployees()

Extrait tous les enregistrements demploys de la base de donnes.

getEmployeeByID($itemID)

Renvoie un seul enregistrement demploy. Cet exemple illustre la dfinition de type ct client. Le service renvoie des donnes non types. Flash Builder utilise la dfinition de type ct client pour introspecter les donnes renvoyes et dfinir le type de donnes. Les exemples suivants illustrent comment implmenter les services pour la pagination et la gestion de donnes. Vous pouvez galement utiliser Flash Builder pour accder des services implmentant la dfinition de type ct serveur. Voir Dfinition de type ct client et ct serveur la page 47. Aucun exemple de dfinition de type ct serveur ntait disponible lorsque la rdaction de ce document a t acheve. Pour obtenir des exemples de dfinition de type ct serveur, voir Exemples de dfinition de type ct serveur dans Flash Builder.

Exemple de service de base PHP


Cet exemple indique comment implmenter un service de base dans PHP. Cet exemple est bas sur le code gnr par Flash Builder lors de laccs au tableau de la base de donnes. Voir Gnration dun exemple de service PHP partir dun tableau de base de donnes la page 12. Cet exemple illustre la dfinition de type ct client. Voir Dfinition de type ct client et ct serveur la page 47. Important : les exemples de services sont destins uniquement ltablissement dun prototype. Utilisez lexemple de service uniquement dans un environnement de dveloppement fiable. Avant de dployer ce service, assurez-vous daugmenter la protection et de restreindre laccs de faon adquate. Pour plus dinformations sur la rdaction de services scuriss, voir Dploiement des applications accdant aux services de donnes la page 44.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 56


Implmentation de services pour des applications centres sur les donnes

<?php /** * This sample service contains functions that illustrate typical service operations. * This code is for prototyping only. * * Authenticate users before allowing them to call these methods. */ class EmployeeService { var var var var var var $username = "root"; $password = "root"; $server = "localhost"; $port = "3306"; $databasename = "employees"; $tablename = "employees";

var $connection; /** * The constructor initializes the connection to database. Everytime a request is * received by Zend AMF, an instance of the service class is created and then the * requested method is called. */ public function __construct() { $this->connection = mysqli_connect( $this->server, $this->username, $this->password, $this->databasename, $this->port ); $this->throwExceptionOnError($this->connection); } /** * Returns all the rows from the table. * * Add authroization or any logical checks for secure access to your data * * @return array */ public function getAllEmployees() { $stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename"); $this->throwExceptionOnError(); mysqli_stmt_execute($stmt); $this->throwExceptionOnError(); $rows = array(); mysqli_stmt_bind_result($stmt, $row->emp_no, $row->birth_date, $row->first_name, $row->last_name, $row->gender, $row->hire_date); while (mysqli_stmt_fetch($stmt)) { $rows[] = $row;

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 57


Implmentation de services pour des applications centres sur les donnes

$row = new stdClass(); mysqli_stmt_bind_result($stmt, $row->emp_no, $row->birth_date, $row->first_name, $row->last_name, $row->gender, $row->hire_date); } mysqli_stmt_free_result($stmt); mysqli_close($this->connection); return $rows; } /** * Returns the item corresponding to the value specified for the primary key. * * Add authroization or any logical checks for secure access to your data * * * @return stdClass */ public function getEmployeesByID($itemID) { $stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename where emp_no=?"); $this->throwExceptionOnError(); mysqli_bind_param($stmt, 'i', $itemID); $this->throwExceptionOnError(); mysqli_stmt_execute($stmt); $this->throwExceptionOnError(); mysqli_stmt_bind_result($stmt, $row->emp_no, $row->birth_date, $row->first_name, $row->last_name, $row->gender, $row->hire_date); if(mysqli_stmt_fetch($stmt)) { return $row; } else { return null; } } /** * Utitity function to throw an exception if an error occurs * while running a mysql command. */ private function throwExceptionOnError($link = null) { if($link == null) { $link = $this->connection; } if(mysqli_error($link)) { $msg = mysqli_errno($link) . ": " . mysqli_error($link); throw new Exception('MySQL Error - '. $msg); } } }

?>

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 58


Implmentation de services pour des applications centres sur les donnes

Points forts dEmployeeService :

Il se connecte la base de donnes des employs, laquelle il accde via le port 3306 de lhte local. Il accde au
tableau des employs dans la base de donnes.

Il fournit des variables de classe pour la connexion au service et laccs aux tableaux dans la base de donnes.
Vous pouvez utiliser ces variables dans des fonctions de la classe. Remplacez les valeurs de ces variables avec des valeurs de votre systme.

Il renvoie le tableau dobjets lapplication client.


Lors de la programmation laide de la structure Flex, les services ne renvoient que des donnes. Lapplication client gre le formatage et la prsentation des donnes. Ce modle diffre des services PHP traditionnels, qui retournent des donnes formates dans un modle HTML.

Il fournit la fonction getEmployeesByID($itemID) qui lie le paramtre dentre aux types de donnes.
Le nombre de variables et la longueur des types de chanes doivent correspondre aux paramtres dans linstruction. Le composant ? de linstruction de prparation est un espace rserv pour le paramtre. mysqli reconnat les types suivants :

integer (i) double (d) string (s) blob (b) Il lie les rsultats, crant ainsi un tableau dobjets ($row[]).
Flex gre les jeux denregistrement en tant que tableau dobjets. Chaque objet reprsente un enregistrement extrait de la base de donnes. Chaque colonne de lenregistrement de base de donnes devient une proprit de lobjet renvoy. Lapplication client peut ainsi accder aux donnes renvoyes comme objets avec un ensemble de proprits. Le serveur ne dfinissant pas le type des donnes renvoyes, vous devez configurer le type de donnes de lobjet renvoy. Voir Dfinition de type ct client et ct serveur la page 47.

Il fournit une fonction constructeur pour linitialisation de la connexion la base de donnes. Il utilise les instructions de prparation mysqli pour la cration de requtes de base de donnes.
Lutilisation des instructions de prparation est une dfense contre les attaques par instructions dinjection SQL dans les appels au serveur. Linstruction est excute sur le serveur uniquement aprs sa prparation.

Il authentifie les utilisateurs avant de donner laccs aux fonctions dans ce service.
Lexemple de code nillustre pas comment authentifier les utilisateurs. Voir la documentation ColdFusion About User Security. Les principes de scurit sur lauthentification et lautorisation des utilisateurs dans cette documentation ColdFusion sappliquent aux services PHP.

Il renvoie une exception sur lerreur.


Les informations que vous fournissez dans les exceptions sont utiles lors du dbogage de limplmentation du service. Linterface Opration de test de Flash Builder affiche les informations renvoyes par les exceptions. Pour plus dinformations sur les services de test, voir Dbogage de services distants la page 66.

Le nom du fichier EmployeeService.php correspond au nom de la classe PHP du service.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 59


Implmentation de services pour des applications centres sur les donnes

Si les noms du fichier et de la classe ne correspondent pas, des erreurs se produisent lorsque vous accdez au service.

Voir aussi
Configuration des types de donnes pour les oprations de service de donnes la page 28 Accs aux services PHP la page 11 Gnration dun exemple de service PHP partir dun tableau de base de donnes la page 12

Exemple dimplmentation de la pagination dans PHP


Les outils Flash Builder permettent dimplmenter la pagination des donnes extraites dun service distant. La pagination est lextraction incrmentielle de jeux de donnes volumineux. Pour implmenter la pagination, Flash Builder ncessite des signatures de fonction spcifiques. Lexemple de code suivant illustre une mthode dimplmentation dun service PHP pour des donnes pagines. Cet exemple est bas sur le code gnr par Flash Builder lors de laccs au tableau de la base de donnes. Voir Gnration dun exemple de service PHP partir dun tableau de base de donnes la page 12. Important : les exemples de services sont destins uniquement ltablissement dun prototype. Utilisez lexemple de service uniquement dans un environnement de dveloppement fiable. Avant de dployer ce service, assurez-vous daugmenter la protection et de restreindre laccs de faon adquate. Pour plus dinformations sur la rdaction de services scuriss, voir Dploiement des applications accdant aux services de donnes la page 44.
<?php /** * This sample service contains functions that illustrate typical service operations. * This code is for prototyping only. * * Authenticate the user prior to allowing them to call these methods. * */ class EmployeeServicePaged { var var var var var var $username = "root"; $password = "root"; $server = "localhost"; $port = "3306"; $databasename = "employees"; $tablename = "employees";

var $connection; /** * The constructor initializes the connection to database. Everytime a request is * received by Zend AMF, an instance of the service class is created and then the * requested method is invoked. */ public function __construct() { $this->connection = mysqli_connect( $this->server, $this->username, $this->password, $this->databasename, $this->port

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 60


Implmentation de services pour des applications centres sur les donnes

); $this->throwExceptionOnError($this->connection); }

/** * Returns the number of rows in the table. * * Add authroization or any logical checks for secure access to your data * * */ public function count() { $stmt = mysqli_prepare($this->connection, "SELECT COUNT(*) AS COUNT FROM $this->tablename"); $this->throwExceptionOnError(); mysqli_stmt_execute($stmt); $this->throwExceptionOnError(); mysqli_stmt_bind_result($stmt, $rec_count); $this->throwExceptionOnError(); mysqli_stmt_fetch($stmt); $this->throwExceptionOnError(); mysqli_stmt_free_result($stmt); mysqli_close($this->connection); return $rec_count; }

/** * Returns $numItems rows starting from the $startIndex row from the * table. * * Add authroization or any logical checks for secure access to your data * * @return array */ public function getEmployees_paged($startIndex, $numItems) { $stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename LIMIT ?, ?"); $this->throwExceptionOnError(); mysqli_bind_param($stmt, 'ii', $startIndex, $numItems); mysqli_stmt_execute($stmt); $this->throwExceptionOnError(); $rows = array(); mysqli_stmt_bind_result($stmt, $row->emp_no, $row->birth_date, $row->first_name, $row->last_name, $row->gender, $row->hire_date);

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 61


Implmentation de services pour des applications centres sur les donnes

while (mysqli_stmt_fetch($stmt)) { $rows[] = $row; $row = new stdClass(); mysqli_stmt_bind_result($stmt, $row->emp_no, $row->birth_date, $row->first_name, $row->last_name, $row->gender, $row->hire_date); } mysqli_stmt_free_result($stmt); mysqli_close($this->connection); return $rows; }

/** * Utitity function to throw an exception if an error occurs * while running a mysql command. */ private function throwExceptionOnError($link = null) { if($link == null) { $link = $this->connection; } if(mysqli_error($link)) { $msg = mysqli_errno($link) . ": " . mysqli_error($link); throw new Exception('MySQL Error - '. $msg); } } } ?>

Le service EmployeeServicePaged renvoie des donnes non types. Utilisez les outils Flash Builder pour configurer le type de retour pour getEmployees_Paged(). Une fois le type de retour configur, activez la pagination sur lopration getEmployees_Paged().

Voir aussi
Exemples de services PHP la page 55 Configuration des types de donnes pour les oprations de service de donnes la page 28 Gestion de laccs aux donnes partir du serveur la page 33

Exemple dimplmentation de la gestion de donnes dans PHP


Les outils Flash Builder permettent dimplmenter la fonctionnalit de gestion des donnes pour les services distants. La gestion de donnes est la synchronisation des mises jour des donnes sur le serveur partir de lapplication client. Pour implmenter la gestion de donnes, Flash Builder ncessite une combinaison de signatures de fonction spcifiques. Lexemple de code suivant illustre une mthode dimplmentation dun service PHP pour la gestion de donnes. Cet exemple est bas sur le code gnr par Flash Builder lors de laccs au tableau de la base de donnes. Voir Gnration dun exemple de service PHP partir dun tableau de base de donnes la page 12.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 62


Implmentation de services pour des applications centres sur les donnes

Important : les exemples de services sont destins uniquement ltablissement dun prototype. Utilisez lexemple de service uniquement dans un environnement de dveloppement fiable. Avant de dployer ce service, assurez-vous daugmenter la protection et de restreindre laccs de faon adquate. Pour plus dinformations sur la rdaction de services scuriss, voir Dploiement des applications accdant aux services de donnes la page 44.
<?php /** * This sample service contains functions that illustrate typical service operations. * This code is for prototyping only. * * Authenticate the user prior to allowing them to call these methods. */ class EmployeeServiceDM { var var var var var var $username = "root"; $password = "root"; $server = "localhost"; $port = "3306"; $databasename = "employees"; $tablename = "employees";

var $connection; /** * The constructor initializes the connection to database. Everytime a request is * received by Zend AMF, an instance of the service class is created and then the * requested method is invoked. */ public function __construct() { $this->connection = mysqli_connect( $this->server, $this->username, $this->password, $this->databasename, $this->port ); $this->throwExceptionOnError($this->connection); } /** * Returns all the rows from the table. * * Add authroization or any logical checks for secure access to your data * * @return array */ public function getAllEmployees() { $stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename"); $this->throwExceptionOnError(); mysqli_stmt_execute($stmt); $this->throwExceptionOnError();

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 63


Implmentation de services pour des applications centres sur les donnes

$rows = array(); mysqli_stmt_bind_result($stmt, $row->emp_no, $row->birth_date, $row->first_name, $row->last_name, $row->gender, $row->hire_date); while (mysqli_stmt_fetch($stmt)) { $rows[] = $row; $row = new stdClass(); mysqli_stmt_bind_result($stmt, $row->emp_no, $row->birth_date, $row->first_name, $row->last_name, $row->gender, $row->hire_date); } mysqli_stmt_free_result($stmt); mysqli_close($this->connection); return $rows; } /** * Returns the item corresponding to the value specified for the primary key. * * Add authroization or any logical checks for secure access to your data * * * @return stdClass */ public function getEmployeesByID($itemID) { $stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename where emp_no=?"); $this->throwExceptionOnError(); mysqli_bind_param($stmt, 'i', $itemID); $this->throwExceptionOnError(); mysqli_stmt_execute($stmt); $this->throwExceptionOnError(); mysqli_stmt_bind_result($stmt, $row->emp_no, $row->birth_date, $row->first_name, $row->last_name, $row->gender, $row->hire_date); if(mysqli_stmt_fetch($stmt)) { return $row; } else { return null; } } /** * Returns the item corresponding to the value specified for the primary key. * * Add authroization or any logical checks for secure access to your data * *

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 64


Implmentation de services pour des applications centres sur les donnes

* @return stdClass */ public function createEmployees($item) { $stmt = mysqli_prepare($this->connection, "INSERT INTO $this->tablename (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (?, ?, ?, ?, ?, ?)"); $this->throwExceptionOnError(); mysqli_bind_param($stmt, 'isssss', $item->emp_no, $item->birth_date $item->first_name, $item->last_name, $item->gender, $item->hire_date); $this->throwExceptionOnError(); mysqli_stmt_execute($stmt); $this->throwExceptionOnError(); $autoid = mysqli_stmt_insert_id($stmt); mysqli_stmt_free_result($stmt); mysqli_close($this->connection); return $autoid; } /** * Updates the passed item in the table. * * Add authroization or any logical checks for secure access to your data * * @param stdClass $item * @return void */ public function updateEmployees($item) { $stmt = mysqli_prepare($this->connection, "UPDATE $this->tablename SET emp_no=?, birth_date=?, first_name=?, last_name=?, gender=?, hire_date=? WHERE emp_no=?"); $this->throwExceptionOnError(); mysqli_bind_param($stmt, 'isssssi', $item->emp_no, $item->birth_date, $item->first_name, $item->last_name, $item->gender, $item->hire_date, $item->emp_no); $this->throwExceptionOnError(); mysqli_stmt_execute($stmt); $this->throwExceptionOnError(); mysqli_stmt_free_result($stmt); mysqli_close($this->connection); } /** * Deletes the item corresponding to the passed primary key value from * the table. *

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 65


Implmentation de services pour des applications centres sur les donnes

* Add authroization or any logical checks for secure access to your data * * * @return void */ public function deleteEmployees($itemID) { $stmt = mysqli_prepare($this->connection, "DELETE FROM $this->tablename WHERE emp_no = ?"); $this->throwExceptionOnError(); mysqli_bind_param($stmt, 'i', $itemID); mysqli_stmt_execute($stmt); $this->throwExceptionOnError(); mysqli_stmt_free_result($stmt); mysqli_close($this->connection); } /** * Utitity function to throw an exception if an error occurs * while running a mysql command. */ private function throwExceptionOnError($link = null) { if($link == null) { $link = $this->connection; } if(mysqli_error($link)) { $msg = mysqli_errno($link) . ": " . mysqli_error($link); throw new Exception('MySQL Error - '. $msg); } } } ?>

Le service EmployeeServiceDM renvoie des donnes non types. Utilisez les outils Flash Builder pour configurer le type de retour des oprations getAllEmployeess() et getEmployeesByID(). Utilisez Employ comme type de donnes personnalis renvoy par ces oprations. Une fois le type de retour configur, activez la gestion de donnes sur le type de donnes Employ.

Voir aussi
Exemples de services PHP la page 55 Configuration des types de donnes pour les oprations de service de donnes la page 28 Gestion de laccs aux donnes partir du serveur la page 33

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 66


Implmentation de services pour des applications centres sur les donnes

Dbogage de services distants


Le dbogage des applications accdant aux services distants peut se faire de diffrentes manires.

Vue Opration de test de Flash Builder


La vue Opration de test de Flash Builder vous permet dappeler des oprations de service et dafficher les donnes renvoyes. Elle affiche tous les messages derreur intercepts par le service.

Scripts ct serveur
Pour le dbogage supplmentaire des services, vous pouvez crire des scripts qui testent le code du serveur et des informations de flux de sortie dans les fichiers journaux.

Moniteur de rseau Flash Builder


Aprs avoir cr une application accdant un service dans Flash Builder, utilisez le Moniteur de rseau pour visionner les donnes changes entre le serveur et le client.

Vue Opration de test de Flash Builder


Utilisez la vue Opration de test de Flash Builder afin dappeler les oprations dun service et afficher les rsultats de lopration. Les rsultats incluent tout message derreur renvoy par un service. Vous pouvez utiliser la vue Opration de test afin dafficher les donnes renvoyes par les oprations sur les services que vous rdigez, les services disponibles partir de HTTP ou les services Web.

Test dune opration de service


Cette procdure part du principe que vous avez rdig un service que vous testez ou que vous pouvez accder un service HTTP ou un service Web.
1 Dans la vue Donnes/Services de Flash Builder, accdez lopration de service que vous souhaitez tester. 2 Dans le menu contextuel de lopration, slectionnez loption Opration de test. 3 (Facultatif) Dans la vue Opration de test, slectionnez Authentification requise afin de saisir les informations de

connexion au service.
4 Si lopration accepte les paramtres, cliquez sur le champ Entrer une valeur afin de fournir une valeur pour le

paramtre. Si le paramtre ncessite un type complexe, cliquez sur les points de suspension dans le champ Entrer une valeur afin douvrir un diteur acceptant la notation JSON. Spcifiez la valeur pour le paramtre laide de la notation JSON.
5 Cliquez sur Tester afin dafficher le rsultat de lopration.

Scripts de test du code serveur


Utilisez des scripts de test pour afficher et dboguer le code serveur avant dessayer de vous connecter au serveur dans Flash Builder. Les scripts de test prsentent les avantages suivants :

Vous pouvez visionner les rsultats des tests dans un navigateur Web.
Rafrachissez laffichage du navigateur pour visionner le rsultat des modifications que vous apportez au code.

Vous pouvez envoyer un cho ou une impression des rsultats au flux de sortie, ce quil vous est impossible de faire
directement partir dAMF.

La mise en forme des erreurs affiches est conviviale. Les erreurs sont souvent plus compltes que celles saisies avec AMF.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 67


Implmentation de services pour des applications centres sur les donnes

Scripts ColdFusion
Utilisez le script suivant (tester.cfm) pour vider lappel dune fonction :
<!--- tester.cfm ---> <cfobject component="EmployeeService" name="o"/> <cfdump var="#o.getAllItems()#">

Spcifiez dans tester2.cfm la mthode et les arguments appeler dans lURL.


<!--- tester2.cfm ---> <cfdump var="#url#"> <cfinvoke component="#url.cfc#" method="#url.method#" argumentCollection="#url#" returnVariable="r"> <p>Result: <cfif isDefined("r")> <cfdump var="#r#"> <cfelse> (no result) </cfif>

Vous pouvez par exemple appeler la mthode getItemID dans EmployeeService en utilisant lURL suivante :
http://localhost/tester2.cfm?EmployeeService&method=getItemId&id=12

Le script tester3.cfm enregistre dans un journal les appels doprations et vide les arguments entrants en utilisant cfdump.
<!--- tester3.cfm ---> <cfsavecontent variable="d"><cfdump var="#arguments#"></cfsavecontent> <cffile action="append" file="#getDirectoryFromPath(getCurrentTemplatePath())#MyServiceLog.htm" output="<p>#now()# operationName #d#">

Scripts PHP Utilisez le script suivant (tester.php) pour vider lappel dune fonction :
<pre> <?php include('MyService.php'); $o = new MyService(); var_dump($o->getAllItems()); ?> </pre>

Ajoutez le code suivant au service PHP afin de consigner les messages au cours de lexcution du code :
$message = 'updateItem: '.$item["id"]; $log_file = '/Users/me/Desktop/myservice.log'; error_log(date('d/m/Y H:i:s').' '.$message.PHP_EOL, 3, $log_file);

Ajoutez le code suivant au service PHP afin dactiver le vidage dans un fichier journal :

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 68


Implmentation de services pour des applications centres sur les donnes

ob_start(); var_dump($item); $result = ob_get_contents(); ob_end_clean(); $message = 'updateItem: '.$result; $log_file = '/Users/me/Desktop/myservice.log'; error_log(date('d/m/Y H:i:s').' '.$message.PHP_EOL, 3, $log_file);

Moniteur de rseau
Le Moniteur de rseau est accessible dans la perspective Dbogage Flex de Flash Builder. Il doit tre activ avant de pouvoir tre utilis pour surveiller les donnes. Pour plus dinformations sur lactivation et lutilisation du Moniteur de rseau, voir Surveillance des applications accdant aux services de donnes.

Exemple dimplmentation de services partir de plusieurs sources


En rgle gnrale, les applications accdent aux donnes de sources diffrentes, affichant le rsultat de lassociation de donnes dans une application. Cet exemple illustre comment associer les donnes des trois tableaux suivants dans une base de donnes demploys :

Dpartements
Chaque enregistrement contient les champs suivants : numro et nom du dpartement.

Dept_emp
Chaque enregistrement contient les champs suivants : emp_no, dept_no, from_date, to_date.

Employs
Chaque enregistrement contient les champs suivants : emp_no, birth_date, first_name, last_name, gender, hire_date. Lexemple dapplication dispose de deux composants DataGrid, un pour les dpartements et un pour les employs. La liste Dpartements rpertorie tous les dpartements. Lorsque vous slectionnez un dpartement, le composant DataGrid Employs rpertorie tous les employs de ce dpartement. La slection dun employ dans le composant DataGrid Employs renseigne un formulaire vous permettant de mettre jour lenregistrement de lemploy slectionn.

Cration des services


Pour cet exemple, crez un service unique. Le service contient les oprations suivantes :

getAllDepartments() getEmployeesByDept()
getEmployeeByID() updateEmployee()

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 69


Implmentation de services pour des applications centres sur les donnes

EmployeeService (PHP)
EmployeeService.php implmente un service contenant une seule fonction. GetEmployeesByID() accepte lID de dpartement en tant quargument et renvoie tous les employs du dpartement donn. La fonction renvoie galement les dates auxquelles lemploy a rejoint et quitt le dpartement. GetEmployeesByDept() excute la requte SQL suivante : SELECT employees.emp_no, employees.birth_date, employees.first_name, employees.last_name, employees.gender, employees.hire_date, dept_emp.from_date, dept_emp.to_date FROM employees, dept_emp WHERE dept_emp.emp_no = employees.emp_no and dept_emp.dept_no = departments.dept_no

Important : les exemples de services sont destins uniquement ltablissement dun prototype. Utilisez lexemple de service uniquement dans un environnement de dveloppement fiable. Avant de dployer ce service, assurez-vous daugmenter la protection et de restreindre laccs de faon adquate. Pour plus dinformations sur la rdaction de services scuriss, voir Dploiement des applications accdant aux services de donnes la page 44.
<?php /** * EmployeeService.php * * This sample service contains functions that illustrate typical service operations. * Use these functions as a starting point for creating your own service implementation. * * This code is for prototyping only. * * Authenticate the user before allowing them to call these methods. */ class EmployeeService { var var var var var var $username = "admin2"; $password = "Cosmo49"; $server = "localhost"; $port = "3306"; $databasename = "employees"; $tablename = "employees";

var $connection; /** * The constructor initializes the connection to database. Everytime a request is * received by Zend AMF, an instance of the service class is created and then the * requested method is called. */ public function __construct() { $this->connection = mysqli_connect( $this->server, $this->username,

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 70


Implmentation de services pour des applications centres sur les donnes

$this->password, $this->databasename, $this->port ); $this->throwExceptionOnError($this->connection); }

/** * Returns all the rows from the table. * * Add authroization or any logical checks for secure access to your data * * @return array */ public function getAllDepartments() { $stmt = mysqli_prepare($this->connection, "SELECT * FROM departments"); $this->throwExceptionOnError(); mysqli_stmt_execute($stmt); $this->throwExceptionOnError(); $rows = array(); mysqli_stmt_bind_result($stmt, $row->dept_no, $row->dept_name); while (mysqli_stmt_fetch($stmt)) { $rows[] = $row; $row = new stdClass(); mysqli_stmt_bind_result($stmt, $row->dept_no, $row->dept_name); } mysqli_stmt_free_result($stmt); mysqli_close($this->connection); return $rows; } public function getEmployeesByDept($deptId) { $stmt = mysqli_prepare($this->connection, "select employees.emp_no, employees.first_name, employees.last_name, employees.gender, dept_emp.dept_no from employees, dept_emp where dept_emp.emp_no = employees.emp_no and dept_emp.dept_no = ? limit 0,30;"); $this->throwExceptionOnError(); mysqli_bind_param($stmt, 's', $deptId); $this->throwExceptionOnError(); mysqli_stmt_execute($stmt); $this->throwExceptionOnError();

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 71


Implmentation de services pour des applications centres sur les donnes

$rows = array(); mysqli_stmt_bind_result($stmt, $row->emp_no, $row->first_name, $row->last_name, $row->gender, $row->dept_no); while (mysqli_stmt_fetch($stmt)) { $rows[] = $row; $row = new stdClass(); mysqli_stmt_bind_result($stmt, $row->emp_no, $row->first_name, $row->last_name, $row->gender, $row->dept_no); } mysqli_stmt_free_result($stmt); mysqli_close($this->connection); return $rows; } /** * Returns the item corresponding to the value specified for the primary key. * * Add authroization or any logical checks for secure access to your data * * * @return stdClass */ public function getEmployeesByID($itemID) { $stmt = mysqli_prepare($this->connection, "SELECT * FROM employees where emp_no=?"); $this->throwExceptionOnError(); mysqli_bind_param($stmt, 'i', $itemID); $this->throwExceptionOnError(); mysqli_stmt_execute($stmt); $this->throwExceptionOnError(); mysqli_stmt_bind_result($stmt, $row->emp_no, $row->birth_date, $row->first_name, $row->last_name, $row->gender, $row->hire_date); if(mysqli_stmt_fetch($stmt)) { return $row; } else { return null; } }

/** * Updates the passed item in the table. * * Add authroization or any logical checks for secure access to your data *

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 72


Implmentation de services pour des applications centres sur les donnes

* @param stdClass $item * @return void */ public function updateEmployees($item) { $stmt = mysqli_prepare($this->connection, "UPDATE employees SET emp_no=?, birth_date=?, first_name=?, last_name=?, gender=?, hire_date=? WHERE emp_no=?"); $this->throwExceptionOnError(); mysqli_bind_param($stmt, 'isssssi', $item->emp_no, $item->birth_date, $item->first_name, $item->last_name, $item->gender, $item->hire_date, $item->emp_no); $this->throwExceptionOnError(); mysqli_stmt_execute($stmt); $this->throwExceptionOnError(); mysqli_stmt_free_result($stmt); mysqli_close($this->connection); }

/** * Utitity function to throw an exception if an error occurs * while running a mysql command. */ private function throwExceptionOnError($link = null) { if($link == null) { $link = $this->connection; } if(mysqli_error($link)) { $msg = mysqli_errno($link) . ": " . mysqli_error($link); throw new Exception('MySQL Error - '. $msg); } } } >?>

EmployeeService (ColdFusion)
EmployeeService.cfc implmente un service contenant une seule fonction. GetEmployeesByID() accepte lID de

dpartement en tant quargument et renvoie tous les employs du dpartement donn. La fonction renvoie galement les dates auxquelles lemploy a rejoint et quitt le dpartement. GetEmployeesByDept() excute la requte SQL suivante :

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 73


Implmentation de services pour des applications centres sur les donnes

SELECT employees.emp_no, employees.birth_date, employees.first_name, employees.last_name, employees.gender, employees.hire_date, dept_emp.from_date, dept_emp.to_date FROM employees, dept_emp WHERE dept_emp.emp_no = employees.emp_no and dept_emp.dept_no = departments.dept_no

Important : les exemples de services sont destins uniquement ltablissement dun prototype. Utilisez lexemple de service uniquement dans un environnement de dveloppement fiable. Avant de dployer ce service, assurez-vous daugmenter la protection et de restreindre laccs de faon adquate. Pour obtenir des informations sur la rdaction de services ColdFusion scuriss, voir la documentation ColdFusion About User Security.
<cfcomponent output="false"> <!--This sample service contains functions that illustrate typical service operations. Use these functions as a starting point for creating your own service implementation. This code is for prototyping only. Authenticate the user before allowing them to call these methods. You can find more information at http://www.adobe.com/go/cf9_usersecurity ---> <cffunction name="getEmployeesByDept" output="false" access="remote" <cfargument name="dept_no" type="string" required="true" /> <cfset var qItem=""> <cfquery name="qItem" datasource="employees"> SELECT employees.emp_no, employees.birth_date, employees.first_name, employees.last_name, employees.gender, employees.hire_date, dept_emp.from_date, dept_emp.to_date FROM employees, dept_emp WHERE dept_emp.emp_no = employees.emp_no and dept_emp.dept_no = <CFQUERYPARAM CFSQLTYPE="CF_SQL_VARCHAR" VALUE="#ARGUMENTS.dept_no#"> </cfquery> <cfreturn qItem> </cffunction> </cfcomponent>?> returntype="any" >

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 74


Implmentation de services pour des applications centres sur les donnes

Importation de services dans un projet de serveur


1 Dans Flash Builder, crez un projet Flex nomm Associations.

(PHP) Lors de la cration du projet, spcifiez PHP comme type de serveurs dapplications. (PHP) Aprs avoir cr le projet, Flash Builder cre un dossier de sortie dans le dossier de racine Web de votre configuration PHP. Le nom par dfaut du projet PHP_Associations est PHP_Associations-debug. (ColdFusion) Lors de la cration du projet, spcifiez ColdFusion comme type de serveurs dapplications. Slectionnez ensuite ColdFusion Flash Remoting.
2 (PHP) Dans PHP_Associations-debug, crez un dossier nomm services. Copiez EmployeeService.php dans

le dossier services.
3 (ColdFusion) Crez un dossier nomm Associations dans la racine Web de votre configuration ColdFusion.

Copiez EmployeeService.chc dans le dossier Associations.


4 Importez EmployeeService dans le projet.

Assurez-vous que PHP_Associations est le projet actif dans Flash Builder. Slectionnez Donnes > Connexion PHP. Pour spcifier la classe PHP, accdez au dossier services et slectionnez EmployeeService.php. Cliquez sur Terminer. Pour plus dinformations, voir Connexion des services de donnes PHP la page 11.
5 Configurez le type de retour des oprations dans EmployeeService.

DepartmentService
Dans le menu contextuel de lopration getAllDepartments, slectionnez Configurer le type de retour. Cliquez sur Suivant pour lancer la dtection automatique du type de retour. Spcifiez Dpartement pour le type de retour personnalis. Cliquez sur Terminer.

EmployeeService
Dans le menu contextuel de lopration getEmployeesByDept(), slectionnez Configurer le type de retour. Cliquez sur Suivant pour lancer la dtection automatique du type de retour. Saisissez la valeur d007 pour le paramtre. Cliquez sur Suivant. Spcifiez Employ comme type de retour personnalis. Cliquez sur Terminer. Pour plus dinformations, voir Configuration des types de donnes pour les oprations de service de donnes la page 28.

Cration de linterface utilisateur et liaison des donnes renvoyes aux composants DataGrid
1 En mode Cration de lditeur MXML, ajoutez deux composants DataGrid la zone de cration.

Le composant DataGrid se trouve dans le dossier Contrles de la vue Composants. Faites glisser deux composants DataGrid vers la zone de cration. Spcifiez deptDG pour le DataGrid Dpartements. Spcifiez empDeptDG pour les ID des composants DataGrid Employs.
2 Dans la vue Donnes/Services, faites glisser lopration getEmployeesByDept() sur le composant DataGrid

Employs.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 75


Implmentation de services pour des applications centres sur les donnes

Lditeur passe en mode Source et met en vidence le paramtre getEmployeesByDept(). Veillez supprimer le gestionnaire dvnement gnr. Accdez au composant DataGrid Employs. Supprimez la rfrence lattribut du gestionnaire creationComplete pour le DataGrid empDeptDG. Une fois supprime la rfrence au gestionnaire dvnement, la premire ligne de code du DataGrid ressemble ce qui suit :
<mx:DataGrid x="361" y="27" id="empDeptDG" dataProvider="{getEmployeesByDeptResult.lastResult}">

Remarque : le gestionnaire creationComplete nest pas requis pour le composant DataGrid Employs. Ce dernier est renseign lorsquun dpartement est slectionn dans le composant DataGrid Dpartements.
3 Passez en mode Cration de lditeur. Dans la vue Donnes/Services, faites glisser lopration
getAllDepartments() sur le composant DataGrid Dpartement.

4 Crez un gestionnaire dvnement pour les modifications apportes au composant DataGrid Dpartements.

Assurez-vous que le composant DataGrid Dpartements est bien slectionn. Dans la vue Proprits, cliquez sur licne Lors de la modification, puis slectionnez Gnrer un gestionnaire dvnement. Lditeur passe en mode Source et slectionne le corps du gestionnaire dvnement. Spcifiez les lments suivants pour le gestionnaire dvnement :
protected function deptDG_changeHandler(event:ListEvent):void { getEmployeesByDeptResult.token = employeeService.getEmployeesByDept(deptDG.selectedItem.dept_no); }

5 Enregistrez et excutez lapplication.

Lorsque vous cliquez sur un dpartement du composant DataGrid Dpartements, le composant DataGrid Employs affiche tous les employs de ce dpartement. Fermez lapplication.
6 En mode Cration de lditeur MXML, slectionnez le composant DataGrid Employs. Dans le menu contextuel,

slectionnez Gnrer le formulaire de dtails et procdez comme suit :


a Pour Appel de dtails, slectionnez Appeler un service. b Pour Service, slectionnez EmployeeService. c Pour Opration, slectionnez getEmployeesByID(). d Cliquez sur Terminer. 7 Dans le gestionnaire dvnement cr, spcifiez ce qui suit pour largument de getEmployeesById() :
protected function empDeptDG_changeHandler(event:ListEvent):void { getEmployeesByIDResult.token = employeeService.getEmployeesByID(empDeptDG.selectedItem.emp_no); }

8 En mode Cration, faites glisser le formulaire sous les composants DataGrid. 9 Ajoutez un bouton ct du formulaire et apportez les modifications suivantes dans la vue Proprits :

Pour ID, spcifiez updateButton. Pour Libell, spcifiez Mise jour de lemploy.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 76


Implmentation de services pour des applications centres sur les donnes

Cliquez sur licne Lors dun clic et spcifiez Gnrer un appel de service.
Pour Service, slectionnez EmployeeService. Pour Opration, spcifiez updateEmployees(). Lditeur passe en mode Source.

Modifiez lappel de service en updateEmployees() comme illustr ci-dessous :


protected function updateButton_clickHandler(event:MouseEvent):void { var e:Employee = new Employee(); e.birth_date = birth_dateTextInput.text; e.first_name = first_nameTextInput.text; e.last_name = last_nameTextInput.text; e.hire_date = hire_dateTextInput.text; e.gender = genderTextInput.text; e.emp_no = employee.emp_no; updateEmployeesResult.token = employeeService.updateEmployees(e); getEmployeesByDeptResult.token = employeeService.getEmployeesByDept(deptDG.selectedItem.dept_no); }

Dernire mise jour le 18/3/2010

77

Chapitre 4 : Accs aux donnes ct serveur


Les composants daccs aux donnes Adobe Flex utilisent des appels de procdures distants pour interagir avec les environnements de serveur tels que PHP, Adobe ColdFusion et Microsoft ASP.NET. Ces composants fournissent des donnes aux applications client cres avec la structure Adobe Flex et envoient des donnes aux sources de donnes de back-end. Pour une prsentation des composants daccs aux donnes, voir Composants daccs aux donnes la page 5.

Utilisation de composants HTTPService


Vous pouvez utiliser un composant HTTPService avec tout type de technologie ct serveur, y compris les pages PHP, les pages ColdFusion, les pages JavaServer (JSP), les servlets Java, Ruby on Rails et les pages Microsoft ASP. Pour obtenir des informations de rfrence API sur le composant HTTPService, voir mx.rpc.http.mxml.HTTPService.

Utilisation de donnes PHP et SQL


Les composants HTTPService peuvent tre utiliss de pair avec PHP et un systme de gestion de base de donnes SQL pour afficher les rsultats dune interrogation de base de donnes dans une application. Vous pouvez galement utiliser les composants pour insrer, mettre jour et supprimer les donnes dune base de donnes. Vous pouvez appeler une page PHP avec la mthode GET ou POST pour effectuer une interrogation de base de donnes, puis formater les donnes du rsultat de linterrogation dans une structure XML et renvoyer la structure XML lapplication dans le cadre de la rponse HTTP. Une fois le rsultat renvoy lapplication, vous pouvez lafficher dans un ou plusieurs contrles de linterface utilisateur. Code MXML Dans lexemple suivant, lapplication appelle une page PHP avec la mthode POST. La page PHP interroge une table de base de donnes MySQL appele users. Elle formate les rsultats de linterrogation sous XML et renvoie les donnes XML lapplication, dans laquelle elles sont lies la proprit dataProvider dun contrle DataGrid et affiches dans ce contrle DataGrid. Lapplication envoie galement le nom dutilisateur et ladresse lectronique des nouveaux utilisateurs la page PHP, qui procde une insertion dans la table de base de donnes des utilisateurs.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 78


Accs aux donnes ct serveur

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="send_data()"> <fx:Declarations> <s:HTTPService id="userRequest" url="http://myserver/myproj/request_post2.php" useProxy="false" method="POST"> <mx:request xmlns=""> <username>{username.text}</username> <emailaddress>{emailaddress.text}</emailaddress> </mx:request> </s:HTTPService> </fx:Declarations> <fx:Script> <![CDATA[ private function send_data():void { userRequest.send(); } ]]> </fx:Script> <mx:Form x="20" y="10" width="300"> <mx:FormItem> <s:Label text="Username" /> <s:TextInput id="username"/> </mx:FormItem> <mx:FormItem> <s:Label text="Email Address" /> <s:TextInput id="emailaddress"/> </mx:FormItem> <s:Button label="Submit" click="send_data()"/> </mx:Form> <mx:DataGrid id="dgUserRequest" x="20" y="160" dataProvider="{userRequest.lastResult.users.user}"> <mx:columns> <mx:DataGridColumn headerText="User ID" dataField="userid"/> <mx:DataGridColumn headerText="User Name" dataField="username"/> </mx:columns> </mx:DataGrid> <s:TextInput x="20" y="340" id="selectedemailaddress" text="{dgUserRequest.selectedItem.emailaddress}"/> </s:Application>

La mthode send() du composant HTTPService effectue lappel la page PHP. Cet appel est effectu dans la mthode send_data() dans le bloc Script du fichier MXML. La proprit resultFormat du composant HTTPService tant dfinie sur object, les donnes sont renvoyes lapplication en tant que graphique dobjets ActionScript. Il sagit de la valeur par dfaut de la proprit resultFormat. Une autre possibilit consiste utiliser une proprit resultFormat dfinie sur e4x pour renvoyer les donnes en tant quobjet XMLList sur lequel vous pouvez excuter ECMAScript pour les oprations XML (E4X). Si vous slectionnez la valeur e4x pour la proprit resultFormat, vous devrez apporter les quelques modifications suivantes au code MXML. Remarque : si le format de rsultat est e4x, nincluez pas le nud racine de la structure XML dans la notation par point lors de la liaison au contrle DataGrid.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 79


Accs aux donnes ct serveur

Les donnes XML renvoyes dans cet exemple ne contiennent aucune information despace de noms. Pour obtenir des informations sur lutilisation de donnes XML ne contenant pas despaces de noms, voir Traitement de rsultats en tant que donnes XML avec le format de rsultat E4X la page 130.
... <s:HTTPService id="userRequest" url="http://myserver/myproj/request_post2.php" useProxy="false" method="POST" resultFormat="e4x"> ... <mx:DataGrid id="dgUserRequest" x="22" y="150" dataProvider="{userRequest.lastResult.user}"> ...

Le format de rsultat e4x permet en outre de lier la proprit lastResult un objet XMLListCollection, puis de lier cet objet la proprit DataGrid.dataProvider, comme lillustre le fragment de code suivant :
<fx:Declarations> ... <mx:XMLListCollection id="xc" source="{userRequest.lastResult.user}"/> ... </fx:Declarations> ... <mx:DataGrid id="dgUserRequest" x="22" y="128" dataProvider="{xc}"> ...

Script de base de donnes MySQL Le code PHP de cette application utilise une table de base de donnes appele users dans une base de donnes MySQL appele sample. Le script MySQL suivant permet de crer la table :
CREATE TABLE `users` ( `userid` int(10) unsigned NOT NULL auto_increment, `username` varchar(255) collate latin1_general_ci NOT NULL, `emailaddress` varchar(255) collate latin1_general_ci NOT NULL, PRIMARY KEY (`userid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3 ;

Code PHP Cette application appelle la page PHP suivante. Ce code PHP effectue des insertions dans la base de donnes SQL et linterroge, puis retourne les rsultats de linterrogation lapplication dans une structure XML.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 80


Accs aux donnes ct serveur

<?php define( define( define( define(

"DATABASE_SERVER", "servername" ); "DATABASE_USERNAME", "username" ); "DATABASE_PASSWORD", "password" ); "DATABASE_NAME", "sample" );

//connect to the database. $mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD); mysql_select_db( DATABASE_NAME ); // Quote variable to make safe function quote_smart($value) { // Stripslashes if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // Quote if not integer if (!is_numeric($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; } if( $_POST["emailaddress"] AND $_POST["username"]) { //add the user $Query = sprintf("INSERT INTO users VALUES ('', %s, %s)", quote_smart($_POST['username']), quote_smart($_POST['emailaddress'])); $Result = mysql_query( $Query ); } //return a list of all the users $Query = "SELECT * from users"; $Result = mysql_query( $Query ); $Return = "<users>"; while ( $User = mysql_fetch_object( $Result ) ) { $Return .= "<user><userid>".$User->userid."</userid><username>". $User->username."</username><emailaddress>". $User->emailaddress."</emailaddress></user>"; } $Return .= "</users>"; mysql_free_result( $Result ); print ($Return) ?>

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 81


Accs aux donnes ct serveur

Utilisation de donnes ColdFusion et SQL


Les composants HTTPService peuvent tre utiliss de pair avec une page ColdFusion et un systme de gestion de base de donnes SQL pour afficher les rsultats dune interrogation de base de donnes dans une application. Vous pouvez galement utiliser les composants pour insrer, mettre jour et supprimer les donnes dune base de donnes. Vous pouvez appeler une page ColdFusion avec la mthode GET ou POST pour effectuer une interrogation de base de donnes, puis formater les donnes du rsultat de linterrogation dans une structure XML et renvoyer la structure XML lapplication dans le cadre de la rponse HTTP. Une fois le rsultat renvoy lapplication, vous pouvez lafficher dans un ou plusieurs contrles de linterface utilisateur. Code MXML Dans lexemple suivant, lapplication appelle une page ColdFusion avec la mthode POST. La page ColdFusion interroge une table de base de donnes MySQL appele users. Elle formate les rsultats de linterrogation sous XML et renvoie les donnes XML lapplication, dans laquelle elles sont lies la proprit dataProvider dun contrle DataGrid et affiches dans ce contrle DataGrid. Lapplication envoie aussi le nom dutilisateur et ladresse lectronique des nouveaux utilisateurs la page ColdFusion, qui procde une insertion dans la table de base de donnes des utilisateurs.
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="userRequest.send()"> <fx:Declarations> <s:HTTPService id="userRequest" url="http://server:8500/flexapp/returncfxml.cfm" useProxy="false" method="POST"> <mx:request xmlns=""> <username>{username.text}</username> <emailaddress>{emailaddress.text}</emailaddress> </mx:request> </s:HTTPService> </fx:Declarations> <mx:Form x="22" y="10" width="300"> <mx:FormItem> <s:Label text="Username" /> <s:TextInput id="username"/> </mx:FormItem> <mx:FormItem> <s:Label text="Email Address" /> <s:TextInput id="emailaddress"/> </mx:FormItem> <s:Button label="Submit" click="userRequest.send()"/> </mx:Form> <mx:DataGrid id="dgUserRequest" x="22" y="128" dataProvider="{userRequest.lastResult.users.user}"> <mx:columns> <mx:DataGridColumn headerText="User ID" dataField="userid"/> <mx:DataGridColumn headerText="User Name" dataField="username"/> </mx:columns> </mx:DataGrid> <s:TextInput x="22" y="300" id="selectedemailaddress" text="{dgUserRequest.selectedItem.emailaddress}"/> </s:Application>

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 82


Accs aux donnes ct serveur

La mthode send() du composant HTTPService effectue lappel la page ColdFusion. Cet appel est effectu dans la mthode send_data() dans le bloc Script du fichier MXML. La proprit resultFormat du composant HTTPService tant dfinie sur object, les donnes sont renvoyes lapplication en tant que graphique dobjets ActionScript. Il sagit de la valeur par dfaut de la proprit resultFormat. Une autre possibilit consiste utiliser un format de rsultat e4x pour renvoyer les donnes en tant quobjet XMLList sur lequel vous pouvez excuter ECMAScript pour les oprations XML (E4X). Si vous slectionnez la valeur e4x pour la proprit resultFormat, vous devrez apporter les quelques modifications suivantes au code MXML. Remarque : si le format de rsultat est e4x, nincluez pas le nud racine de la structure XML dans la notation par point lors de la liaison au contrle DataGrid. Les donnes XML renvoyes dans cet exemple ne contiennent aucune information despace de noms. Pour obtenir des informations sur lutilisation de donnes XML ne contenant pas despaces de noms, voir Traitement de rsultats en tant que donnes XML avec le format de rsultat E4X la page 130.
... <s:HTTPService id="userRequest" url="http://myserver:8500/flexapp/returncfxml.cfm" useProxy="false" method="POST" resultFormat="e4x"> ... <mx:DataGrid id="dgUserRequest" x="22" y="128" dataProvider="{userRequest.lastResult.user}"> ...

Le format de rsultat e4x permet de lier la proprit lastResult un objet XMLListCollection, puis de lier cet objet la proprit dataProvider de DataGrid, comme lillustre le fragment de code suivant :
<fx:Declarations> ... <mx:XMLListCollection id="xc" source="{userRequest.lastResult.user}"/> ... </fx:Declarations> ... <mx:DataGrid id="dgUserRequest" x="22" y="128" dataProvider="{xc}"> ...

Script SQL Le code ColdFusion de cette application utilise une table de base de donnes appele users dans une base de donnes MySQL appele sample. Le script MySQL suivant cre la table :
CREATE TABLE `users` ( `userid` int(10) unsigned NOT NULL auto_increment, `username` varchar(255) collate latin1_general_ci NOT NULL, `emailaddress` varchar(255) collate latin1_general_ci NOT NULL, PRIMARY KEY (`userid`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3 ;

Code ColdFusion Lapplication rpertorie dans Utilisation de donnes ColdFusion et SQL la page 81 appelle lapplication ColdFusion returncfxml.cfm. Ce code ColdFusion effectue des insertions dans la base de donnes SQL et linterroge, puis renvoie les rsultats de linterrogation lapplication. La page ColdFusion utilise la balise cfquery pour insrer des donnes dans la base de donnes et linterroger. Elle fait appel la balise cfxml pour formater les rsultats de linterrogation dans une structure XML.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 83


Accs aux donnes ct serveur

<!--- returncfxml.cfm ---> <cfprocessingdirective pageencoding = "utf-8" suppressWhiteSpace = "Yes"> <cfif isDefined("username") and isDefined("emailaddress") and username NEQ ""> <cfquery name="addempinfo" datasource="sample"> INSERT INTO users (username, emailaddress) VALUES ( <cfqueryparam value="#username#" cfsqltype="CF_SQL_VARCHAR" maxlength="255">, <cfqueryparam value="#emailaddress#" cfsqltype="CF_SQL_VARCHAR" maxlength="255"> ) </cfquery> </cfif> <cfquery name="alluserinfo" datasource="sample"> SELECT userid, username, emailaddress FROM users </cfquery> <cfxml variable="userXML"> <users> <cfloop query="alluserinfo"> <cfoutput> <user> <userid>#toString(userid)#</userid> <username>#username#</username> <emailaddress>#emailaddress#</emailaddress> </user> </cfoutput> </cfloop> </users> </cfxml> <cfoutput>#userXML#</cfoutput> </cfprocessingdirective>

Utilisation de page JavaServer


Les composants Flex HTTPService peuvent tre utiliss de pair avec une page JSP et un systme de gestion de base de donnes SQL pour afficher les rsultats dune interrogation de base de donnes dans une application. Vous pouvez galement utiliser les composants pour insrer, mettre jour et supprimer les donnes dune base de donnes. Vous pouvez appeler une page JSP avec la mthode GET ou POST pour effectuer une interrogation de base de donnes, puis formater les donnes du rsultat de linterrogation dans une structure XML et renvoyer la structure XML lapplication dans le cadre de la rponse HTTP. Une fois le rsultat renvoy lapplication, vous pouvez lafficher dans un ou plusieurs contrles de linterface utilisateur. Code MXML Dans lexemple suivant, lapplication appelle une page JSP et extrait des donnes dune base de donnes SQL. Elle formate les rsultats de linterrogation de la base de donnes sous XML et retourne les donnes XML lapplication, dans laquelle elles sont lies la proprit dataProvider dun contrle DataGrid et affiches dans ce contrle DataGrid.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 84


Accs aux donnes ct serveur

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <s:HTTPService id="srv" url="catalog.jsp"/> </fx:Declarations> <mx:DataGrid dataProvider="{srv.lastResult.catalog.product}" width="100%" height="100%"/> <s:Button label="Get Data" click="srv.send()"/> </mx:Application>

La mthode send() du composant HTTPService effectue lappel la page JSP. Cet appel est effectu dans lvnement click de lobjet Button dans le fichier MXML. La proprit resultFormat du composant HTTPService tant dfinie sur object, les donnes sont renvoyes lapplication en tant que graphique dobjets ActionScript. Il sagit de la valeur par dfaut de la proprit resultFormat. Une autre possibilit consiste utiliser un format de rsultat e4x pour renvoyer les donnes en tant quobjet XMLList sur lequel vous pouvez excuter ECMAScript pour les oprations XML (E4X). Si vous slectionnez la valeur e4x pour la proprit resultFormat, vous devrez apporter les quelques modifications suivantes au code MXML. Remarque : si le format de rsultat est e4x, nincluez pas le nud racine de la structure XML dans la notation par point lors de la liaison au contrle DataGrid. Les donnes XML renvoyes dans cet exemple ne contiennent aucune information despace de noms. Pour obtenir des informations sur lutilisation de donnes XML ne contenant pas despaces de noms, voir Traitement de rsultats en tant que donnes XML avec le format de rsultat E4X la page 130.
... <s:HTTPService id="srv" url="catalog.jsp" resultFormat="e4x"/> ... <mx:DataGrid dataProvider="{srv.lastResult.product}" width="100%" height="100%"/>

Lorsque vous utilisez le format de rsultat e4x, vous pouvez si vous le souhaitez lier la proprit lastResult un objet XMLListCollection, puis lier cet objet la proprit DataGrid.dataProvider :
<fx:Declarations> ... <mx:XMLListCollection id="xc" source="{userRequest.lastResult.user}"/> ... </fx:Declarations> ... <mx:DataGrid id="dgUserRequest" x="22" y="128" dataProvider="{xc}"> ...

Code JSP Lexemple suivant prsente la page JSP utilise dans cette application. Cette page JSP nappelle pas de base de donnes directement. Elle obtient ses donnes dune classe Java appele ProductService, qui son tour utilise une classe Java appele Product pour reprsenter des produits particuliers.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 85


Accs aux donnes ct serveur

<%@page import="flex.samples.product.ProductService, flex.samples.product.Product, java.util.List"%> <?xml version="1.0" encoding="utf-8"?> <catalog> <% ProductService srv = new ProductService(); List list = null; list = srv.getProducts(); Product product; for (int i=0; i<list.size(); i++) { product = (Product) list.get(i); %> <product productId="<%= product.getProductId()%>"> <name><%= product.getName() %></name> <description><%= product.getDescription() %></description> <price><%= product.getPrice() %></price> <image><%= product.getImage() %></image> <category><%= product.getCategory() %></category> <qtyInStock><%= product.getQtyInStock() %></qtyInStock> </product> <% } %> </catalog>

Appel de services HTTP dans ActionScript


Lexemple suivant prsente un appel de service HTTP dans un bloc de script ActionScript. Lappel de la mthode useHTTPService() dclare le service, dfinit la destination, configure des couteurs dvnement result et fault et conduit lappel de la mthode send() du service.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 86


Accs aux donnes ct serveur

<?xml version="1.0"?> <!-- fds\rpc\HttpServiceInAS.mxml. Compiles --> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.rpc.http.HTTPService; import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; private var service:HTTPService public function useHttpService(parameters:Object):void { service = new HTTPService(); service.url = "catalog.jsp"; service.method = "POST"; service.addEventListener("result", httpResult); service.addEventListener("fault", httpFault); service.send(parameters); } public function httpResult(event:ResultEvent):void { var result:Object = event.result; //Do something with the result. } public function httpFault(event:FaultEvent):void { var faultstring:String = event.fault.faultString; Alert.show(faultstring); } ]]> </fx:Script> </mx:Application>

Utilisation de composants WebService


Les applications cres avec la structure Flex peuvent interagir avec des services Web qui dfinissent leurs interfaces dans un document WSDL 1.1 (Web Services Description Language 1.1), disponible en tant quURL. WSDL est un format standard permettant de dcrire les messages quun service Web comprend, le format des rponses de ce service ces messages, les protocoles que le service Web prend en charge et ladresse laquelle envoyer les messages. LAPI du service Web Flex prend gnralement en charge le protocole SOAP (Simple Object Access Protocol) 1.1, XML Schema 1.0 (versions 1999, 2000 et 2001), WSDL 1.1 cod RPC, littral RPC et littral document (paramtres de style brut et envelopp). Les deux types de services Web les plus courants utilisent des liaisons SOAP codes (RPC) ou littral document ; les termes codes et littral indiquent le type de mappage WSDL sur SOAP quun service utilise. Flex prend en charge les demandes et les rsultats de service Web formats en tant que messages SOAP. SOAP fournit la dfinition du format XML que vous pouvez utiliser pour changer des informations structures et types entre un client de service Web (une application Flex, par exemple) et un service Web.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 87


Accs aux donnes ct serveur

Adobe Flash Player fonctionne au sein dun sandbox de scurit qui limite les donnes auxquelles les applications Flex et les autres applications cres avec Flash peuvent accder via HTTP. Les applications cres avec Flash peuvent accder par HTTP uniquement aux ressources figurant dans le mme domaine et par le mme protocole les ayant traites. Cela constitue un problme pour les services Web qui sont gnralement atteints partir demplacements distants. Le service Proxy, disponible dans LiveCycle Data Services ES et BlazeDS, intercepte les demandes aux services Web distants et les redirige, puis renvoie les rponses au client. Si vous nutilisez pas LiveCycle Data Services ES ou BlazeDS, vous pouvez accder aux services Web dans le mme domaine que lapplication ou utiliser un fichier crossdomain.xml (de rgulation interdomaines) permettant laccs partir du domaine de lapplication et devant tre install sur le serveur Web hbergeant le service RPC. Pour obtenir des informations de rfrence API sur le composant WebService, voir mx.rpc.soap.mxml.WebService. Exemple dapplication WebService Lexemple de code suivant concerne une application qui utilise un composant WebService pour appeler des oprations de service Web. Code MXML Dans lexemple suivant, lapplication appelle un service Web. Ce service interroge une table de base de donnes SQL appele users et renvoie des donnes lapplication, dans laquelle ces donnes sont lies la proprit dataProvider dun contrle DataGrid o elles sont affiches. Lapplication envoie galement le nom dutilisateur et ladresse lectronique des nouveaux utilisateurs au service Web, qui procde une insertion dans la table de base de donnes des utilisateurs. Limplmentation principale du service Web est un composant ColdFusion ; le mme composant ColdFusion est accd en tant quobjet distant dans Utilisation de composants RemoteObject la page 104.
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <s:WebService id="userRequest" wsdl="http://localhost:8500/flexapp/returnusers.cfc?wsdl"> <mx:operation name="returnRecords" resultFormat="object" fault="mx.controls.Alert.show(event.fault.faultString)" result="remotingCFCHandler(event)"/> <mx:operation name="insertRecord" result="insertCFCHandler()" fault="mx.controls.Alert.show(event.fault.faultString)"/> </s:WebService> </fx:Declarations> <fx:Script> <![CDATA[ import mx.rpc.events.ResultEvent; private function remotingCFCHandler(e:ResultEvent):void { dgUserRequest.dataProvider = e.result; } private function insertCFCHandler():void { userRequest.returnRecords();

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 88


Accs aux donnes ct serveur

} private function clickHandler():void { userRequest.insertRecord(username.text, emailaddress.text); } ]]> </fx:Script> <mx:Form x="22" y="10" width="300"> <mx:FormItem> <s:Label text="Username" /> <s:TextInput id="username"/> </mx:FormItem> <mx:FormItem> <s:Label text="Email Address" /> <s:TextInput id="emailaddress"/> </mx:FormItem> <s:Button label="Submit" click="clickHandler()"/> </mx:Form> <mx:DataGrid id="dgUserRequest" x="22" y="160"> <mx:columns> <mx:DataGridColumn headerText="User ID" dataField="USERID"/> <mx:DataGridColumn headerText="User Name" dataField="USERNAME"/> </mx:columns> </mx:DataGrid> <s:TextInput x="22" y="320" id="selectedemailaddress" text="{dgUserRequest.selectedItem.emailaddress}"/> </s:Application>

Document WSDL Lexemple suivant prsente le document WSDL qui dfinit lAPI du service Web :
<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions targetNamespace="http://flexapp" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://flexapp" xmlns:intf="http://flexapp" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="http://rpc.xml.coldfusion" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <!--WSDL created by ColdFusion version 8,0,0,171651--> <wsdl:types> <schema targetNamespace="http://rpc.xml.coldfusion" xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="http://flexapp"/> <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <complexType name="CFCInvocationException"> <sequence/> </complexType> <complexType name="QueryBean"> <sequence> <element name="columnList" nillable="true" type="impl:ArrayOf_xsd_string"/>

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 89


Accs aux donnes ct serveur

<element name="data" nillable="true" type="impl:ArrayOfArrayOf_xsd_anyType"/> </sequence> </complexType> </schema> <schema targetNamespace="http://flexapp" xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="http://rpc.xml.coldfusion"/> <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <complexType name="ArrayOf_xsd_string"> <complexContent> <restriction base="soapenc:Array"> <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/> </restriction> </complexContent> </complexType> <complexType name="ArrayOfArrayOf_xsd_anyType"> <complexContent> <restriction base="soapenc:Array"> <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:anyType[][]"/> </restriction> </complexContent> </complexType> </schema> </wsdl:types> <wsdl:message name="CFCInvocationException"> <wsdl:part name="fault" type="tns1:CFCInvocationException"/> </wsdl:message> <wsdl:message name="returnRecordsRequest"> </wsdl:message> <wsdl:message name="insertRecordResponse"> </wsdl:message> <wsdl:message name="returnRecordsResponse"> <wsdl:part name="returnRecordsReturn" type="tns1:QueryBean"/> </wsdl:message> <wsdl:message name="insertRecordRequest"> <wsdl:part name="username" type="xsd:string"/> <wsdl:part name="emailaddress" type="xsd:string"/> </wsdl:message> <wsdl:portType name="returncfxml"> <wsdl:operation name="insertRecord" parameterOrder="username emailaddress"> <wsdl:input message="impl:insertRecordRequest" name="insertRecordRequest"/> <wsdl:output message="impl:insertRecordResponse" name="insertRecordResponse"/> <wsdl:fault message="impl:CFCInvocationException" name="CFCInvocationException"/> </wsdl:operation> <wsdl:operation name="returnRecords"> <wsdl:input message="impl:returnRecordsRequest" name="returnRecordsRequest"/> <wsdl:output message="impl:returnRecordsResponse" name="returnRecordsResponse"/> <wsdl:fault message="impl:CFCInvocationException" name="CFCInvocationException"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="returncfxml.cfcSoapBinding" type="impl:returncfxml"> <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="insertRecord"> <wsdlsoap:operation soapAction=""/>

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 90


Accs aux donnes ct serveur

<wsdl:input name="insertRecordRequest"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://flexapp" use="encoded"/> </wsdl:input> <wsdl:output name="insertRecordResponse"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://flexapp" use="encoded"/> </wsdl:output> <wsdl:fault name="CFCInvocationException"> <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="CFCInvocationException" namespace="http://flexapp" use="encoded"/> </wsdl:fault> </wsdl:operation> <wsdl:operation name="returnRecords"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="returnRecordsRequest"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://flexapp" use="encoded"/> </wsdl:input> <wsdl:output name="returnRecordsResponse"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://flexapp" use="encoded"/> </wsdl:output> <wsdl:fault name="CFCInvocationException"> <wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="CFCInvocationException" namespace="http://flexapp" use="encoded"/> </wsdl:fault> </wsdl:operation> </wsdl:binding> <wsdl:service name="returncfxmlService"> <wsdl:port binding="impl:returncfxml.cfcSoapBinding" name="returncfxml.cfc"> <wsdlsoap:address location="http://localhost:8500/flexapp/returnusers.cfc"/> </wsdl:port> </wsdl:service> </wsdl:definitions>

Appel de services Web dans ActionScript


Lexemple suivant prsente un appel de service Web dans un bloc de script ActionScript. Lappel de la mthode useWebService() dclare le service, dfinit la destination, rcupre le document WSDL et conduit lappel de la mthode echoArgs() du service. Remarque : lorsque vous dclarez un composant WebService dans ActionScript, vous devez appeler la mthode WebService.loadWSDL().

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 91


Accs aux donnes ct serveur

<?xml version="1.0"?> <!-- fds\rpc\WebServiceInAS.mxml --> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" <fx:Script> <![CDATA[ import mx.rpc.soap.WebService; import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; private var ws:WebService; public function useWebService(intArg:int, strArg:String):void { ws = new WebService(); ws.wsdl="http://myserver:8500/flexapp/app1.cfc?wsdl"; ws.echoArgs.addEventListener("result", echoResultHandler); ws.addEventListener("fault", faultHandler); ws.loadWSDL(); ws.echoArgs(intArg, strArg); } public function echoResultHandler(event:ResultEvent):void { var retStr:String = event.result.echoStr; var retInt:int = event.result.echoInt; //Do something. } public function faultHandler(event:FaultEvent):void { //deal with event.fault.faultString, etc } ]]> </fx:Script> </mx:Application>

Noms doprations rservs


Pour accder aux oprations WebService, il suffit gnralement de les nommer daprs une variable de service. Des conflits de noms risquent toutefois de se produire si le nom dune opration correspond une mthode dfinie pour le service. Dans ActionScript, vous pouvez appliquer la mthode suivante un composant WebService pour renvoyer lopration du nom donn :
public function getOperation(name:String):Operation

Lecture de documents WSDL


Vous pouvez afficher un document WSDL dans un navigateur Web, un diteur de texte simple, un diteur XML ou un environnement de dveloppement tel quAdobe Dreamweaver, qui intgre un utilitaire pour laffichage de documents WSDL dans un format en facilitant la lecture. Les documents WSDL contiennent les balises dcrites dans le tableau suivant.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 92


Accs aux donnes ct serveur

Balise
<binding>

Description Spcifie le protocole que les clients (les applications Flex, par exemple) utilisent pour communiquer avec un service Web. Il existe des liaisons pour SOAP, HTTP GET, HTTP POST et MIME. Flex ne prend en charge que la liaison SOAP. Spcifie la valeur dune erreur renvoye suite un problme de traitement dun message. Spcifie le message envoy par un client (une application Flex, par exemple) un service Web. Dfinit les donnes transfres par une opration WebService.

<fault> <input> <message>

<operation> Dfinit une combinaison des balises <input>, <output> et <fault>. <output> <port> <portType> <service>

Spcifie le message envoy par le service Web un client de service Web (une application Flex, par exemple). Spcifie un point de terminaison de service Web, dfinissant lassociation entre une liaison et une adresse de rseau. Dfinit la ou les oprations fournies par un service Web. Dfinit une collection de balises <port>. Chaque service se mappe une balise <portType> et spcifie diffrentes manires daccder aux oprations dans cette balise <portType>. Dfinit les types de donnes utiliss par les messages dun service Web.

<types>

Oprations orientes RPC et oprations orientes document


Un fichier WSDL peut spcifier des oprations orientes RPC ou des oprations orientes document (littral de document). Flex prend en charge les deux styles doprations. Lorsquelle appelle une opration oriente RPC, une application envoie un message SOAP spcifiant une opration et ses paramtres. Lorsquelle appelle une opration oriente document, une application envoie un message SOAP contenant un document XML. Dans un document WSDL, chaque balise <port> comporte une proprit binding qui spcifie le nom dune balise <soap:binding> spcifique, comme lillustre lexemple suivant :
<binding name="InstantMessageAlertSoap" type="s0:InstantMessageAlertSoap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>

La proprit style de la balise <soap:binding> associe dtermine le style dopration. Dans cet exemple, le style est document. Toute opration dans un service peut spcifier le mme style ou remplacer le style spcifi pour le port associ au service, comme lillustre lexemple suivant :
<operation name="SendMSN"> <soap:operation soapAction="http://www.bindingpoint.com/ws/imalert/ SendMSN"style="document"/>

Services Web avec tat


Flex fait appel des sessions de serveur Java pour conserver ltat des points de terminaison de service Web qui utilisent des cookies pour enregistrer des informations de session. Cette fonction fait office dintermdiaire entre les applications et les services Web. Elle ajoute une identit de point de terminaison tout lment que le point de terminaison transmet lapplication. Si le point de terminaison envoie des informations de session, lapplication les reoit. Cette fonction ne ncessite aucune configuration ; elle nest pas prise en charge pour les destinations qui font appel au canal RTMP lorsque le service proxy est utilis.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 93


Accs aux donnes ct serveur

Utilisation den-ttes SOAP


Un en-tte SOAP est une balise facultative dans une enveloppe SOAP qui contient gnralement des informations spcifiques aux applications (des informations dauthentification, par exemple). Ajout den-ttes SOAP des demandes de services Web Certains services Web requirent la transmission dun en-tte SOAP lors de lappel dune opration. Vous pouvez ajouter un en-tte SOAP toutes les oprations de services Web ou des oprations individuelles en appelant la mthode addHeader() ou addSimpleHeader() dun objet WebService ou Operation dans une fonction dcouteur dvnement. Avant dutiliser la mthode addHeader(), vous devez crer sparment les objets SOAPHeader et QName. La mthode addHeader() prsente la signature suivante :
addHeader(header:mx.rpc.soap.SOAPHeader):void

Pour crer un objet SOAPHeader, utilisez le constructeur suivant :


SOAPHeader(qname:QName, content:Object)

Pour crer lobjet QName dans le premier paramtre de la mthode SOAPHeader(), utilisez le constructeur suivant :
QName(uri:String, localName:String)

Le paramtre content du constructeur SOAPHeader() est un ensemble de paires nom-valeur bases sur le format suivant :
{name1:value1, name2:value2}

La mthode addSimpleHeader() constitue un raccourci pour un en-tte SOAP nom-valeur unique. Lorsque vous utilisez la mthode addSimpleHeader(), vous crez les objets SOAPHeader et QName dans les paramtres de la mthode. La mthode addSimpleHeader() prsente la signature suivante :
addSimpleHeader(qnameLocal:String, qnameNamespace:String, headerName:String, headerValue:Object):void

La mthode addSimpleHeader() utilise les paramtres suivants :

qnameLocal est le nom local de len-tte QName. qnameNamespace est lespace de noms de len-tte QName. headerName est le nom de len-tte. headerValue est la valeur de len-tte. Il peut sagir dune chane dans le cas dune valeur simple, dun objet auquel un codage XML de base sera appliqu ou de donnes XML si vous souhaitez spcifier les donnes XML de len-tte vous-mme.

Dans lexemple suivant, le code indique comment utiliser les mthodes addHeader() et addSimpleHeader() pour ajouter un en-tte SOAP. Les mthodes sont appeles dans une fonction dcouteur dvnement nomme headers et lcouteur dvnement est assign dans la proprit load dune balise <mx:WebService> :

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 94


Accs aux donnes ct serveur

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <mx:WebService id="ws" wsdl="http://myserver:8500/flexapp/app1.cfc?wsdl" load="headers();"/> </fx:Declarations> <fx:Script> <![CDATA[ import mx.rpc.soap.SOAPHeader; private var header1:SOAPHeader; private var header2:SOAPHeader; public function headers():void { // Create QName and SOAPHeader objects. var q1:QName=new QName("http://soapinterop.org/xsd", "Header1"); header1=new SOAPHeader(q1, {string:"bologna",int:"123"}); header2=new SOAPHeader(q1, {string:"salami",int:"321"}); // Add the header1 SOAP Header to all web service requests. ws.addHeader(header1); // Add the header2 SOAP Header to the getSomething operation. ws.getSomething.addHeader(header2); // Within the addSimpleHeader method, // which adds a SOAP header to web //service requests, create SOAPHeader and QName objects. ws.addSimpleHeader ("header3", "http://soapinterop.org/xsd", "foo","bar"); } ]]> </fx:Script> </s:Application>

Suppression den-ttes SOAP Utilisez la mthode clearHeaders() de lobjet WebService ou Operation pour supprimer les en-ttes SOAP ajouts lobjet, ainsi que lillustre lexemple suivant pour un objet WebService. Vous devez appeler la mthode clearHeaders() au niveau (WebService ou Operation) auquel len-tte a t ajout.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 95


Accs aux donnes ct serveur

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <!-- The value of the destination property is for demonstration only and is not a real destination. --> <mx:WebService id="ws" wsdl="http://myserver:8500/flexapp/app1.cfc?wsdl" load="headers();"/> </fx:Declarations> <fx:Script> <![CDATA[ import mx.rpc.*; import mx.rpc.soap.SOAPHeader; private function headers():void { // Create QName and SOAPHeader objects. var q1:QName=new QName("Header1", "http://soapinterop.org/xsd"); var header1:SOAPHeader=new SOAPHeader(q1, {string:"bologna",int:"123"}); var header2:SOAPHeader=new SOAPHeader(q1, {string:"salami",int:"321"}); // Add the header1 SOAP Header to all web service request. ws.addHeader(header1); // Add the header2 SOAP Header to the getSomething operation. ws.getSomething.addHeader(header2); // Within the addSimpleHeader method, which adds a SOAP header to all // web service requests, create SOAPHeader and QName objects. ws.addSimpleHeader("header3","http://soapinterop.org/xsd", "foo", "bar"); } // Clear SOAP headers added at the WebService and Operation levels. private function clear():void { ws.clearHeaders(); ws.getSomething.clearHeaders(); } ]]> </fx:Script> <s:Button label="Clear headers and run again" click="clear()"/> </s:Application>

Rorientation dun service Web vers une URL diffrente


Certains services Web ncessitent le passage une URL de point de terminaison diffrente aprs avoir trait le WSDL et lexcution dun appel initial au service Web. Vous voulez par exemple utiliser un service Web ncessitant la transmission dinformations didentification de scurit. Le service Web appel pour lenvoi des informations didentification de connexion accepte les informations didentification et retourne lURL de point de terminaison relle requise pour utiliser les oprations mtier du service. Avant dappeler les oprations mtier, vous devez modifier la proprit endpointURI du composant WebService.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 96


Accs aux donnes ct serveur

Lexemple suivant prsente un couteur dvnement result qui stocke dans une variable lURL de point de terminaison retourne par un service Web, puis transmet cette variable une fonction afin de modifier lURL de point de terminaison pour les demandes ultrieures :
... public function onLoginResult(event:ResultEvent):void { //Extract the new service endpoint from the login result. var newServiceURL = event.result.serverUrl; // Redirect all service operations to the URL received in the login result. serviceName.endpointURI=newServiceURL; } ...

Un service Web ncessitant la transmission dinformations didentification de scurit peut galement renvoyer un identifiant que vous devrez attacher un en-tte SOAP pour toute demande ultrieure. Pour plus dinformations, voir Utilisation den-ttes SOAP la page 93.

Srialisation des donnes de service Web


Codage des donnes ActionScript
Le tableau suivant prsente les mappages de codage des types ActionScript 3 en types complexes de schma XML.
Dfinition du schma XML Elments de niveau suprieur xsd:element nillable == true xsd:element fixed != null xsd:element default != null Elments locaux xsd:element maxOccurs == 0 Object La valeur dentre est ignore et omise de la sortie code. Object Object Object Si la valeur dentre est null, la sortie code est dfinie avec lattribut xsi:nil. La valeur dentre est ignore et remplace par la valeur fixe. Si la valeur dentre est null, elle est remplace par cette valeur par dfaut. Types ActionScript 3 pris en charge Remarques

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 97


Accs aux donnes ct serveur

xsd:element maxOccurs == 1

Object

La valeur dentre est traite comme une entit unique. Si le type associ est un tableau cod SOAP, les tableaux et les implmentations mx.collection.IList sont transmis intacts pour tre traits par le codeur SOAP comme des cas spciaux pour ce type. La valeur dentre doit tre itrable (un tableau ou une implmentation mx.collections.IList, par exemple), bien que les valeurs non itrables soient enveloppes avant traitement. Les lments individuels sont cods en tant quentits distinctes conformment la dfinition. Si la valeur dentre nest pas dfinie ou est null, la sortie code est omise.

xsd:element maxOccurs > 1

Object

xsd:element minOccurs == 0

Object

Le tableau suivant prsente les mappages de codage de types ActionScript 3 en types intgrs de schma XML.
Type de schma XML
xsd:anyType xsd:anySimpleType

Types ActionScript 3 pris en charge Object

Remarques Boolean -> xsd:boolean ByteArray -> xsd:base64Binary Date -> xsd:dateTime int -> xsd:int Number -> xsd:double String -> xsd:string uint -> xsd:unsignedInt

xsd:base64Binary

flash.utils.ByteArray

mx.utils.Base64Encoder est utilis (sans retour la

ligne).
xsd:boolean

Boolean Number Object

Toujours cod en tant que true ou false.


Number == 1 alors true, dans le cas contraire, false. Object.toString() == true ou 1 , alors true ; dans le cas contraire, false.

xsd:byte xsd:unsignedByte xsd:date

Number String Date Number String

Chane dabord convertie en Number.

Les mthodes daccesseur Date.UTC sont utilises. Nombre utilis pour dfinir Date.time. Chane considre prformate et code telle quelle. Les mthodes daccesseur Date.UTC sont utilises. Nombre utilis pour dfinir Date.time. Chane considre prformate et code telle quelle.
Number.toString() est utilis. Notez que Infinity, -

xsd:dateTime

Date Number String

xsd:decimal

Number String

Infinity et NaN ne sont pas valides pour ce type. Chane dabord convertie en Number.

xsd:double

Number String

Limit la plage de Number. Chane dabord convertie en Number.


Object.toString() est appel.

xsd:duration

Object

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 98


Accs aux donnes ct serveur

xsd:float

Number String

Limit la plage de Number. Chane dabord convertie en Number.


Date.getUTCDate() est utilis.

xsd:gDay

Date Number String

Nombre directement utilis pour le jour. Chane analyse en tant que nombre du jour.
Date.getUTCMonth() est utilis.

xsd:gMonth

Date Number String

Nombre directement utilis pour le mois. Chane analyse en tant que nombre du mois.
Date.getUTCMonth() et Date.getUTCDate() sont

xsd:gMonthDay

Date String

utiliss. Chane analyse pour les portions de mois et de jour.

xsd:gYear

Date Number String

Date.getUTCFullYear() est utilis.

Nombre directement utilis pour lanne. Chane analyse en tant que nombre de lanne.
Date.getUTCFullYear() et Date.getUTCMonth()

xsd:gYearMonth

Date String

sont utiliss. Chane analyse pour les portions danne et de mois.

xsd:hexBinary xsd:integer et drivs : xsd:negativeInteger xsd:nonNegativeInteger xsd:positiveInteger xsd:nonPositiveInteger xsd:int xsd:unsignedInt xsd:long xsd:unsignedLong xsd:short xsd:unsignedShort

flash.utils.ByteArray Number String

mx.utils.HexEncoder est utilis. Limit la plage de Number. Chane dabord convertie en Number.

Number String Number String Number String

Chane dabord convertie en Number.

Chane dabord convertie en Number.

Chane dabord convertie en Number.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 99


Accs aux donnes ct serveur

xsd:string et drivs : xsd:ID xsd:IDREF xsd:IDREFS xsd:ENTITY xsd:ENTITIES xsd:language xsd:Name xsd:NCName xsd:NMTOKEN xsd:NMTOKENS xsd:normalizedString xsd:token xsd:time

Object

Object.toString() est invoqu.

Date Number String

Les mthodes daccesseur Date.UTC sont utilises. Nombre utilis pour dfinir Date.time. Chane considre prformate et code telle quelle. Si la dfinition dlment de schma XML correspondante comporte minOccurs > 0, une valeur null est code laide de xsi:nil ; dans le cas contraire, llment est entirement omis.

xsi:nil

null

Le tableau suivant prsente le mappage de types ActionScript 3 en types cods SOAP.


Type SOAPENC Types ActionScript 3 pris en charge Array mx.collections.IList soapenc:base64 soapenc:* flash.utils.ByteArray Object Remarques

soapenc:Array

Les tableaux cods SOAP sont traits comme des cas spciaux et ne sont pris en charge quavec les services Web de style cods RPC. Cod de la mme manire que xsd:base64Binary. Tout autre type cod SOAP est trait comme sil figurait dans lespace de noms XSD en fonction de la proprit localName de lobjet QName du type.

Dcodage du schma XML et de SOAP vers ActionScript 3


Le tableau suivant prsente les mappages de dcodage de types intgrs de schma XML en types ActionScript 3.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 100


Accs aux donnes ct serveur

Type de schma XML


xsd:anyType xsd:anySimpleType

Types ActionScript 3 dcods String Boolean Number

Remarques Si le contenu est vide -> xsd:string. Si le contenu est projet sur Number et la valeur est NaN ; ou si le contenu commence par 0 ou -0 , ou si le contenu se termine par E : alors, si le contenu est true ou false -> xsd:boolean dans le cas contraire -> xsd:string. Dans le cas contraire, le contenu est un nombre valide et donc -> xsd:double.

xsd:base64Binary xsd:boolean

flash.utils.ByteArray

mx.utils.Base64Decoder est utilis.

Boolean

Si le contenu est true ou 1 , alors true ; dans le cas contraire, false. Sil nexiste aucune information de fuseau horaire, lheure locale est utilise. Sil nexiste aucune information de fuseau horaire, lheure locale est utilise. Le contenu est cr via Number(content) et est donc limit la plage de Number. Le contenu est cr via Number(content) et est donc limit la plage de Number. Le contenu est renvoy avec rduction des espaces. Le contenu est converti via Number(content) et est donc limit la plage de Number. Le contenu est converti via uint(content). Le contenu est converti via uint(content). Le contenu est renvoy avec rduction des espaces. Le contenu est converti via uint(content). Le contenu est renvoy avec rduction des espaces.
mx.utils.HexDecoder est utilis.

xsd:date

Date

xsd:dateTime

Date

xsd:decimal

Number

xsd:double

Number

xsd:duration xsd:float

String Number

xsd:gDay xsd:gMonth xsd:gMonthDay xsd:gYear xsd:gYearMonth xsd:hexBinary

uint uint String uint String


flash.utils.ByteArray

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 101


Accs aux donnes ct serveur

xsd:integer
et drivs : xsd:byte xsd:int xsd:long xsd:negativeInteger xsd:nonNegativeInteger xsd:nonPositiveInteger xsd:positiveInteger xsd:short xsd:unsignedByte xsd:unsignedInt xsd:unsignedLong xsd:unsignedShort xsd:string

Number

Le contenu est dcod via parseInt().

String

et drivs :
xsd:ID xsd:IDREF xsd:IDREFS xsd:ENTITY xsd:ENTITIES xsd:language xsd:Name xsd:NCName xsd:NMTOKEN xsd:NMTOKENS xsd:normalizedString xsd:token xsd:time

Le contenu brut est simplement renvoy en tant que chane.

Date

Sil nexiste aucune information de fuseau horaire, lheure locale est utilise.

xsi:nil

null

Le tableau suivant prsente les mappages de dcodage de types cods SOAP en types ActionScript 3.
Type SOAPENC
soapenc:Array

Type ActionScript dcod Array

Remarques

Les tableaux cods SOAP sont traits comme des cas spciaux. Si makeObjectsBindable prsente la valeur true, le rsultat est mx.collections.ArrayCo envelopp dans une classe ArrayCollection ; dans le cas contraire, un llection tableau simple est renvoy.
flash.utils.ByteArray

soapenc:base64 soapenc:*

Dcod de la mme manire que xsd:base64Binary. Tout autre type cod SOAP est trait comme sil figurait dans lespace de noms XSD en fonction de la proprit localName de lobjet QName du type.

Object

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 102


Accs aux donnes ct serveur

Le tableau suivant prsente les mappages de dcodage de types de donnes personnaliss en types de donnes ActionScript 3.
Type personnalis Apache Map
http://xml.apache.org/x ml-soap:Map

Type ActionScript 3 dcod Object

Remarques La reprsentation SOAP de java.util.Map. Keys doit tre reprsentable sous forme de chanes.

Apache Rowset
http://xml.apache.org/x ml-soap:Rowset

Tableau dobjets

ColdFusion QueryBean

Tableau dobjets

http://rpc.xml.coldfusi mx.collections.ArrayCollectio on:QueryBean n dobjets

Si makeObjectsBindable prsente la valeur true, le tableau rsultant est envelopp dans une classe ArrayCollection.

Prise en charge de llment de schma XML


Les structures ou attributs de structures de schma XML suivants ne sont que partiellement implments dans Flex 4 :
<choice> <all> <union

Les structures ou attributs de structures de schma XML suivants sont ignors et ne sont pas pris en charge dans Flex 4 :

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 103


Accs aux donnes ct serveur

<attribute use="required"/> <element substitutionGroup="..." unique="..." key="..." keyref="..." field="..." selector="..."/> <simpleType> <restriction> <minExclusive> <minInclusive> <maxExclusiv> <maxInclusive> <totalDigits> <fractionDigits> <length> <minLength> <maxLength> <enumeration> <whiteSpace> <pattern> </restriction> </simpleType> <complexType final="..." block="..." mixed="..." abstract="..."/> <any processContents="..."/> <annotation>

Personnalisation du mappage de type de service Web


Lorsquil utilise des donnes dune invocation de service Web, Flex cre gnralement des objets ActionScript anonymes non typs et imite la structure XML dans le corps du message SOAP. Si vous voulez que Flex cre une occurrence dune classe spcifique, vous pouvez utiliser un objet mx.rpc.xml.SchemaTypeRegistry et enregistrer un objet QName avec une classe ActionScript correspondante. Vous disposez par exemple de la dfinition de classe suivante dans un fichier nomm User.as :
package { public class User { public function User() {} public var firstName:String; public var lastName:String; } }

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 104


Accs aux donnes ct serveur

Vous voulez alors invoquer une opration getUser sur un service Web renvoyant les donnes XML suivantes :
<tns:getUserResponse xmlns:tns="http://example.uri"> <tns:firstName>Ivan</tns:firstName> <tns:lastName>Petrov</tns:lastName> </tns:getUserResponse>

A linvocation de lopration getUser, pour tre certain dobtenir une occurrence de la classe User, et non un objet gnrique, faites figurer le code ActionScript suivant dans une mthode de lapplication :
SchemaTypeRegistry.getInstance().registerClass(new QName("http://example.uri", "getUserResponse"), User); SchemaTypeRegistry.getInstance() est une mthode statique qui renvoie loccurrence par dfaut du registre de

type. Dans la plupart des cas, cest tout ce dont vous avez besoin. Cette manire de procder enregistre toutefois un objet QName donn avec la mme classe ActionScript travers toutes les oprations de service Web de lapplication. Pour enregistrer diffrentes classes pour diffrentes oprations, faites figurer le code suivant dans une mthode de lapplication :
var qn:QName = new QName("http://the.same", "qname"); var typeReg1:SchemaTypeRegistry = new SchemaTypeRegistry(); var typeReg2:SchemaTypeRegistry = new SchemaTypeRegistry(); typeReg1.registerClass(qn, someClass); myWS.someOperation.decoder.typeRegistry = typeReg1; typeReg2.registerClass(qn, anotherClass); myWS.anotherOperation.decoder.typeRegistry = typeReg2;

Utilisation de la srialisation de service Web personnalise


Deux mthodes permettent de prendre le contrle intgral de la manire dont les objets ActionScript sont srialiss dans XML et dont les messages de rponse XML sont dsrialiss. La mthode recommande est lutilisation directe dE4X. Si vous transmettez une occurrence de XML comme seul paramtre une opration de service Web, elle est transmise intacte en tant quenfant du nud <SOAP:Body> dans la demande srialise. Utilisez cette stratgie pour contrler intgralement le message SOAP. De mme, lorsque vous dsrialisez une rponse de service Web, vous pouvez dfinir la proprit resultFormat de lopration sur e4x. Cela renvoie un message de rponse contenant lobjet XMLList avec les enfants du nud <SOAP:Body>. Vous pouvez ensuite implmenter la logique personnalise requise pour crer les objets ActionScript appropris. Plus fastidieuse, la seconde mthode consiste fournir vos propres implmentations de mx.rpc.soap.ISOAPDecoder et mx.rpc.soap.ISOAPEncoder. Si vous avez par exemple crit une classe nomme MyDecoder implmentant ISOAPDecoder, le code suivant pourra figurer dans une mthode de lapplication :
myWS.someOperation.decoder = new MyDecoder();

Lors de linvocation de someOperation, Flex appelle la mthode decodeResponse() de la classe MyDecoder. Il incombe ensuite limplmentation personnalise de traiter le message SOAP intgral et de produire les objets ActionScript attendus.

Utilisation de composants RemoteObject


Vous pouvez utiliser un composant Flex RemoteObject pour appeler des mthodes sur un composant ColdFusion ou une classe Java.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 105


Accs aux donnes ct serveur

Vous pouvez galement utiliser des composants RemoteObject contenant des objets PHP et .NET conjointement avec des logiciels tiers, tels que les projets open source AMFPHP et SabreAMF ainsi que Midnight Coders WebORB. Pour plus dinformations, voir les sites Web suivants :

Zend Framework http://framework.zend.com/ AMFPHP http://amfphp.sourceforge.net/ SabreAMF http://www.osflash.org/sabreamf Midnight Coders WebORB http://www.themidnightcoders.com/
Les composants RemoteObject utilisent le protocole AMF pour envoyer et recevoir des donnes, tandis que les composants WebService et HTTPService font appel au protocole HTTP. AMF est considrablement plus rapide que HTTP. Le codage et la configuration ct serveur sont toutefois gnralement plus complexes. De mme que les composants HTTPService et WebService, les composants RemoteObject peuvent tre utiliss pour afficher le rsultat dune requte de base de donnes dans une application. Vous pouvez galement utiliser les composants pour insrer, mettre jour et supprimer les donnes dune base de donnes. Une fois le rsultat de la requte renvoy lapplication, vous pouvez lafficher dans un ou plusieurs contrles de linterface utilisateur. Pour obtenir des informations de rfrence API sur le composant RemoteObject, voir mx.rpc.remoting.mxml.RemoteObject.

Exemple dapplication RemoteObject


Code MXML Dans lexemple suivant, lapplication utilise un composant RemoteObject pour appeler un composant ColdFusion. Le composant ColdFusion interroge une table de base de donnes MySQL appele users. Il renvoie le rsultat de linterrogation lapplication, dans laquelle ce rsultat est li la proprit dataProvider dun contrle DataGrid et affich dans ce contrle DataGrid. Lapplication envoie galement le nom dutilisateur et ladresse lectronique des nouveaux utilisateurs au composant ColdFusion, qui les ajoute la table de la base de donnes des utilisateurs.
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <mx:RemoteObject id="userRequest" destination="ColdFusion" source="flexapp.returnusers"> <mx:method name="returnRecords" result="returnHandler(event)" fault="mx.controls.Alert.show(event.fault.faultString)"/> <mx:method name="insertRecord" result="insertHandler()" fault="mx.controls.Alert.show(event.fault.faultString)"/> </mx:RemoteObject> </fx:Declarations> <fx:Script> <![CDATA[ import mx.rpc.events.ResultEvent; private function returnHandler(e:ResultEvent):void {

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 106


Accs aux donnes ct serveur

dgUserRequest.dataProvider = e.result; } private function insertHandler():void { userRequest.returnRecords(); } private function clickHandler():void { userRequest.insertRecord(username.text, emailaddress.text); } ]]> </fx:Script> <mx:Form x="22" y="10" width="300"> <mx:FormItem> <s:Label text="Username" /> <s:TextInput id="username"/> </mx:FormItem> <mx:FormItem> <s:Label text="Email Address" /> <s:TextInput id="emailaddress"/> </mx:FormItem> <s:Button label="Submit" click="clickHandler()"/> </mx:Form> <mx:DataGrid id="dgUserRequest" x="22" y="200"> <mx:columns> <mx:DataGridColumn headerText="User ID" dataField="userid"/> <mx:DataGridColumn headerText="User Name" dataField="username"/> </mx:columns> </mx:DataGrid> </s:Application>

Dans cette application, la proprit destination du composant RemoteObject est dfinie sur Coldfusion et la proprit source est dfinie sur le nom complet du composant ColdFusion. Par contraste, lorsque vous utilisez LiveCycle Data Services ES ou BlazeDS, vous spcifiez un nom de classe complet dans la proprit source dune destination de service distant dans un fichier de configuration (par dfaut, remotingconfig.xml). Indiquez le nom de la destination dans la proprit destination du composant RemoteObject. La classe de destination doit galement comporter un constructeur no-args. Avec ColdFusion, vous pouvez procder de cette manire pour configurer une destination au lieu dappliquer la proprit source au composant RemoteObject. Composant ColdFusion Lapplication appelle le composant ColdFusion suivant. Ce code ColdFusion effectue des insertions et des interrogations de base de donnes SQL, puis renvoie les rsultats de linterrogation lapplication. La page ColdFusion utilise la balise cfquery pour insrer des donnes dans la base de donnes et pour linterroger. Elle fait appel la balise cfreturn pour formater les rsultats de linterrogation en tant quobjet dinterrogation ColdFusion.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 107


Accs aux donnes ct serveur

<cfcomponent name="returnusers"> <cffunction name="returnRecords" access="remote" returnType="query"> <cfquery name="alluserinfo" datasource="flexcf"> SELECT userid, username, emailaddress FROM users </cfquery> <cfreturn alluserinfo> </cffunction> <cffunction name="insertRecord" access="remote" returnType="void"> <cfargument name="username" required="true" type="string"> <cfargument name="emailaddress" required="true" type="string"> <cfquery name="addempinfo" datasource="flexcf"> INSERT INTO users (username, emailaddress) VALUES ( <cfqueryparam value="#arguments.username#" cfsqltype="CF_SQL_VARCHAR" maxlength="255">, <cfqueryparam value="#arguments.emailaddress#" cfsqltype="CF_SQL_VARCHAR" maxlength="255"> ) </cfquery> <cfreturn> </cffunction> </cfcomponent>

Appel de composants RemoteObject dans ActionScript


Dans lexemple ActionScript suivant, lappel de la mthode useRemoteObject() dclare le service, dfinit la destination, configure des couteurs dvnement result et fault et procde lappel de la mthode getList() du service.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 108


Accs aux donnes ct serveur

<?xml version="1.0"?> <!-- fds\rpc\ROInAS.mxml --> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.rpc.remoting.RemoteObject; import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; [Bindable] public var empList:Object; public var employeeRO:RemoteObject; public function useRemoteObject(intArg:int, strArg:String):void { employeeRO = new RemoteObject(); employeeRO.destination = "SalaryManager"; employeeRO.getList.addEventListener("result", getListResultHandler); employeeRO.addEventListener("fault", faultHandler); employeeRO.getList(deptComboBox.selectedItem.data); } public function getListResultHandler(event:ResultEvent):void { // Do something empList=event.result; } public function faultHandler (event:FaultEvent):void { // Deal with event.fault.faultString, etc. Alert.show(event.fault.faultString, 'Error'); } ]]> </fx:Script> <s:ComboBox id="deptComboBox"/> </mx:Application>

Accs des objets Java dans le chemin source


Le composant RemoteObject vous permet daccder des objets Java sans tat et avec tat figurant dans le chemin source des applications Web LiveCycle Data Services ES, BlazeDS ou ColdFusion. Vous pouvez placer des fichiers de classes autonomes dans le rpertoire WEB-INF/classes et des classes contenues dans des fichiers JAR (Java Archive) dans le rpertoire WEB-INF/lib de lapplication Web pour les ajouter au chemin source. Vous pouvez spcifier le nom de classe complet dans la proprit source dune destination de service distant dans le fichier services-config.xml de LiveCycle Data Services ES, BlazeDS ou ColdFusion ou dans un fichier que le nom de classe complet inclut par rfrence (remoting-config.xml, par exemple). La classe doit galement comporter un constructeur no-args. Pour ColdFusion, vous pouvez si vous le souhaitez dfinir la proprit destination du composant RemoteObject sur Coldfusion et la proprit source sur le nom complet dun composant ColdFusion ou dune classe Java. Lorsque vous configurez une destination de service distant pour accder des objets sans tat (tendue de la demande), Flex cre un nouvel objet pour chaque appel de mthode au lieu dappeler les mthodes sur le mme objet. Vous pouvez dfinir ltendue dun objet sur ltendue de la demande (valeur par dfaut), de lapplication ou de la session. Les objets dans ltendue de lapplication sont accessibles lapplication Web qui contient lobjet. Les objets dans ltendue de la session sont accessibles toute la session client.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 109


Accs aux donnes ct serveur

Lorsque vous configurez une destination dobjet distant pour accder des objets avec tat, Flex cre lobjet une seule fois sur le serveur et maintient ltat entre les appels de mthode. Si le stockage de lobjet dans ltendue de lapplication ou de la session provoque des problmes de mmoire, utilisez ltendue de la demande.

Accs des objets EJB et autres objets dans JNDI


Vous pouvez accder des objets EJB (Enterprise JavaBean) et autres objets stocks dans JNDI (Java Naming and Directory Interface) en appelant des mthodes sur une destination constituant une classe de faade de service qui recherche un objet dans JNDI et appelle sa mthode. Vous pouvez utiliser des objets avec ou sans tat pour appeler les mthodes dobjets Enterprise JavaBean et dautres objets utilisant JNDI. Pour un objet EJB, vous pouvez appeler une classe de faade de service qui renvoie lobjet EJB de JNDI et appelle une mthode sur lobjet EJB. Dans la classe Java, vous pouvez utiliser le schma de codage Java standard, dans lequel vous crez un contexte initial et effectuez une recherche JNDI. Pour un objet EJB, utilisez galement le schma de codage standard dans lequel la classe contient des mthodes qui appellent la mthode create() de lobjet racine EJB et les mthodes mtier de lobjet EJB rsultant. Lexemple suivant utilise une mthode appele getHelloData() sur une destination de classe de faade :
<mx:RemoteObject id="Hello" destination="roDest"> <mx:method name="getHelloData"/> </mx:RemoteObject>

Dans le ct Java, la mthode getHelloData() peut encapsuler tous les lments ncessaires pour appeler une mthode mtier sur un objet EJB. Dans lexemple ci-aprs, la mthode Java effectue les actions suivantes :

cre un nouveau contexte initial pour appeler lobjet EJB ; effectue une recherche JNDI qui obtient un objet racine EJB ; appelle la mthode create() de lobjet racine EJB ; appelle la mthode sayHello() de lobjet EJB.
... public void getHelloData() { try{ InitialContext ctx = new InitialContext(); Object obj = ctx.lookup("/Hello"); HelloHome ejbHome = (HelloHome) PortableRemoteObject.narrow(obj, HelloHome.class); HelloObject ejbObject = ejbHome.create(); String message = ejbObject.sayHello(); } catch (Exception e); } ...

Noms de mthodes rservs


La bibliothque daccs distant Flex utilise les noms de mthodes suivants ; ne les utilisez pas pour vos propres mthodes :

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 110


Accs aux donnes ct serveur

addHeader() addProperty() deleteHeader() hasOwnProperty() isPropertyEnumerable() isPrototypeOf() registerClass() toLocaleString() toString() unwatch() valueOf() watch()

Veillez en outre ce que les noms des mthodes ne commencent pas par un caractre de soulignement (_). Pour accder aux mthodes (oprations) RemoteObject, il suffit gnralement de les nommer daprs la variable de service. Des conflits de noms risquent toutefois de se produire si le nom dune opration correspond une mthode dfinie pour le service. Dans ActionScript, vous pouvez appliquer la mthode suivante un composant RemoteObject pour renvoyer lopration du nom donn :
public function getOperation(name:String):Operation

Srialisation entre ActionScript et Java


LiveCycle Data Services ES et BlazeDS srialisent les donnes entre ActionScript (AMF 3) et Java et les types de donnes ColdFusion dans les deux directions. Pour plus dinformations sur les types de donnes ColdFusion, voir la documentation ColdFusion. Conversion des donnes dActionScript en Java Le type des donnes envoyes dune application un objet Java par des paramtres de mthodes est automatiquement converti dActionScript en Java. Lorsque LiveCycle Data Services ES ou Blaze DS recherche une mthode approprie sur lobjet Java, il utilise dautres conversions, moins systmatiques, pour trouver une correspondance. Les types de donnes de base du client (les valeurs Boolean et String, par exemple) correspondent en gnral exactement une API distante. Flex tente toutefois deffectuer certaines conversions simples lorsquil recherche une mthode approprie sur un objet Java. Un tableau ActionScript peut indexer des entres de deux manires. Un tableau strict est un tableau dans lequel tous les index sont des nombres. Un tableau associatif est un tableau dans lequel au moins un index est bas sur une chane. Il est important de savoir quel type de tableau vous envoyez au serveur, car ce type change le type de donnes des paramtres utiliss pour invoquer une mthode sur un objet Java. Un tableau dense est un tableau dans lequel tous les index numriques sont conscutifs, sans cart, commenant 0 (zro). Un tableau trs dense est un tableau dans lequel il existe des carts entre les index numriques ; le tableau est trait comme un objet et les index numriques deviennent des proprits dsrialises dans un objet java.util.Map pour viter lenvoi de nombreuses entres nulles. Le tableau suivant rpertorie les conversions ActionScript (AMF 3) vers Java prises en charge pour les types de donnes simples.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 111


Accs aux donnes ct serveur

Type ActionScript (AMF 3) Tableau (dense)

Dsrialisation vers Java java.util.List

Liaison de type Java prise en charge java.util.Collection, Object[ ] (tableau natif) Si le type est une interface, il est mapp sur les implmentations dinterface suivantes :

List devient ArrayList. SortedSet devient TreeSet. Set devient HashSet. Collection devient ArrayList.

Une nouvelle occurrence dune implmentation Collection personnalise est lie ce type. Tableau (trs dense) Boolean Chane "true" ou "false" flash.utils.ByteArray flash.utils.IExternalizable Date byte [] java.io.Externalizable java.util.Date (format pour UTC (Coordinated Universal Time)) int/uint java.lang.Integer java.util.Date, java.util.Calendar, java.sql.Timestamp, java.sql.Time, java.sql.Date java.util.Map java.lang.Boolean java.util.Map Boolean, boolean, String

java.lang.Double, java.lang.Long, java.lang.Float, java.lang.Integer, java.lang.Short, java.lang.Byte, java.math.BigDecimal, java.math.BigInteger, String, types primitifs de double, long, float, int, short, byte primitives java.lang.Double, java.lang.Long, java.lang.Float, java.lang.Integer, java.lang.Short, java.lang.Byte, java.math.BigDecimal, java.math.BigInteger, String, 0 (zro) Si null est envoy, types primitifs de double, long, float, int, short, byte.

null Number

null java.lang.Double

Objet (gnrique)

java.util.Map

Si une interface Map est spcifie, cre un nouveau java.util.HashMap pour java.util.Map et un nouveau java.util.TreeMap pour java.util.SortedMap. java.lang.String, java.lang.Boolean, java.lang.Number, java.math.BigInteger, java.math.BigDecimal, char[], tout type de nombre primitif Objet typ

String

java.lang.String

Objet typ

Objet typ Lorsque vous utilisez une balise de mtadonnes [RemoteClass] qui spcifie un nom de classe distante. Le type Bean doit comporter un constructeur no-args public.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 112


Accs aux donnes ct serveur

Type ActionScript (AMF 3) Non dfini XML XMLDocument (type XML existant)

Dsrialisation vers Java null org.w3c.dom.Document org.w3c.dom.Document

Liaison de type Java prise en charge


null pour Object, valeurs par dfaut pour les primitives

org.w3c.dom.Document org.w3c.dom.Document Vous pouvez activer la prise en charge des donnes XML existantes pour le type XMLDocument sur tout canal dfini dans le fichier services-config.xml. Ce paramtre nintervient que dans lenvoi de donnes du serveur au client ; il dtermine la manire dont les occurrences org.w3c.dom.Document sont envoyes ActionScript. Pour plus dinformations, voir .

Les valeurs primitives ne peuvent pas tre dfinies sur null dans Java. Lors de la transmission de valeurs Boolean et Number du client vers un objet Java, Flex interprte les valeurs null comme valeurs par dfaut des types primitifs ; par exemple, 0 pour double, float, long, int, short, byte, \u0000 pour char et false pour Boolean. Seuls les types Java primitifs obtiennent des valeurs par dfaut. LiveCycle Data Services ES et BlazeDS traitent les objets java.lang.Throwable comme tout autre objet typ. Ces objets sont traits avec des rgles recherchant des champs publics et des proprits bean. Des objets typs sont renvoys au client. Ces rgles sont identiques aux rgles bean ordinaires, ceci prs quelles recherchent des getters pour les proprits en lecture seule. La quantit dinformations obtenues dune exception Java est ainsi plus importante. Afin de spcifier un comportement existant pour les objets Throwable, dfinissez la proprit legacy-throwable dun canal sur true. Pour plus dinformations, voir . Vous pouvez transmettre des tableaux stricts en tant que paramtres des mthodes sattendant une implmentation des API java.util.Collection ou de tableau Java natif. Une collection Java peut contenir nimporte quel nombre de types dobjets, alors quun tableau Java ncessite que les entres soient du mme type (java.lang.Object[ ] et int[ ], par exemple). LiveCycle Data Services ES et BlazeDS convertissent aussi les tableaux stricts ActionScript en implmentations appropries pour les interfaces API Collection courantes. Par exemple, si un tableau strict ActionScript est envoy la mthode dobjet Java public void addProducts(java.util.Set products), LiveCycle Data Services ES et BlazeDS le convertissent en une occurrence java.util.HashSet avant de le transmettre en tant que paramtre, car HashSet est une implmentation approprie pour linterface java.util.Set. De mme, LiveCycle Data Services ES et BlazeDS transmettent une occurrence de java.util.TreeSet aux paramtres typs avec linterface java.util.SortedSet. LiveCycle Data Services ES et BlazeDS transmettent une occurrence de java.util.ArrayList aux paramtres typs avec linterface java.util.List et toute autre interface dveloppant java.util.Collection. Ces types sont ensuite renvoys au client en tant quoccurrences mx.collections.ArrayCollection. Pour renvoyer au client les tableaux ActionScript normaux, vous devez dfinir llment legacy-collection sur true dans la section serialization des proprits dune dfinition de canal. Pour plus dinformations, voir . Mappage explicite dobjets ActionScript et Java Pour les objets Java que LiveCycle Data Services ES et BlazeDS ne traitent pas implicitement, les valeurs trouves dans les proprits bean publiques avec les mthodes get/set et les variables publiques sont envoyes au client en tant que proprits sur un objet. Les proprits prives, les constantes, les proprits statiques et les proprits en lecture seule entre autres ne sont pas srialises. Pour les objets ActionScript, les proprits publiques dfinies avec les accesseurs get/set et les variables publiques sont envoyes au serveur.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 113


Accs aux donnes ct serveur

LiveCycle Data Services ES et BlazeDS utilisent la classe Java standard java.beans.Introspector afin dobtenir des descripteurs de proprits pour une classe JavaBean. Il fait en outre appel la rflexion pour collecter des champs publics sur une classe et a recours de prfrence des proprits bean plutt qu des champs. Les noms des proprits Java et ActionScript doivent correspondre. Le code Flash Player natif dtermine la manire dont les classes ActionScript sont introspectes sur le client. Dans la classe ActionScript, utilisez la balise de mtadonnes [RemoteClass(alias=" ")] pour crer un objet ActionScript se mappant directement sur lobjet Java. La classe ActionScript vers laquelle les donnes sont converties doit tre utilise ou rfrence dans le fichier MXML afin dtre lie dans le fichier SWF et disponible lors de lexcution. Pour ce faire, une manire efficace consiste projeter lobjet de rsultat, comme lillustre lexemple suivant :
var result:MyClass = MyClass(event.result);

La classe elle-mme doit utiliser des rfrences fortement types de sorte que ses dpendances soient aussi lies. Les exemples suivants prsentent le code source dune classe ActionScript utilisant la balise de mtadonnes [RemoteClass(alias=" ")] :
package samples.contact { [Bindable] [RemoteClass(alias="samples.contact.Contact")] public class Contact { public var contactId:int; public var firstName:String; public var lastName:String; public var address:String; public var city:String; public var state:String; public var zip:String; } }

Vous pouvez utiliser la balise de mtadonnes [RemoteClass] sans alias si vous neffectuez pas de mappage un objet Java du serveur, mais que vous renvoyez le type dobjet depuis le serveur. Lobjet ActionScript est srialis vers un objet Map spcial lorsquil est envoy au serveur. Lobjet renvoy du serveur aux clients est toutefois le type ActionScript dorigine. Pour empcher lenvoi dune proprit au serveur partir dune classe ActionScript, utilisez la balise de mtadonnes
[Transient] situe au-dessus de la dclaration de cette proprit dans la classe ActionScript.

Conversion des donnes de Java en ActionScript Un objet renvoy par une mthode Java est converti de Java en ActionScript. LiveCycle Data Services ES et BlazeDS traitent galement les objets figurant dans des objets. LiveCycle Data Services ES traite implicitement les types de donnes Java rpertoris dans le tableau suivant.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 114


Accs aux donnes ct serveur

Type Java java.lang.String java.lang.Boolean, boolean java.lang.Integer, int

Type ActionScript (AMF 3) String Boolean int Si la valeur est < 0xF0000000 || value > 0x0FFFFFFF, la valeur est leve Number en raison des conditions de codage AMF.

java.lang.Short, short

int Si i est < 0xF0000000 || i > 0x0FFFFFFF, la valeur est leve Number.

java.lang.Byte, byte[]

int Si i est < 0xF0000000 || i > 0x0FFFFFFF, la valeur est leve Number.

java.lang.Byte[] java.lang.Double, double java.lang.Long, long java.lang.Float, float java.lang.Character, char java.lang.Character[], char[] java. math.BigInteger java.math.BigDecimal java.util.Calendar

flash.utils.ByteArray Number Number Number String String String String Date Les dates sont envoyes dans le fuseau horaire UTC (Coordinated Universal Time). Les clients et les serveurs doivent rgler lheure en fonction des fuseaux horaires.

java.util.Date

Date Les dates sont envoyes dans le fuseau horaire UTC (Coordinated Universal Time). Les clients et les serveurs doivent rgler lheure en fonction des fuseaux horaires.

java.util.Collection (java.util.ArrayList, par exemple) java.lang.Object[] java.util.Map java.util.Dictionary org.w3c.dom.Document null java.lang.Object (autre type que les types prcdemment rpertoris)

mx.collections.ArrayCollection

Array Objet (non typ). Par exemple, un objet java.util.Map[] est converti en tableau (dobjets). Objet (non typ) Objet XML null Objet typ Les objets sont srialiss laide de rgles dintrospection JavaBean et incluent galement des champs publics. Les champs statiques, transitoires ou non publics ainsi que les proprits bean non publiques ou statiques sont exclus.

Configuration de la srialisation AMF sur un canal Vous pouvez prendre en charge la srialisation du type AMF existant utilis dans les versions prcdentes de Flex et configurer dautres proprits de srialisation dans les dfinitions de canaux du fichier services-config.xml.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 115


Accs aux donnes ct serveur

Le tableau suivant dcrit les proprits que vous pouvez dfinir dans llment <serialization> dune dfinition de canal.
Proprit
<ignore-property-errors> true</ignore-property-errors>

Description La valeur par dfaut est true. Dtermine si le point de terminaison doit gnrer une erreur lorsquun objet entrant du client comporte des proprits non prvues ne pouvant pas tre dfinies sur lobjet du serveur. La valeur par dfaut est false. La valeur true active la journalisation des erreurs relatives aux proprits non prvues. La valeur par dfaut est false. La valeur true active le renvoi des occurrences de java.util.Collection en tant que tableaux ActionScript. La valeur false active le renvoi des occurrences de java.util.Collection en tant quoccurrences mx.collections.ArrayCollection. La valeur par dfaut est false. La valeur true active la srialisation des occurrences java.util.Map en tant que tableau ECMA ou tableau associatif, et non en tant quobjet anonyme. La valeur par dfaut est false. La valeur true active la srialisation des occurrences org.w3c.dom.Document en tant quoccurrences flash.xml.XMLDocument et non en tant quoccurrences XML (compatibles E4X) intrinsques. La valeur par dfaut est false. La valeur true active la srialisation des occurrences java.lang.Throwable en tant quobjets dinformations de statut AMF ( la place de la srialisation bean normale, incluant les proprits en lecture seule). Spcifie une implmentation de flex.messaging.io.TypeMarshaller qui traduit un objet en occurrence de la classe dsire. Utilis linvocation dune mthode Java ou au remplissage dune occurrence Java, lorsque le type de lobjet dentre de la dsrialisation (un objet anonyme ActionScript par exemple est toujours dsrialis en tant quobjet java.util.HashMap) ne correspond pas lAPI de destination (java.util.SortedMap, par exemple). Le type peut donc tre converti en type souhait. La valeur par dfaut est false. Commutateur avanc permettant loutil de dsrialisation de conserver la trace des objets de rfrences lorsquune traduction de type doit avoir lieu ; par exemple, lorsquun objet anonyme est envoy pour une proprit de type java.util.SortedMap, lobjet est dabord dsrialis en un objet java.util.Map en tant quobjet normal, puis traduit en une implmentation approprie de SortedMap (java.util.TreeMap, par exemple). Si dautres objets pointaient vers le mme objet anonyme dun graphique dobjets, ce paramtre restaure ces rfrences au lieu de crer des implmentations SortedMap. Notez que lattribution de la valeur true cette proprit peut conduire un ralentissement considrable des performances en prsence de larges volumes de donnes. La valeur par dfaut est true. Dfini sur false, ce commutateur avanc empche loutil de dsrialisation de crer des occurrences dobjets fortement typs, retient les informations de type et dsrialise les proprits brutes dans une implmentation Map, en particulier flex.messaging.io.ASObject. Les classes figurant dans les packagesflex.* sont toujours instancies.

<log-property-errors>false</logproperty-errors> <legacy-collection>false</legacycollection>

<legacy-map>false</legacy-map>

<legacy-xml>false</legacy-xml>

<legacy-throwable>false</legacythrowable>

<type-marshaller>className</typemarshaller>

<restore-references> false</restore-references>

<instantiate-types> true</instantiate-types>

Utilisation de la srialisation personnalise


Si les mcanismes standard de srialisation et de dsrialisation de donnes entre ActionScript sur le client et Java sur le serveur ne rpondent pas vos besoins, vous pouvez crire votre propre schma de srialisation. Vous implmentez linterface flash.utils.IExternalizable ActionScript sur le client et linterface java.io.Externalizable Java correspondante sur le serveur.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 116


Accs aux donnes ct serveur

La srialisation est souvent utilise pour viter de transmettre lensemble des proprits de la reprsentation ct client ou ct serveur dun objet travers le niveau rseau. Lorsque vous implmentez la srialisation personnalise, vous pouvez coder vos classes afin que les proprits spcifiques uniquement client ou uniquement serveur ne soient pas transmises via le rseau. Lorsque vous utilisez le schma de srialisation standard, toutes les proprits publiques font laller-retour entre le client et le serveur. Ct client, lidentit dune classe qui implmente linterface flash.utils.IExternalizable est crite dans le flux de srialisation. La classe srialise et reconstruit ltat de ses occurrences. La classe implmente les mthodes writeExternal() et readExternal() de linterface IExternalizable pour contrler le contenu et le format du flux de srialisation, mais pas le nom ou le type de classe, pour un objet et ses supertypes. Ces mthodes remplacent le comportement de srialisation AMF natif. Elles doivent tre symtriques leur homologue distant pour enregistrer ltat de la classe. Ct serveur, une classe Java qui implmente linterface java.io.Externalizable excute des fonctionnalits analogues une classe ActionScript implmentant linterface flash.utils.IExternalizable. Remarque : nutilisez pas des types qui implmentent linterface IExternalizable avec la classe HTTPChannel si une srialisation par rfrence prcise est requise. Cette opration conduit en effet la perte des rfrences entre les objets rcurrents, qui apparaissent alors clones au niveau du point de terminaison. Lexemple suivant prsente le code source complet de la version (ActionScript) client dune classe Product se mappant sur une classe Product Java sur le serveur. La classe Product client implmente linterface IExternalizable et la classe Product serveur linterface Externalizable.
// Product.as package samples.externalizable { import flash.utils.IExternalizable; import flash.utils.IDataInput; import flash.utils.IDataOutput; [RemoteClass(alias="samples.externalizable.Product")] public class Product implements IExternalizable { public function Product(name:String=null) { this.name = name; } public public public public var var var var id:int; name:String; properties:Object; price:Number;

public function readExternal(input:IDataInput):void { name = input.readObject() as String; properties = input.readObject(); price = input.readFloat(); } public function writeExternal(output:IDataOutput):void { output.writeObject(name); output.writeObject(properties); output.writeFloat(price); } } }

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 117


Accs aux donnes ct serveur

La classe Product client utilise deux types de srialisation. Elle utilise la srialisation standard, compatible avec linterface java.io.Externalizable, et la srialisation AMF 3. Lexemple suivant prsente la mthode writeExternal() de la classe Product client, qui utilise les deux types de srialisation :
public function writeExternal(output:IDataOutput):void { output.writeObject(name); output.writeObject(properties); output.writeFloat(price); }

Ainsi que lillustre lexemple suivant, la mthode writeExternal() de la classe Product serveur est presque identique la version client de cette mthode :
public void writeExternal(ObjectOutput out) throws IOException { out.writeObject(name); out.writeObject(properties); out.writeFloat(price); }

Dans la mthode writeExternal() de la classe Product client, la mthode flash.utils.IDataOutput.writeFloat() est un exemple de mthode de srialisation standard qui rpond aux spcifications des mthodes java.io.DataInput.readFloat() Java pour utiliser des types primitifs. Cette mthode envoie la proprit price, de type Float, la classe Product serveur. Lexemple de srialisation AMF 3 dans la mthode writeExternal() de la classe Product client est lappel la mthode flash.utils.IDataOutput.writeObject(), qui se mappe lappel de la mthode java.io.ObjectInput.readObject() dans la mthode readExternal() de la classe Product serveur. La mthode flash.utils.IDataOutput.writeObject() envoie la classe Product serveur la proprit properties, qui constitue un objet, et la proprit name, qui constitue une chane. Cette opration est possible car le point de terminaison AMFChannel comporte une implmentation de linterface java.io.ObjectInput qui sattend ce que les donnes envoyes par la mthode writeObject() soient au format AMF 3. Ensuite, lorsque la mthode readObject() est appele dans la mthode readExternal() de la classe Product serveur, elle utilise la dsrialisation AMF 3 ; cest la raison pour laquelle la version ActionScript de la valeur properties est suppose tre de type Map et la valeur name de type String. Lexemple suivant prsente la source complte de la classe Product serveur :

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 118


Accs aux donnes ct serveur

// Product.java package samples.externalizable; import import import import import java.io.Externalizable; java.io.IOException; java.io.ObjectInput; java.io.ObjectOutput; java.util.Map;

/** * This Externalizable class requires that clients sending and * receiving instances of this type adhere to the data format * required for serialization. */ public class Product implements Externalizable { private String inventoryId; public String name; public Map properties; public float price; public Product() { } /** * Local identity used to track third-party inventory. This property is * not sent to the client because it is server specific. * The identity must start with an 'X'. */ public String getInventoryId() { return inventoryId; } public void setInventoryId(String inventoryId) { if (inventoryId != null && inventoryId.startsWith("X")) { this.inventoryId = inventoryId; } else { throw new IllegalArgumentException("3rd party product inventory identities must start with 'X'"); } } /** * Deserializes the client state of an instance of ThirdPartyProxy * by reading in String for the name, a Map of properties * for the description, and * a floating point integer (single precision) for the price. */ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { // Read in the server properties from the client representation. name = (String)in.readObject(); properties = (Map)in.readObject(); price = in.readFloat();

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 119


Accs aux donnes ct serveur

setInventoryId(lookupInventoryId(name, price)); } /** * Serializes the server state of an instance of ThirdPartyProxy * by sending a String for the name, a Map of properties * String for the description, and a floating point * integer (single precision) for the price. Notice that the inventory * identifier is not sent to external clients. */ public void writeExternal(ObjectOutput out) throws IOException { // Write out the client properties from the server representation. out.writeObject(name); out.writeObject(properties); out.writeFloat(price); } private static String lookupInventoryId(String name, float price) { String inventoryId = "X" + name + Math.rint(price); return inventoryId; } }

Lexemple suivant prsente la mthode readExternal() de la classe Product serveur :


public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { // Read in the server properties from the client representation. name = (String)in.readObject(); properties = (Map)in.readObject(); price = in.readFloat(); setInventoryId(lookupInventoryId(name, price)); }

La mthode writeExternal() de la classe Product client nenvoie pas la proprit id au serveur pendant la srialisation car elle nest daucune utilit la version serveur de lobjet Product. De mme, la mthode writeExternal() de la classe Product serveur nenvoie pas la proprit inventoryId au client car il sagit dune proprit spcifique au serveur. Notez que pendant la srialisation, les noms des proprits dune classe Product ne sont envoys ni dans un sens, ni dans lautre. Ltat de la classe tant fixe et grable, les proprits sont envoyes dans un ordre bien dfini sans leur nom. La mthode readExternal() les lit dans lordre appropri.

Transmission de paramtres explicites et liaison de paramtres


Lappel des composants HTTPService, WebService et RemoteObject peut se faire de deux manires diffrentes : par la transmission de paramtres explicites et par la liaison de paramtres. La transmission de paramtres explicites consiste fournir des informations un service sous la forme de paramtres pour une fonction ActionScript. Cette manire dappeler un service ressemble fortement lappel de mthodes sous Java. Les validateurs de donnes Flex ne peuvent pas tre automatiquement utiliss avec la transmission de paramtres explicites.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 120


Accs aux donnes ct serveur

La liaison de paramtres vous permet de copier des donnes de contrles de linterface utilisateur ou de modles pour demander des paramtres. Elle nest disponible que pour les composants daccs aux donnes que vous dclarez dans MXML. Vous pouvez appliquer des validateurs aux valeurs des paramtres avant de soumettre des demandes aux services. Pour plus dinformations sur la liaison de donnes et les modles de donnes, voir Data binding et Storing data. Pour plus dinformations sur la validation de donnes, voir Validating Data. La liaison de paramtres consiste dclarer des balises de paramtres de la mthode RemoteObject imbriques dans une balise <mx:arguments> sous une balise <mx:method>, des balises de paramtres HTTPService imbriques dans une balise <mx:request> ou des balises de paramtres dopration WebService imbriques dans une balise <mx:request> sous une balise <mx:operation>. La mthode send() permet denvoyer la demande.

Transmission de paramtres explicites avec les composants RemoteObject et WebService


La transmission de paramtres explicites utilise avec les composants RemoteObject est similaire celle utilise avec les composants WebService. Lexemple suivant illustre le code MXML utilis pour dclarer un composant RemoteObject et appeler un service en utilisant la transmission de paramtres explicites dans lcouteur dvnement click dun contrle Button. Un contrle ComboBox fournit les donnes au service. Des couteurs dvnement simple traitent les vnements result et fault de niveau service.
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <mx:RemoteObject id="employeeRO" destination="SalaryManager" result="empList=event.result" fault="Alert.show(event.fault.faultString, 'Error');"/> </fx:Declarations> <s:ComboBox id="dept" width="150"> <s:dataProvider> <mx:ArrayCollection> <mx:source> <fx:Object label="Engineering" data="ENG"/> <fx:Object label="Product Management" data="PM"/> <fx:Object label="Marketing" data="MKT"/> </mx:source> </mx:ArrayCollection> </s:dataProvider> </s:ComboBox> <s:Button label="Get Employee List" click="employeeRO.getList(dept.selectedItem.data)"/> </s:Application>

Transmission de paramtres explicites avec les composants HTTPService


La transmission de paramtres explicites avec les composants HTTPService diffre de la transmission de paramtres explicites avec les composants RemoteObject et WebService. Lappel dun service se fait toujours avec la mthode send() dun composant HTTPService. Lapproche nest donc pas la mme quavec les composants RemoteObject et WebService, sur lesquels vous appelez des mthodes qui sont des versions ct client des mthodes ou oprations du service RPC.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 121


Accs aux donnes ct serveur

La transmission de paramtres explicites vous permet de spcifier un objet contenant des paires nom-valeur comme paramtre de la mthode send(). Le paramtre de la mthode send() doit tre un type de base simple ; vous ne pouvez pas utiliser dobjets imbriqus complexes car il nexiste aucune mthode gnrique permettant de les convertir en paires nom-valeur. si vous ne spcifiez pas de paramtre de la mthode send(), le composant HTTPService utilise les paramtres dinterrogation spcifis dans la balise <mx:request>. Les exemples suivants illustrent deux manires dappeler un service HTTP en utilisant la mthode send() avec un paramtre. Le second exemple indique galement comment appeler la mthode cancel() pour annuler un appel de service HTTP.
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <mx:HTTPService id="myService" destination="Dest" useProxy="true"/> </fx:Declarations> <fx:Script> <![CDATA[ public function callService():void { // Cancel all previous pending calls. myService.cancel(); var params:Object = new Object(); params.param1 = 'val1'; myService.send(params); } ]]> </fx:Script> <!-- HTTP service call with a send() method that takes a variable as its parameter. The value of the variable is an Object. --> <s:Button label="Button 1" click="myService.send({param1: 'val1'});" x="0" y="0"/> <!-- HTTP service call with an object as a send() method parameter that provides query parameters. --> <s:Button label="Button 2" click="callService();" x="0" y="30"/> </s:Application>

Liaison de paramtres avec les composants RemoteObject


Lorsque vous utilisez la liaison de paramtres avec des composants RemoteObject, vous dclarez toujours des mthodes dans la balise <mx:method> dun objet RemoteObject. Une balise <mx:method> peut contenir une balise <mx:arguments> contenant des balises enfant pour les paramtres de la mthode. La proprit name dune balise <mx:method> doit correspondre au nom dune mthode du service. Lordre des balises dargument doit correspondre celui des paramtres de mthode du service. Vous pouvez nommer les balises dargument de manire telle ce que leurs noms correspondent le plus possible aux noms rels des paramtres de mthode correspondants, mais cela nest pas ncessaire.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 122


Accs aux donnes ct serveur

Remarque : si les balises dargument dans une balise <mx:arguments> portent le mme nom, les appels de service chouent si la mthode distante nattend pas un tableau comme unique source dentre. Aucun avertissement ce sujet nest affich lorsque lapplication est compile. Vous pouvez lier des donnes aux paramtres de mthode dun composant RemoteObject. Vous rfrencez les noms de balise des paramtres en vue de la liaison et de la validation de donnes. Lexemple suivant illustre une mthode comportant deux paramtres lis la proprit text des contrles TextInput. Un validateur PhoneNumberValidator est assign arg1, qui est le nom de la premire balise dargument.
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <mx:RemoteObject id="ro" destination="roDest"> <mx:method name="setData"> <mx:arguments> <arg1>{text1.text}</arg1> <arg2>{text2.text}</arg2> </mx:arguments> </mx:method> </mx:RemoteObject> <mx:PhoneNumberValidator source="{ro.setData.arguments}" property="arg1"/> </fx:Declarations> <s:TextInput id="text1" x="0" y="0"/> <s:TextInput id="text2" x="0" y="30"/> </s:Application>

Flex envoie les valeurs des balises dargument la mthode dans lordre spcifi par les balises MXML. Lexemple suivant utilise la liaison de paramtres dans la balise <mx:method> dun composant RemoteObject pour lier les donnes dun lment ComboBox slectionn lopration employeeRO.getList lorsque lutilisateur clique sur un contrle Button. La liaison de paramtres correspond un appel de service par lutilisation de la mthode send() sans paramtres.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 123


Accs aux donnes ct serveur

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <mx:RemoteObject id="employeeRO" destination="roDest" showBusyCursor="true" fault="Alert.show(event.fault.faultString, 'Error');"> <mx:method name="getList"> <mx:arguments> <deptId>{dept.selectedItem.data}</deptId> </mx:arguments> </mx:method> </mx:RemoteObject> <s:ArrayCollection id="employeeAC" source="{ArrayUtil.toArray(employeeRO.getList.lastResult)}"/> </fx:Declarations> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.utils.ArrayUtil; ]]> </fx:Script> <s:HGroup> <s:Label text="Select a department:" x="10" y="200"/> <s:ComboBox id="dept" width="150" x="120" y="200"> <s:dataProvider> <mx:ArrayCollection> <mx:source> <fx:Object label="Engineering" data="ENG"/> <fx:Object label="Product Management" data="PM"/> <fx:Object label="Marketing" data="MKT"/> </mx:source> </mx:ArrayCollection> </s:dataProvider> </s:ComboBox> <s:Button label="Get Employee List" click="employeeRO.getList.send()" x="320" y="200"/> </s:HGroup> <mx:DataGrid dataProvider="{employeeAC}" width="100%"> <mx:columns> <mx:DataGridColumn dataField="name" headerText="Name"/> <mx:DataGridColumn dataField="phone" headerText="Phone"/> <mx:DataGridColumn dataField="email" headerText="Email"/> </mx:columns> </mx:DataGrid> </s:Application>

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 124


Accs aux donnes ct serveur

Si vous ignorez si le rsultat dun appel de service contient un tableau ou un objet individuel, vous pouvez utiliser la mthode toArray() de la classe mx.utils.ArrayUtil pour convertir le rsultat en un tableau, comme lindique cet exemple. Si vous transmettez la mthode toArray() un objet individuel, il renvoie un tableau dont le seul lment est cet objet. Si vous transmettez un tableau la mthode, elle renvoie le mme tableau. Pour plus dinformations sur lutilisation dobjets ArrayCollection, voir Data providers and collections.

Liaison de paramtres avec les composants HTTPService


Lorsquun service HTTP accepte des paramtres dinterrogation, vous pouvez les dclarer comme balises enfant dune balise <mx:request>. Les noms des balises doivent correspondre aux noms des paramtres dinterrogation auxquels sattend le service. Lexemple suivant illustre la liaison de paramtres dans la balise <mx:request> dun composant HTTPService pour lier les donnes dun lment ComboBox slectionn la demande employeeSrv lorsque lutilisateur clique sur un contrle Button. La liaison de paramtres correspond un appel de service par lutilisation de la mthode send() sans paramtres. Cet exemple prsente une proprit url sur le composant HTTPService. La manire dont vous appelez un service est toutefois la mme, que vous vous connectiez au service directement ou passiez par une destination.
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <mx:HTTPService id="employeeSrv" url="employees.jsp"> <mx:request> <deptId>{dept.selectedItem.data}</deptId> </mx:request> </mx:HTTPService> <mx:ArrayCollection id="employeeAC" source= "{ArrayUtil.toArray(employeeSrv.lastResult.employees.employee)}"/> </fx:Declarations> <fx:Script> <![CDATA[ import mx.utils.ArrayUtil; ]]> </fx:Script> <s:HGroup> </s:HGroup> <mx:DataGrid dataProvider="{employeeAC}" width="100%" x="0" y="0">

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 125


Accs aux donnes ct serveur

<mx:columns> <mx:DataGridColumn dataField="name" headerText="Name"/> <mx:DataGridColumn dataField="phone" headerText="Phone"/> <mx:DataGridColumn dataField="email" headerText="Email"/> </mx:columns> </mx:DataGrid> <s:Label text="Select a department:" x="9" y="190"/> <s:ComboBox id="dept" width="150" x="152" y="190"> <s:dataProvider> <mx:ArrayCollection> <mx:source> <fx:Object label="Engineering" data="ENG"/> <fx:Object label="Product Management" data="PM"/> <fx:Object label="Marketing" data="MKT"/> </mx:source> </mx:ArrayCollection> </s:dataProvider> </s:ComboBox> <s:Button label="Get Employee List" click="employeeSrv.send();" x="327" y="190"/> </s:Application>

Pour vrifier si le rsultat dun appel de service contient un tableau ou un objet individuel, vous pouvez utiliser la mthode toArray() de la classe mx.utils.ArrayUtil afin de convertir le rsultat en tableau, comme lillustre lexemple prcdent. Si vous transmettez la mthode toArray() un objet individuel, il renvoie un tableau avec cet objet comme unique lment de tableau. Si vous transmettez un tableau la mthode, elle renvoie le mme tableau. Pour plus dinformations sur lutilisation dobjets ArrayCollection, voir Data providers and collections.

Liaison de paramtres avec les composants WebService


Lorsque vous utilisez la liaison de paramtres avec un composant WebService, vous dclarez toujours les oprations dans les balises <mx:operation> du composant WebService. Une balise <mx:operation> peut contenir une balise <mx:request> comportant les nuds XML auxquels sattend lopration. La proprit name dune balise <mx:operation> doit correspondre lun des noms de lopration WebService. Vous pouvez lier des donnes aux paramtres des oprations WebService. Vous rfrencez les noms de balise des paramtres en vue de la liaison et de la validation de donnes. Lexemple suivant illustre comment la liaison de paramtres est utilise dans la balise <mx:operation> dun composant WebService pour lier les donnes dun lment ComboBox slectionn lopration employeeWS.getList lorsque lutilisateur clique sur un contrle Button. La balise <deptId> correspond directement au paramtre deptId de lopration getList. La liaison de paramtres correspond un appel de service par lutilisation de la mthode send() sans paramtres. Cet exemple prsente une proprit destination sur le composant WebService. La manire dont vous appelez un service est toutefois la mme, que vous vous connectiez au service directement ou passiez par une destination.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 126


Accs aux donnes ct serveur

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <mx:WebService id="employeeWS" destination="wsDest" showBusyCursor="true" fault="Alert.show(event.fault.faultString)"> <mx:operation name="getList"> <mx:request> <deptId>{dept.selectedItem.data}</deptId> </mx:request> </mx:operation> </mx:WebService> <s:ArrayCollection id="employeeAC" source="{ArrayUtil.toArray(employeeWS.getList.lastResult)}"/> </fx:Declarations> <fx:Script> <![CDATA[ import mx.utils.ArrayUtil; import mx.controls.Alert; ]]> </fx:Script> <s:HGroup> <s:Label text="Select a department:"/> <s:ComboBox id="dept" width="150"> <s:dataProvider> <mx:ArrayCollection> <mx:source> <fx:Object label="Engineering" data="ENG"/> <fx:Object label="Product Management" data="PM"/> <fx:Object label="Marketing" data="MKT"/> </mx:source> </mx:ArrayCollection> </s:dataProvider> </s:ComboBox> <s:Button label="Get Employee List" click="employeeWS.getList.send()"/> </s:HGroup> <mx:DataGrid dataProvider="{employeeAC}" width="100%"> <mx:columns> <mx:DataGridColumn dataField="name" headerText="Name"/> <mx:DataGridColumn dataField="phone" headerText="Phone"/> <mx:DataGridColumn dataField=" to email" headerText="Email"/> </mx:columns> </mx:DataGrid> </s:Application>

Vous pouvez aussi spcifier manuellement un corps de demande SOAP entier dans XML avec toutes les informations despace de noms correctement dfinies dans une balise <mx:request>. Pour ce faire, attribuez la valeur xml lattribut format de la balise <mx:request>, comme lillustre lexemple suivant :

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 127


Accs aux donnes ct serveur

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <mx:WebService id="ws" wsdl="http://api.google.com/GoogleSearch.wsdl" useProxy="true"> <mx:operation name="doGoogleSearch" resultFormat="xml"> <mx:request format="xml"> <ns1:doGoogleSearch xmlns:ns1="urn:GoogleSearch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <key xsi:type="xsd:string">XYZ123</key> <q xsi:type="xsd:string">Balloons</q> <start xsi:type="xsd:int">0</start> <maxResults xsi:type="xsd:int">10</maxResults> <filter xsi:type="xsd:boolean">true</filter> <restrict xsi:type="xsd:string"/> <safeSearch xsi:type="xsd:boolean">false</safeSearch> <lr xsi:type="xsd:string" /> <ie xsi:type="xsd:string">latin1</ie> <oe xsi:type="xsd:string">latin1</oe> </ns1:doGoogleSearch> </mx:request> </mx:operation> </mx:WebService> </fx:Declarations> </s:Application>

Traitement des rsultats des services


Aprs que le composant RPC a appel un service, les donnes renvoyes par le service sont places dans un objet lastResult. Par dfaut, la valeur de la proprit resultFormat des composants HTTPService et des oprations du composant WebService est object et les donnes renvoyes sont reprsentes par une arborescence simple dobjets ActionScript. Flex interprte les donnes XML renvoyes par un service Web ou HTTP pour reprsenter de manire approprie les types de base, tels que String, Number, Boolean et Date. Pour utiliser des objets fortement typs, vous devez renseigner ces objets laide de larborescence dobjets que Flex cre. Les composants WebService et HTTPService renvoient chacun des objets et des tableaux anonymes constituant des types complexes. Si makeObjectsBindable a la valeur (par dfaut) true, les objets sont envelopps dans des occurrences mx.utils.ObjectProxy et les tableaux dans des occurrences mx.collections.ArrayCollection. Remarque : ColdFusion nest pas sensible la casse et applique en interne la mise en majuscule toutes ses donnes. Gardez lesprit cette caractristique lorsque vous utilisez un service Web ColdFusion.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 128


Accs aux donnes ct serveur

Traitement des vnements result et fault


Lorsquun appel de service est termin, la mthode RemoteObject, lopration WebService ou le composant HTTPService distribue un vnement rsult ou un vnement fault. Un vnement result indique que le rsultat est disponible. Un vnement fault indique quune erreur sest produite. Lvnement result fait office de dclencheur de la mise jour des proprits lies lastResult. Vous pouvez traiter les vnements fault et result explicitement en ajoutant des couteurs dvnement aux mthodes RemoteObject ou aux oprations WebService. Pour un composant HTTPService, vous pouvez spcifier les couteurs dvnement result et fault sur le composant lui-mme. Le composant HTTPService ne dispose en effet pas de plusieurs mthodes ou oprations. Lorsque vous ne spcifiez pas dcouteurs pour les vnements result ou fault sur une mthode RemoteObject ou une opration WebService, les vnements sont transmis au niveau du composant. Vous pouvez spcifier des couteurs pour les vnements result et fault niveau de composant. Dans lexemple MXML suivant, les vnements result et fault dune opration WebService spcifient les couteurs dvnement ; lvnement fault du composant WebService spcifie galement un couteur dvnement :
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <mx:WebService id="WeatherService" wsdl="http://myserver:8500/flexapp/app1.cfc?wsdl" fault="defaultFault(event)"> <mx:operation name="GetWeather" fault="showErrorDialog(event)" result="log(event)"> <mx:request> <ZipCode>{myZip.text}</ZipCode> </mx:request> </mx:operation> </mx:WebService> </fx:Declarations> <fx:Script> <![CDATA[ import mx.rpc.soap.SOAPFault; import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; import mx.controls.Alert; public function showErrorDialog(event:FaultEvent):void { // Handle operation fault.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 129


Accs aux donnes ct serveur

Alert.show(event.fault.faultString, "Error"); } public function defaultFault(event:FaultEvent):void { // Handle service fault. if (event.fault is SOAPFault) { var fault:SOAPFault=event.fault as SOAPFault; var faultElement:XML=fault.element; // You could use E4X to traverse the raw fault element // returned in the SOAP envelope. // ... } Alert.show(event.fault.faultString, "Error"); } public function log(event:ResultEvent):void { // Handle result. } ]]> </fx:Script> <s:TextInput id="myZip"/> </s:Application>

Dans lexemple ActionScript suivant, un couteur dvnement result est ajout une opration WebService. Un couteur dvnement fault est ajout au composant WebService :
<?xml version="1.0"?> <!-- fds\rpc\RPCResultFaultAS.mxml --> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Script> <![CDATA[ import mx.rpc.soap.WebService; import mx.rpc.soap.SOAPFault; import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; private var ws:WebService; public function useWebService(intArg:int, strArg:String):void { ws = new WebService(); ws.destination = "wsDest"; ws.echoArgs.addEventListener("result", echoResultHandler); ws.addEventListener("fault", faultHandler); ws.loadWSDL(); ws.echoArgs(intArg, strArg); }

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 130


Accs aux donnes ct serveur

public function echoResultHandler(event:ResultEvent):void { var retStr:String = event.result.echoStr; var retInt:int = event.result.echoInt; //do something } public function faultHandler(event:FaultEvent):void { //deal with event.fault.faultString, etc. if (event.fault is SOAPFault) { var fault:SOAPFault=event.fault as SOAPFault; var faultElement:XML=fault.element; // You could use E4X to traverse the // raw fault element returned in the SOAP envelope. // ... } } ]]> </fx:Script> </mx:Application>

Vous pouvez galement utiliser lvnement mx.rpc.events.InvokeEvent pour indiquer lorsquune requte de composant daccs aux donnes a t invoque. Cela est utile si les oprations sont places en file dattente et invoques ultrieurement.

Traitement de rsultats en tant que donnes XML avec le format de rsultat E4X
Vous pouvez dfinir la proprit resultFormat des composants HTTPService et des oprations WebService sur la valeur e4x pour crer une proprit lastResult de type XML. Vous pouvez accder la proprit lastResult en utilisant ECMAScript pour les expressions XML (E4X). Vous nincluez pas le nud racine de la structure XML dans la notation par point lorsque vous utilisez un objet XML E4X dans une expression de liaison. Cela diffre de la syntaxe dune proprit lastResult dfinie sur object pour lequel vous devez inclure le nud racine de la structure XML dans la notation par point. Par exemple, lorsque la proprit lastResult est dfinie sur e4x, vous utilisez {srv.lastResult.product} ; lorsque la proprit lastResult est dfinie sur object, vous utilisez {srv.lastResult.products.product}. Lutilisation du format de rsultat e4x est privilgier pour travailler directement dans XML. Vous pouvez toutefois galement dfinir la proprit resultFormat sur xml pour crer un objet lastResult de type flash.xml.XMLNode, qui est lobjet existant pour utiliser XML. De plus, vous pouvez dfinir la proprit resultFormat des composants HTTPService sur flashvars ou text pour crer des rsultats en tant quobjets ActionScript contenant des paires nom-valeur ou en tant que texte brut, respectivement. Remarque : pour appliquer la syntaxe E4X aux rsultats de service, vous devez dfinir la proprit resultFormat du composant HTTPService ou WebService sur e4x. La valeur par dfaut est object. Lorsque vous dfinissez la proprit resultFormat dun composant HTTPService ou dune opration WebService sur
e4x, vous devrez ventuellement traiter les informations despace de noms contenues dans le code XML renvoy. Pour

un composant WebService, les informations despace de noms sont contenues dans le corps de lenveloppe SOAP renvoye par le service Web. Lexemple suivant prsente une partie dun corps SOAP contenant des informations despace de noms. Ces donnes ont t renvoyes par un service Web qui obtient des cotes de titres. Les informations despace de noms sont en gras.

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 131


Accs aux donnes ct serveur

... <soap:Body> <GetQuoteResponse xmlns="http://ws.invesbot.com/"> <GetQuoteResult><StockQuote xmlns=""> <Symbol>ADBE</Symbol> <Company>ADOBE SYSTEMS INC</Company> <Price>&lt;big&gt;&lt;b&gt;35.90&lt;/b&gt;&lt;/big&gt;</Price> ... </soap:Body> ...

Le corps soap:Body contenant des informations despace de noms, la dfinition de la proprit resultFormat de lopration WebService sur e4x ncessite la cration dun objet despace de noms pour http://ws.invesbot.com/namespace. Lexemple suivant prsente une application effectuant cette opration :
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <mx:WebService id="WS" destination="stockservice" useProxy="true" fault="Alert.show(event.fault.faultString), 'Error'"> <mx:operation name="GetQuote" resultFormat="e4x"> <mx:request> <symbol>ADBE</symbol> </mx:request> </mx:operation> </mx:WebService> </fx:Declarations> <fx:Script> <![CDATA[ import mx.controls.Alert; private namespace invesbot = "http://ws.invesbot.com/"; use namespace invesbot; ]]> </fx:Script> <s:HGroup> <mx:Button label="Get Quote" click="WS.GetQuote.send()"/> <s:TextArea text="{WS.GetQuote.lastResult.GetQuoteResult.StockQuote.Price}" /> </s:HGroup> </s:Application>

Si vous le souhaitez, vous pouvez crer une variable pour un espace de noms et y accder dans une liaison au rsultat de service, comme lillustre lexemple suivant :

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 132


Accs aux donnes ct serveur

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <mx:WebService id="WS" destination="stockservice" useProxy="true" fault="Alert.show(event.fault.faultString), 'Error'"> <mx:operation name="GetQuote" resultFormat="e4x"> <mx:request> <symbol>ADBE</symbol> </mx:request> </mx:operation> </mx:WebService> </fx:Declarations> <fx:Script> <![CDATA[ import mx.controls.Alert; public var invesbot:Namespace = new Namespace("http://ws.invesbot.com/"); ]]> </fx:Script> <s:HGroup> <s:Button label="Get Quote" click="WS.GetQuote.send()"/> <s:TextArea text="{WS.GetQuote.lastResult.invesbot::GetQuoteResult.StockQuote.Price}"/> </s:HGroup> </s:Application>

Utilisez la syntaxe E4X pour accder aux lments et aux attributs des donnes XML renvoyes dans un objet lastResult. La syntaxe varie en fonction de la prsence ou non dun ou de plusieurs espaces de noms dclars dans les donnes XML. Aucun espace de noms Lexemple suivant indique comment obtenir une valeur dlment ou dattribut lorsquaucun espace de noms nest spcifi sur llment ou lattribut :
var attributes:XMLList = XML(event.result).Description.value;

Le code prcdent renvoie xxx pour le document XML suivant :


<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <Description> <value>xxx</value> </Description> </RDF>

Tout espace de noms Lexemple suivant indique comment obtenir une valeur dlment ou dattribut lorsquun espace de noms quelconque est spcifi sur llment ou lattribut :
var attributes:XMLList = XML(event.result).*::Description.*::value;

Le code prcdent renvoie xxx pour lun des documents XML suivants :

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 133


Accs aux donnes ct serveur

Premier document XML :


<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description> <rdf:value>xxx</rdf:value> </rdf:Description> </rdf:RDF>

Deuxime document XML :


<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:cm="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <cm:Description> <rdf:value>xxx</rdf:value> </cm:Description> </rdf:RDF>

Espace de noms spcifique Lexemple suivant indique comment obtenir une valeur dlment ou dattribut lorsque lespace de noms rdf dclar est spcifi sur llment ou lattribut :
var rdf:Namespace = new Namespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#"); var attributes:XMLList = XML(event.result).rdf::Description.rdf::value;

Le code prcdent renvoie xxx pour le document XML suivant :


<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description> <rdf:value>xxx</rdf:value> </rdf:Description> </rdf:RDF>

Lexemple suivant prsente une autre manire dobtenir une valeur dlment ou dattribut lorsque lespace de noms rdf dclar est spcifi sur un lment ou un attribut :
namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"; use namespace rdf; var attributes:XMLList = XML(event.result).rdf::Description.rdf::value;

Le code prcdent renvoie galement xxx pour le document XML suivant :


<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description> <rdf:value>xxx</rdf:value> </rdf:Description> </rdf:RDF>

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 134


Accs aux donnes ct serveur

Traitement de rsultats de service Web contenant des objets DataSet ou DataTable .NET
Les services Web crits avec la structure Microsoft .NET peuvent renvoyer au client des objets DataSet ou DataTable .NET spciaux. Un service Web .NET fournit un document WSDL trs basique sans informations sur le type de donnes quil manipule. Lorsque le service Web renvoie un objet DataSet ou DataTable, les informations sur le type de donnes sont incorpores dans un lment de schma XML dans le message SOAP, qui indique comment le reste du message doit tre trait. Pour traiter au mieux les rsultats de ce type de service Web, dfinissez la proprit resultFormat dune opration WebService Flex sur object. Vous pouvez galement dfinir la proprit resultFormat de lopration WebService sur e4x. Les formats XML et e4x ne sont toutefois pas adapts la structure inhabituelle de la rponse et la liaison des donnes (par exemple un contrle DataGrid) ncessite limplmentation de solutions de contournement. La dfinition de la proprit resultFormat dune opration WebService Flex sur object entrane la conversion automatique des DataTable ou DataSet renvoys par un service Web .NET en objets comportant une proprit Tables, qui contient le mappage dun ou de plusieurs objets DataTable. Chaque objet DataTable du mappage Tables contient deux proprits : Columns et Rows. La proprit Rows contient les donnes. Lobjet event.result obtient les proprits suivantes correspondant aux proprits DataSet et DataTable dans .NET. Les tableaux dobjets DataSet ou DataTable comportent les mmes structures que celles dcrites ici, mais sont imbriqus dans un tableau de niveau suprieur sur lobjet de rsultat.
Proprit
result.Tables

Description Mappage des noms de tableaux des objets contenant des donnes de tableaux. Tableau des noms des colonnes suivant lordre spcifi dans le schma DataSet ou DataTable pour le tableau. Tableau dobjets reprsentant les donnes de chaque ligne du tableau, par exemple {columnName1:value, columnName2:value, columnName3:value}.

result.Tables["someTable"].Columns

result.Tables["someTable"].Rows

Lapplication MXML suivante renseigne un contrle DataGrid avec les donnes DataTable renvoyes par un service Web .NET.
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <fx:Declarations> <mx:WebService id="nwCL" wsdl="http://localhost/data/CustomerList.asmx?wsdl" result="onResult(event)" fault="onFault(event)" /> </fx:Declarations> <fx:Script> <![CDATA[ import mx.controls.Alert; import mx.controls.DataGrid; import mx.rpc.events.FaultEvent; import mx.rpc.events.ResultEvent; private function onResult(event:ResultEvent):void { // A DataTable or DataSet returned from a .NET webservice is

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 135


Accs aux donnes ct serveur

// automatically converted to an object with a "Tables" property, // which contains a map of one or more dataTables. if (event.result.Tables != null) { // clean up panel from previous calls. dataPanel.removeAllElements(); for each (var table:Object in event.result.Tables) { displayTable(table); } // Alternatively, if a table's name is known beforehand, // it can be accessed using this syntax: var namedTable:Object = event.result.Tables.Customers; //displayTable(namedTable); } } private function displayTable(tbl:Object):void { var dg:DataGrid = new DataGrid(); dataPanel.addChild(dg); // Each table object from the "Tables" map contains two properties: // "Columns" and "Rows". "Rows" is where the data is, so we can set // that as the dataProvider for a DataGrid. dg.dataProvider = tbl.Rows; } private function onFault(event:FaultEvent):void { Alert.show(event.fault.toString()); } ]]> </fx:Script> <s:Button label="Get Single DataTable" click="nwCL.getSingleDataTable()"/> <s:Button label="Get MultiTable DataSet" click="nwCL.getMultiTableDataSet()"/> <s:Panel id="dataPanel" width="100%" height="100%" title="Data Tables"/> </s:Application>

Lexemple suivant illustre la classe .NET C#. Cette classe est limplmentation back-end du service Web appele par lapplication et utilise la base de donnes modle Microsoft SQL Server Northwind :

Dernire mise jour le 18/3/2010

ACCS AUX DONNES AVEC FLEX 136


Accs aux donnes ct serveur

<%@ WebService Language="C#" Class="CustomerList" %> using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Web.Services.Description; using System.Data; using System.Data.SqlClient; using System; public class CustomerList : WebService { [WebMethod] public DataTable getSingleDataTable() { string cnStr = "[Your_Database_Connection_String]"; string query = "SELECT TOP 10 * FROM Customers"; SqlConnection cn = new SqlConnection(cnStr); cn.Open(); SqlDataAdapter adpt = new SqlDataAdapter(new SqlCommand(query, cn)); DataTable dt = new DataTable("Customers"); adpt.Fill(dt); return dt; } [WebMethod] public DataSet getMultiTableDataSet() { string cnStr = "[Your_Database_Connection_String]"; string query1 = "SELECT TOP 10 CustomerID, CompanyName FROM Customers"; string query2 = "SELECT TOP 10 OrderID, CustomerID, ShipCity, ShipCountry FROM Orders"; SqlConnection cn = new SqlConnection(cnStr); cn.Open(); SqlDataAdapter adpt = new SqlDataAdapter(new SqlCommand(query1, cn)); DataSet ds = new DataSet("TwoTableDataSet"); adpt.Fill(ds, "Customers"); adpt.SelectCommand = new SqlCommand(query2, cn); adpt.Fill(ds, "Orders"); return ds; } }