Retrouvez gratuitement la notice de l'appareil FLEX 4.6 ADOBE au format PDF.
Téléchargez la notice de votre Développement d'applications web au format PDF gratuitement ! Retrouvez votre notice FLEX 4.6 - ADOBE et reprennez votre appareil électronique en main. Sur cette page sont publiés tous les documents nécessaires à l'utilisation de votre appareil FLEX 4.6 de la marque ADOBE.
Accès aux données avec
Installation de Zend Framework
Contrairement aux ensembles de modèles HTML créés à l’aide de servlets, d’environnements JSP, ASP, PHP ou CFML, Flex sépare le code client du code serveur. L’interface utilisateur de l’application est compilée dans un fichier binaire SWF envoyé au client. Lorsque l’application effectue une demande à un service de données, le fichier SWF n’est pas recompilé et aucune réactualisation de page n’est requise. Le service distant ne renvoie que des données. Flex lie les données renvoyées à des composants de l’interface utilisateur dans l’application client. Lorsqu’un utilisateur clique sur le contrôle Button d’une application par exemple, le code côté client appelle un service Web. Les données de résultat provenant du service Web sont renvoyées dans le fichier SWF binaire sans réactualisation de page. Les données de résultat peuvent alors être utilisées comme contenu dynamique dans l’application. <?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> L’exemple suivant présente une page ColdFusion accédant directement à une source de données : ... <CFQUERY DATASOURCE="Dsn" NAME="myQuery"> Flex est une technologie orientée événement. Une action de l’utilisateur ou un événement de programme peut déclencher l’accès à un service. Par exemple, l’utilisateur cliquant sur un bouton constitue un événement d’action qui peut être utilisé pour déclencher un appel de service. Un événement de programme peut être une application terminant la création d’un composant de l’interface utilisateur tel qu’un composant DataGrid. L’événement 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. L’application client n’a pas besoin d’attendre les données renvoyées. Les appels de service asynchrones présentent des avantages lors de l’extraction ou de la mise à jour de jeux de données volumineux. L’application client n’est pas bloquée par l’attente de l’extraction ou de la mise à jour des données.
CallResponder les données renvoyées. La liaison de données dans Flex vous permet de mettre à jour dynamiquement un composant de l’interface utilisateur avec une source de données. Par exemple, un composant Flex peut associer son attribut text à l’attribut lastResult d’une propriété CallResponder. En cas de modification des données de CallResponder, le composant Flex est automatiquement mis à jour. Flex implémente également la liaison de données bidirectionnelle qui garantit la mise à jour automatique d’un composant Flex ou d’une source de données dont les données sont modifiées. Un autre avantage de la liaison de données bidirectionnelle réside dans la mise à jour de données distantes à partir des saisies effectuées par un utilisateur dans un composant Form ou dans un composant de données Flex.
« Création d’applications centrées sur les données avec Flash Builder » à la page 8
Flex Builder 3 permet d’implémenter des appels de procédures distants à des services de données à l’aide des composants d’accès aux données Flex. Cependant, Flash Builder simplifie ce processus. Flash Builder fournit des assistants et des outils permettant d’effectuer les opérations suivantes :
• Configuration des données renvoyées par le service de données • Assistance pour la pagination des données renvoyées par le service • Assistance pour la fonctionnalité de gestion des données qui synchronise plusieurs mises à jour des données du serveur
• Liaison des données renvoyées par le service aux composants de l’interface utilisateur
Appliquez le flux de travaux suivant lorsque vous utilisez Flash Builder pour créer une application qui accède à des services de données. 1 Selon les circonstances, vous commencerez soit par vous connecter à un service de données, soit par construire
Connexion au service distant : si vous commencez par vous connecter au service distant, vous devez ensuite construire l’interface utilisateur. Construction de l’interface utilisateur : si vous commencez par construire l’interface utilisateur, vous devez ensuite vous connecter au service distant. Remarque : la première action effectuée relève d’un choix personnel. Par exemple, si la conception d’une interface utilisateur est déjà prévue, vous pouvez commencer par construire l’interface utilisateur. A l’inverse, vous pouvez commencer par vous connecter aux données et laisser Flash Builder vous aider à générer les composants d’application.
3 (Facultatif) Gérez l’extraction et la mise à jour des données.
Lors du retour de gros volumes d’enregistrements de données, vous implémentez généralement la pagination pour extraire un jeu d’enregistrements selon vos besoins. Pour les applications mettant à jour plusieurs enregistrements, vous pouvez implémenter des fonctions de gestion de données. Les fonctions de gestion de données incluent :
• Mécanisme d’annulation des modifications avant leur écriture sur le serveur • Génération de code pour la mise à jour automatique des composants d’interface utilisateur au fur et à mesure que des enregistrements sont ajoutés, supprimés ou modifiés 4 Exécutez l’application et surveillez le flux de données.
Flash Builder pour afficher les données transmises entre l’application et le service. Le Moniteur de réseau est utile pour diagnostiquer les erreurs et analyser les performances. Flash Builder fournit également des environnements robustes de débogage et de définition de profil. Le Moniteur de réseau et le profileur Flash sont disponibles avec Flash Builder Premium.
« Création d’applications centrées sur les données avec Flash Builder » à la page 8
Les assistants et les outils Flash Builder prennent en charge l’accès aux implémentations des types de services suivants :
• Services ColdFusion HTTPService et WebService.
Un composant d’accès aux données appelle un service distant. Il stocke ensuite les données de réponse du service dans un objet ActionScript ou tout autre format renvoyé par le service. Utilisez les composants d’accès aux données dans l’application client pour qu’elle fonctionne avec trois types de services :
• Services Web basés sur SOAP (WebServices) • Services HTTP, incluant les services Web basés sur REST (HTTPService) Adobe® Flash® Builder™ fournit des assistants et des outils permettant d’envelopper l’implémentation d’un composant d’accès aux données dans une enveloppe de service. L’enveloppe de service encapsule la fonctionnalité du composant d’accès aux données, rendant invisible une grande partie de l’implémentation de niveau inférieur et vous permettant ainsi de vous concentrer sur l’implémentation de services et la génération d’applications client pour accéder à ces services. Pour plus d’informations sur l’utilisation de Flash Builder pour accéder aux services de données, voir « Création d’applications centrées sur les données avec Flash Builder » à la page 8.
Par défaut, Adobe Flash Player bloque l’accès à tout hôte qui ne correspond pas exactement à celui utilisé pour charger une application. Si vous n’utilisez pas LiveCycle Data Services ou BlazeDS pour traiter les demandes par proxy, un service HTTP ou Web doit résider sur le serveur hébergeant l’application ou le serveur distant hébergeant le service HTTP ou Web doit définir un fichier crossdomain.xml. Le fichier crossdomain.xml permet à un serveur d’indiquer que ses données et ses documents sont disponibles pour les fichiers SWF traités à partir de certains domaines ou de tous les domaines. Le fichier crossdomain.xml doit figurer à la racine Web du serveur que l’application contacte.
Utilisez les composants HTTPService pour l’envoi de requêtes HTTP GET ou POST et afin d’inclure les données de réponses HTTP dans une application client. Si vous utilisez Flex pour créer des applications d’ordinateur (exécutées dans Adobe AIR®), les requêtes HTTP PUT et DELETE sont prises en charge. Si vous utilisez LiveCycle Data Services ou BlazeDS, vous pouvez faire appel à un HTTPProxyService grâce auquel vous pourrez utiliser des méthodes HTTP supplémentaires. Le service HTTPProxyService vous permet d’envoyer des requêtes GET, POST, HEAD, OPTIONS, PUT, TRACE ou DELETE. Un service HTTP peut consister en n’importe quel URI HTTP qui accepte des demandes HTTP et envoie des réponses. 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 systèmes hypermédia distribués. Les composants HTTPService s’avèrent utiles lorsque vous ne pouvez pas exposer la même fonctionnalité en tant que service Web SOAP ou service d’objet 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 méthode send() de l’objet HTTPService, elle effectue une demande HTTP auprès de l’URI spécifié et une réponse HTTP est renvoyée. Si vous le souhaitez, vous pouvez transmettre des arguments à l’URI spécifié.
HTTP. Pour plus d’informations, voir « Accès aux services HTTP » à la page 13.
« Accès aux services HTTP » à la page 13 Thèse : Representational State Transfer (REST) par Roy Thomas Fielding WSDL, disponible en tant qu’URL. WSDL est un format standard permettant de décrire les messages qu’un service Web comprend, le format des réponses de ce service à ces messages, les protocoles que le service Web prend en charge et l’adresse à laquelle envoyer les messages. Flex prend en charge WSDL 1.1, décrit à l’adresse www.w3.org/TR/wsdl, ainsi que les services Web codés RPC et littéral document. Il prend également en charge les demandes et les résultats de service Web formatés en tant que messages SOAP et transportés via HTTP. SOAP fournit la définition du format XML que vous pouvez utiliser pour échanger des informations structurées et typées entre un client de service Web (une application créée 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 l’environnement. Les composants WebService sont également utiles pour les objets situés dans un environnement d’entreprise mais qui ne sont pas nécessairement disponibles sur le chemin source de l’application Web. Flash Builder fournit des flux de travaux qui vous permettent de vous connecter de manière interactive à des services Web. Pour plus d’informations, voir « Accès aux services Web » à la page 16.
Les services d’objets distants vous permettent d’accéder à 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 nécessaire pour exposer la logique existante au format XML. Un autre avantage des services d’objets distants réside dans la vitesse de communication à travers le réseau. Les échanges de données s’effectuent encore via HTTP ou https, mais les données elles-mêmes sont sérialisées dans une représentation binaire. L’utilisation de composants RemoteObject réduit le volume de données qui transitent sur le réseau, diminue la mémoire utilisée côté client et accélère le traitement. ColdFusion, PHP, BlazeDS et LiveCycle Data Services peuvent utiliser une définition de type côté serveur lors de l’accès à des données du serveur. L’application client accède à un objet Java, à un composant ColdFusion (qui constitue un objet Java en interne) ou à une classe PHP directement par l’invocation distante d’une méthode sur un objet désigné. L’objet sur le serveur utilise ses propres types de données natifs en tant qu’arguments, interroge une base de données avec ces arguments, puis renvoie les valeurs dans leurs types de données natifs.
Flash Builder fournit des flux de travaux qui vous permettent de vous connecter de manière interactive à des services d’objets distants. Pour plus d’informations, voir « Connexion à des services de données » à la page 9.
Flex accède aux services de données en tant qu’objet distant, service HTTP (de type REST) ou service Web SOAP. Utilisez un objet distant pour accéder aux types de services de données suivants :
• Services PHP au format AMF • Type de serveur
Dernière mise à jour le 16/11/2012
Flash Builder vous avertit si vous tentez d’accéder à un service pour lequel aucun projet Flex n’est configuré. Si le projet Flex ne spécifie pas la configuration de serveur correcte, Flash Builder fournit un lien vers la boîte de dialogue Propriétés du projet. Cette boîte de dialogue vous permet de configurer le projet afin d’accéder au service de données. Flash Builder vous avertit par exemple lorsque vous tentez d’accéder à un service PHP basé sur AMF à partir d’un projet qui ne spécifie aucune configuration de serveur. Si le projet Flex a été précédemment configuré pour l’accès à un autre type de service, configurez un nouveau projet Flex ou modifiez la configuration du projet actuel. En cas de modification de la configuration de serveur d’un projet, vous ne pourrez plus accéder aux services précédemment configurés. Par exemple, si vous modifiez une configuration de projet de ColdFusion vers PHP, les services ColdFusion auxquels vous tenterez d’accéder dans le projet ne seront plus disponibles. Vous pouvez accéder à différents types de services à partir du même projet en configurant des services en tant que services HTTP ou Web.
Un fichier de régulation interdomaines est requis pour l’accès aux services se trouvant sur un autre domaine à partir du fichier SWF pour l’application. Situés dans le même domaine que l’application, les services au format AMF ne nécessitent généralement pas de fichier de régulation interdomaines.
Utilisez l’assistant de service Flash Builder pour vous connecter à un service de données. Pour les services d’objets distants, vous créez généralement un projet Flex ayant un type de serveurs d’applications correspondant. Flash Builder introspecte le service et peut configurer des types de retour pour les données renvoyées par le service. Les services d’objets distants incluent les services de données implémentés dans ColdFusion, PHP, BlazeDS et LiveCycle Data Services. Pour plus d’informations sur l’utilisation de l’assistant LiveCycle Service Discovery, voir Utilisation de LiveCycle Discovery.
Cette procédure part du principe que vous avez implémenté un service ColdFusion et créé un projet Flex afin d’accéder aux services ColdFusion. 1 Dans le menu Données de Flash Builder, sélectionnez Connexion à ColdFusion pour ouvrir l’assistant de
2 Dans la boîte de dialogue Configuration du service ColdFusion, recherchez l’emplacement du fichier CFC qui
Remarque : si vous n’avez pas implémenté de service ColdFusion, Flash Builder peut générer un exemple de service à partir d’un tableau de base de données simple. Utilisez l’exemple généré en guise d’illustration de l’accès aux services de données. Voir « Génération d’un exemple de service ColdFusion à partir d’un tableau de base de données » à la page 10. 3 (Facultatif) Modifiez les détails du service. Nom du service
Flash Builder génère 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 données » à la page 20.
Flash Builder génère un package basé sur le nom du service et le place dans un package services.
Par défaut, Flash Builder crée le package valueObjects.
5 Cliquez sur Terminer pour générer des fichiers ActionScript qui accèdent au service.
Prochaine étape : « Configuration des types de données pour les opérations de service de données » à la page 27.
Flash Builder peut générer un exemple de service ColdFusion que vous pouvez utiliser en tant que prototype pour vos propres services. L’exemple de service accède à un tableau de base de données simple et dispose de méthodes de création, de lecture, de mise à jour et de suppression. Flash Builder configure les types de données de retour pour les services générés et active des fonctionnalités d’accès aux données telles que la pagination ou la gestion de données. Important : utilisez le service généré uniquement dans un environnement de développement fiable. Le code généré permet à toute personne disposant d’un accès réseau à votre serveur d’accéder aux données du tableau de données et de les modifier ou supprimer. Avant de déployer ce service, assurez-vous d’augmenter la protection et de restreindre l’accès de façon adéquate. Pour plus d’informations sur la rédaction de services sécurisés, voir Sécurisation des services de données.
1 Dans le menu Données de Flash Builder, sélectionnez Connexion à ColdFusion pour ouvrir l’assistant de
2 Dans la boîte de dialogue Configuration du service ColdFusion, cliquez sur le lien afin de générer un exemple de
3 Sélectionnez l’option Générer à partir d’une source de données RDS et indiquez une source de données et une table
Supprimez les marques de commentaires de certaines fonctions du CFC et modifiez les opérations pour créer un exemple de service que vous pourrez utiliser comme prototype. 4 Utilisez l’emplacement par défaut ou spécifiez-en un nouveau. Cliquez sur OK.
5 (Facultatif) Cliquez sur Suivant pour afficher les opérations du service. 6 Cliquez sur Terminer.
« Installation de Zend Framework » à la page 21. Accédez aux services de données PHP à partir d’un projet Flex dont le type de serveurs d’applications spécifié est PHP. Le service de données doit être disponible sous la racine Web définie à la configuration du projet pour PHP. Placez le service dans un répertoire de services, comme illustré ci-dessous : <webroot>/MyServiceFolder/services
« Création d’un projet Flex pour l’accès aux services de données » à la page 8 1 Dans le menu Données de Flash Builder, sélectionnez Connexion à PHP pour ouvrir l’assistant de connexion à un
2 Dans la boîte de dialogue Configuration du service PHP, recherchez le fichier PHP implémentant le service.
Flash Builder génère 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 données » à la page 20.
Flash Builder génère un package basé sur le nom du service et le place dans un package services.
Par défaut, Flash Builder crée le package valueObjects.
Builder vous invite à en installer la version minimale. Voir « Installation de Zend Framework » à la page 21. 5 Cliquez sur Terminer.
Remarque : une fois la connexion établie, vous pouvez modifier les propriétés du service. Sélectionnez le service dans la vue Données/Services. Dans le menu contextuel, sélectionnez Propriétés. Prochaine étape : « Configuration des types de données pour les opérations de service de données » à la page 27.
Flash Builder peut générer un exemple de service PHP que vous pouvez utiliser en tant que prototype pour vos propres services. L’exemple de service accède à un tableau de base de données MySQL simple et dispose de méthodes de création, de lecture, de mise à jour et de suppression. Flash Builder configure les types de données de retour pour les services générés et active des fonctionnalités d’accès aux données telles que la pagination ou la gestion de données. Important : utilisez le service généré uniquement dans un environnement de développement fiable. Le code généré permet à toute personne disposant d’un accès réseau à votre serveur d’accéder aux données du tableau de données et de les modifier ou supprimer. Avant de déployer ce service, assurez-vous d’augmenter la protection et de restreindre l’accès de façon adéquate. Pour plus d’informations sur la rédaction de services sécurisés, voir Sécurisation des services de données. La procédure suivante part du principe que vous avez créé un projet Flex pour accéder aux services PHP et disposez de sources de données MySQL. 1 Dans le menu Données de Flash Builder, sélectionnez Connexion à PHP pour ouvrir l’assistant de connexion à un
2 Dans la boîte de dialogue Configuration du service PHP, cliquez sur le lien afin de générer un exemple de service. 3 Sélectionnez Générer à partir d’une base de données et spécifiez les informations de connexion à la base de données.
Flash Builder rédige un exemple de projet avec des opérations de service courantes. Supprimez les marques de commentaires de certaines zones du projet et modifiez les opérations pour créer un exemple de service que vous pourrez utiliser comme prototype. 4 Sélectionnez un tableau dans la base de données et spécifiez la clé primaire. 5 Utilisez l’emplacement par défaut ou spécifiez-en un nouveau. Cliquez sur OK.
Builder vous invite à en installer la version minimale. Voir « Installation de Zend Framework » à la page 21. Flash Builder génère l’exemple de service. Modifiez le nom du service et les emplacements de package afin de remplacer les valeurs par défaut. 6 (Facultatif) Cliquez sur Suivant pour afficher les opérations du service. 7 Cliquez sur Terminer.
Un fichier de régulation interdomaines est requis pour l’accès aux services dont le domaine ne correspond pas à celui du fichier SWF de l’application client. Voir Utilisation de fichiers de régulation interdomaines.
Cette option s’avère pratique pour accéder à plusieurs opérations à partir d’un service unique. Si vous spécifiez une URL de base vers le service, il vous suffit ensuite de spécifier pour chaque opération le chemin relatif vers les opérations HTTP. L’utilisation d’une URL de base ne permet pas d’accéder à plusieurs services.
Lors de la spécification d’une URL vers une opération, vous pouvez inclure les paramètres de requête pour les opérations de service. L’assistant de configuration du service HTTP renseigne le tableau Paramètres avec chaque paramètre inclus dans l’URL de l’opération.
Flash Builder prend en charge l’accès aux services RESTful qui utilisent des paramètres délimités au lieu du paramètre de requête GET. Par exemple, supposons que vous utilisez l’URL suivante pour accéder à un service RESTful :
• Chemin vers un fichier local pour une URL d’opération Pour une URL d’opération, vous pouvez spécifier un chemin vers un fichier local qui implémente les services HTTP. Par exemple, spécifiez ce qui suit pour une URL d’opération : c:/MyHttpServices/MyHttpService.xml
Spécifiez la méthode de l’opération (GET ou POST).
Vous pouvez ajouter des paramètres à l’opération que vous aurez préalablement sélectionnée dans le tableau Opérations. Sélectionnez une opération, puis cliquez sur le bouton Ajouter du tableau Paramètres. Spécifiez un nom et un type de données pour le paramètre ajouté. Le type de paramètre (GET ou POST) correspond à la méthode de l’opération.
Si vous sélectionnez application/xml comme type de contenu, Flash Builder génère un paramètre de requête non modifiable, dont le nom par défaut est strXML. Vous pourrez spécifier le paramètre actuel à l’exécution. Nom
2 (Facultatif) Spécifiez une URL de base à utiliser en tant que préfixe pour toutes les opérations. 3 Sous Opérations, spécifiez les éléments suivants pour chaque opération à laquelle vous souhaitez accéder :
• URL de l’opération de service
5 (Facultatif) Cliquez sur Ajouter ou Supprimer pour ajouter ou supprimer des paramètres pour l’opération
6 (Facultatif) Modifiez les détails du service. Nom du service
Flash Builder génère 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 données » à la page 20.
Flash Builder génère un package basé sur le nom du service et le place dans un package services.
Par défaut, Flash Builder crée le package valueObjects.
8 Cliquez sur Terminer.
Une fois la connexion au service HTTP établie, configurez les types de retour des opérations de service. Lors de la configuration du type de retour, les types de paramètres de l’opération sont également configurés. Voir « Configuration des types de données pour les opérations de service de données » à la page 27. Remarque : une fois la connexion établie, vous pouvez modifier les propriétés du service. Sélectionnez le service dans la vue Données/Services. Dans le menu contextuel, sélectionnez Propriétés. Prochaine étape : « Configuration des types de données pour les opérations de service de données » à la page 27.
Le service utilise une méthode GET qui renvoie une réponse XML. Cette fonctionnalité est utile pour apprendre à connaître les services HTTP dans Flex et pour établir des prototypes de données fictives dans les applications client. Lors de l’accès au service, spécifiez le nœud renvoyant la réponse XML. Flash Builder utilise ce nœud pour configurer automatiquement un type de retour pour les données. Une fois la connexion au service établie, vous pouvez lier des opérations du service à des composants d’interface utilisateur.
1 Dans le menu Données de Flash Builder, sélectionnez Connexion à HTTP pour ouvrir l’assistant de connexion à
2 Spécifiez Fichier local ou URL, puis accédez au fichier. 3 Sélectionnez un nœud dans le fichier contenant la réponse souhaitée.
Flash Builder configure un type de retour pour le nœud sélectionné. 4 Modifiez les détails du service. Nom du service
Flash Builder génère 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 données » à la page 20.
Flash Builder génère un package basé sur le nom du service et le place dans un package services.
Par défaut, Flash Builder crée le package valueObjects.
6 Cliquez sur Terminer.
Remarque : une fois la connexion établie, vous pouvez modifier les propriétés du service. Sélectionnez le service dans la vue Données/Services. Dans le menu contextuel, sélectionnez Propriétés.
Utilisez l’assistant de service Flash Builder pour vous connecter aux services Web (SOAP). Vous pouvez vous connecter à des services Web à partir de n’importe quel projet Flex. Il n’est pas nécessaire de spécifier une technologie de serveur pour le projet. Un fichier de régulation interdomaines est requis pour l’accès aux services se trouvant sur un autre domaine à partir du fichier SWF pour l’application client.
Utilisation des fichiers de régulation interdomaines
1 Dans le menu Données de Flash Builder, sélectionnez Connexion au service Web pour ouvrir l’assistant de
2 (BlazeDS/Data Services) Si vous avez installé LiveCycle Data Services ou BlazeDS, vous pouvez accéder au service
Sélectionnez l’option Par une destination proxy BlazeDS/Data Services. Spécifiez une destination. Cliquez sur Suivant et passez à l’étape 5.
3 Saisissez un URI pour le service SOAP. 4 (Facultatif) Modifiez les détails du service. Nom du service
Flash Builder génère un nom pour le service basé sur l’URI WSDL. Les noms possibles pour un service sont soumis à certaines restrictions. Voir « Affectation de noms aux services de données » à la page 20.
Flash Builder génère un package basé sur le nom du service et le place dans un package services.
Par défaut, Flash Builder crée le package dataValues.
RDS (Remote Development Services). Pour plus d’informations sur l’installation et la configuration de BlazeDS, voir la documentation de LiveCycle Data Services ES. En règle générale, vous accédez aux services de données BlazeDS à partir d’un projet Flex dont le type de serveurs d’applications spécifié est J2EE.
« Création d’un projet Flex pour l’accès aux services de données » à la page 8
1 Dans le menu Données de Flash Builder, sélectionnez Connexion à BlazeDS pour ouvrir l’assistant de connexion à
Flash Builder génère 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 données » à la page 20.
Flash Builder génère un package basé sur le nom du service et le place dans un package services.
Par défaut, Flash Builder crée le package valueObjects.
Remarque : une fois la connexion établie, vous pouvez modifier les propriétés du service. Sélectionnez le service dans la vue Données/Services. Dans le menu contextuel, sélectionnez Propriétés.
Vous pouvez accéder aux services disponibles à partir de LiveCycle Data Services uniquement si vous avez installé LiveCycle Data Services et configuré un serveur RDS (Remote Development Services). Pour plus d’informations, voir la documentation de LiveCycle Data Services. Vous pouvez accéder à LiveCycle Data Services à partir d’un projet Flex dont le type de serveur d’applications spécifié est soit J2EE soit ColdFusion.
Lors de la connexion à LiveCycle Data Services, les types de services de données suivants sont disponibles en tant que destinations.
Les services distants sont implémentés à l’aide de la définition de types AMF. Ils ne fournissent aucune gestion de données côté serveur. Vous pouvez utiliser les outils Flash Builder pour configurer la gestion de données côté client. Voir « Activation de la gestion des données » à la page 34.
Les services de données implémentent la gestion de données côté serveur. Pour plus d’informations, voir la documentation LiveCycle Data Services.
Les services Web sont disponibles par le biais d’un proxy LiveCycle Data Services configuré en tant que destination LiveCycle Data Services. La définition de type côté serveur n’est généralement pas fournie lors de la connexion à un service Web.
Flash Builder fournit des outils pour la configuration et la gestion des données côté client. Les outils Flash Builder disponibles dépendent du type de destination LiveCycle Data Services.
Les services distants implémentent la définition de types AMF sur le service. Il n’est pas nécessaire de configurer des types de données de retour pour les destinations de service distant. Cependant, vous pouvez utiliser Flash Builder pour générer du code pour la gestion de données côté client. Voir « Activation de la gestion des données » à la page 34.
Les services de données implémentent les types de données côté serveur. Il n’est pas nécessaire de configurer des types de données de retour pour les destinations de service de données. Les destinations de service de données fournissent également la gestion des données côté serveur. Vous ne pouvez pas utiliser la gestion des données côté client avec les destinations de service de données.
En règle générale, les destinations de service Web disponibles par le biais d’un proxy LiveCycle Data Service n’implémentent pas la définition de type côté serveur. Vous pouvez utiliser les outils Flash Builder pour configurer des types de retour pour les opérations de service Web. Voir « Configuration des types de données pour les opérations de service de données » à la page 27. Vous pouvez utiliser Flash Builder pour générer du code pour la gestion des données côté client. Voir « Activation de la gestion des données » à la page 34.
Cette procédure part du principe que vous avez installé LiveCycle Data Services, configuré un serveur de développement distant et créé un projet Flex afin d’accéder aux services LCDS. 1 Dans le menu Données de Flash Builder, sélectionnez Connexion aux données/services pour ouvrir l’assistant de
2 Dans la boîte de dialogue Sélection d’un type de service, choisissez LCDS. Cliquez sur Suivant. 3 Saisissez votre identifiant de connexion, le cas échéant. 4 (Facultatif) Modifiez les détails du service. Nom du service
Flash Builder génère un package basé sur le nom du service et le place dans un package services.
Spécifiez un nom pour le package de type de données. Ce package contient les fichiers de classe ActionScript générés qui définissent les types de données récupérés à partir du service. Par défaut, Flash Builder crée le package valueObjects.
1 Dans le menu Données de Flash Builder, sélectionnez Connexion aux données/services pour ouvrir l’assistant de
2 Dans la boîte de dialogue Sélection d’un type de service, choisissez Service Web. Cliquez sur Suivant. 3 Sélectionnez l’option Par une destination proxy LCDS/BlazeDS. 4 Saisissez votre identifiant de connexion, le cas échéant. 5 Sélectionnez la destination. 6 (Facultatif) Modifiez les détails du service. Cliquez sur Suivant. Nom du service
Flash Builder génère 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 données » à la page 20.
Flash Builder génère un package basé sur le nom du service et le place dans un package services.
Par défaut, Flash Builder crée le package dataValues.
Builder. Certaines restrictions ne sont pas apparentes tant que vous ne compilez pas votre application. Les règles d’attribution des noms pour les services sont :
Dernière mise à jour le 16/11/2012
• Vous ne pouvez pas utiliser un nom de classe ActionScript, y compris les classes personnalisées, en tant que nom de service.
Remarque : il est recommandé d’utiliser des noms de service différant des noms de vos fichiers MXML.
Lors de l’accès initial aux services PHP, Flash Builder détermine si la version de Zend Framework prise en charge est installée. Si cette version est introuvable, Flash Builder vous invite à en confirmer l’installation. Si vous acceptez, Flash Builder installe une version minimale de Zend Framework. Si vous refusez, installez manuellement Zend Framework si vous souhaitez accéder aux services PHP.
Flash Builder installe Zend Framework dans un dossier ZendFramework situé dans le répertoire racine de votre serveur Web : <web root>/ZendFramework/
Web. Mettez à jour la variable zend_path définie dans le fichier amf_config.ini. Si la variable zend_path est commentée, supprimez-en les marques de commentaire. Spécifiez l’emplacement de l’installation Zend Framework.
Vous avez la possibilité d’installer manuellement Zend Framework. 1 Téléchargez la dernière version de Zend Framework.
2 Extrayez la version téléchargée dans un emplacement du système. 3 Dans le dossier du projet Flex permettant d’accéder aux services PHP, mettez à jour la variable zend_path définie
Si la variable zend_path est commentée, supprimez-en le commentaire. Spécifiez le chemin absolu vers l’emplacement de l’installation Zend Framework.
Le fichier amf_config.ini se trouve dans le dossier de sortie du projet. Vérifiez ce qui suit :
Le fichier amf_config.ini se trouve dans le dossier de sortie du projet. Vérifiez ce qui suit :
Une fois la connexion à un service de données établie, chaque application d’un projet peut accéder à ce service. Par défaut, chaque application crée sa propre instance de service lorsqu’elle accède au serveur. Vous pouvez modifier ce comportement de sorte qu’un projet ne comporte qu’une seule instance de service. Chaque application dans le projet accède à la même instance de service. En règle générale, vous créez une instance de serveur unique lorsque vous souhaitez coordonner l’accès aux données à partir d’applications multiples. Vous pouvez spécifier l’accès à une seule instance de service par projet ou en tant que préférence pour tous les projets.
2 Sélectionnez la case à cocher pour l’utilisation d’une instance de serveur unique. Cliquez sur OK.
1 Ouvrez la boîte de dialogue Préférences. 2 Sélectionnez Flash Builder > Données/Services. 3 Sélectionnez la case à cocher pour l’utilisation d’une instance de serveur unique. Cliquez sur OK.
Vous utilisez l’éditeur de code MXML pour créer une interface utilisateur. Après avoir défini les composants de l’application à l’aide de l’éditeur de code, vous pouvez lier les données renvoyées par le service aux composants de l’interface utilisateur. Générez des gestionnaires d’événement en fonction des interactions de l’utilisateur avec l’application. Vous pouvez aussi générer un formulaire à partir des opérations de service disponibles dans la vue Données/Services.
Utilisez la boîte de dialogue Lier aux données pour lier une opération de service à un composant d’interface utilisateur. La boîte de dialogue Lier aux données est disponible à partir du menu Données de la barre d’outils dans la vue Données/Services. Lorsque vous liez une opération de service à un composant, Flash Builder génère du code MXML et ActionScript pour accéder à l’opération de service à partir de l’application client.
Lorsque vous liez une opération de service à un contrôle, Flash Builder utilise le type des données renvoyées par l’opération. En règle générale, vous configurez le type de retour pour une opération de service avant de la lier à un composant. Si le type de retour d’une opération de service n’a pas été configuré, la boîte de dialogue Lier aux données vous invite à terminer cette étape. Voir « Configuration des types de données pour les opérations de service de données » à la page 27.
Cette procédure part du principe que vous êtes connecté à un service de données. 1 Dans la vue Structure, sélectionnez le contrôle DataGrid. Vous pouvez également placer votre curseur dans la balise
2 Ouvrez ensuite la boîte de dialogue Lier aux données en sélectionnant l’option Lier aux données du menu Données
3 Sélectionnez Nouvel appel de service, puis un service et une opération.
Résultat d’appel existant et sélectionnez l’opération à utiliser. 4 (Facultatif) Sélectionnez Modifier type de retour.
Si le type de retour de l’opération n’a pas été précédemment configuré, sélectionnez Configurer le type de retour. Voir « Configuration des types de données pour les opérations de service de données » à la page 27. 5 Cliquez sur OK.
Voir Configuration de composants DataGrid et AdvancedDataGrid. 6 Enregistrez et exécutez l’application.
Flash Builder peut générer une méthode ActionScript qui appelle une opération de service. Cette méthode n’est pas liée à un composant d’interface utilisateur, mais peut être utilisée dans le code de l’application. Outre la méthode ActionScript, Flash Builder génère une propriété CallResponder donnant accès aux données renvoyées à partir de l’appel de service. Voir « CallResponder » à la page 38.
Cette procédure part du principe que vous êtes connecté à un service de données. 1 Dans la vue Données/Services, sélectionnez une opération. 2 Dans le menu contextuel de l’opération, sélectionnez Générer l’appel de service.
Cette option est également disponible à partir de la barre d’outils Données/Services.
Les formulaires sont l’une des méthodes les plus courantes que les applications Web utilisent pour recueillir des informations des utilisateurs. Flash Builder peut générer des formulaires pour les données obtenues à partir des appels de service ou pour les types de données personnalisés utilisés pour accéder aux données distantes. Lors de la génération d’un formulaire, Flash Builder crée un conteneur de présentation Form et ajoute des composants afin d’afficher ou de modifier les données spécifiques récupérées à partir du service. Flash Builder génère les types de formulaires suivants.
1 Pour exécuter l’assistant Générer le formulaire, sélectionnez une opération depuis la vue Données/Services.
• Dans le menu Données de Flash Builder, sélectionnez Générer le formulaire. 2 Dans l’assistant Générer le formulaire, sélectionnez Appel de service dans le champ Générer le formulaire pour. 3 Sélectionnez Nouvel appel de service ou Résultat d’appel existant.
Sinon, activez Nouvel appel de service et sélectionnez un service et une opération pour le formulaire. 4 (Facultatif) Les options disponibles sur le formulaire généré varient en fonction de l’opération.
Si l’opération renvoie une valeur, vous pouvez choisir d’inclure un formulaire pour la valeur renvoyée. Vous pouvez choisir de rendre le formulaire modifiable ou de le rendre uniquement accessible en lecture. 5 (Facultatif) Configurez les types d’entrée et les types de retour.
Configurez les types d’entrée et de retour de l’opération pour pouvoir générer le formulaire. Si vous les avez déjà configurés précédemment, vous avez ici la possibilité de les configurer à nouveau. Voir « Configuration des types de données pour les opérations de service de données » à la page 27. 6 Cliquez sur Suivant. Dans la boîte de dialogue Mappage de contrôle de propriété, sélectionnez les champs à inclure
7 Cliquez sur Terminer.
La sélection de formulaires superposés peut s’avérer difficile. Dans l’éditeur de code, sélectionnez la balise correspondant à un formulaire.
Ajoutez par exemple un composant DataGrid, puis liez à ce composant les résultats d’une opération telle que getItems_paged(). 1 Dans la vue Structure, sélectionnez un contrôle de données tel que DataGrid. 2 Dans le menu Données, sélectionnez Générer le formulaire de détails. 3 Générez le formulaire en suivant les instructions fournies dans le paragraphe Création d’un formulaire.
Pour générer un formulaire avec des composants représentant les champs d’un type de données personnalisé, commencez par configurer le type de données. Voir « Configuration des types de données pour les opérations de service de données » à la page 27. 1 Dans la vue Données/Services, sélectionnez un type de données personnalisé. 2 Dans le menu contextuel, sélectionnez Générer le formulaire. 3 Assurez-vous que l’option Générer le formulaire pour Type de données est sélectionnée, puis choisissez un type de
4 (Facultatif) Rendez le formulaire modifiable si vous le souhaitez. 5 Cliquez sur Terminer.
Lorsque vous reliez une opération de service de données à un composant, Flash Builder crée un gestionnaire d’événement qui renseigne le composant avec les données extraites du service. Par exemple, si vous reliez une opération getAllItems() à un DataGrid, Flash Builder génère un gestionnaire d’événement creationComplete. Le composant DataGrid référence le gestionnaire d’événements généré. Les résultats de l’appel deviennent le fournisseur de données du composant DataGrid. . . . protected function dataGrid_creationCompleteHandler(event:FlexEvent):void { getAllItemsResult.token = productService.getAllItems(); } Dernière mise à jour le 16/11/2012
2 Flash Builder comporte un assistant de contenu facilitant la génération du gestionnaire d’événement. Appuyez sur
3 Flash Builder génère un nom unique pour le gestionnaire d’événement et place ce dernier dans le bloc Script.
Lors de la connexion à un service de données, Flash Builder doit connaître le type des données renvoyées par une opération de service. Les types de données pris en charge sont ceux reconnus par AMF pour échanger des données avec un service de données ou un service distant. De nombreux services de données définissent le type des données renvoyées sur le serveur (définition de type côté serveur). Toutefois, si le serveur ne définit pas le type, l’application client doit configurer le type des données renvoyées (définition de type côté client). Les opérations de service qui spécifient les paramètres doivent également spécifier un type correspondant aux données auxquelles le service permet d’accéder. La définition de type côté client permet de configurer le type des paramètres d’entrée. Lors de la configuration des types pour la définition de type côté client, Flash Builder reconnaît uniquement les types de données AMF. Le type peut également être un type de données personnalisé représentant des données complexes ou un type vide pour indiquer que l’opération ne renvoie aucune donnée. Vous pouvez configurer des types définis par l’utilisateur pour les opérations de service qui renvoient des données complexes. Si vous récupérez par exemple des enregistrements d’une base de données d’employés, vous allez définir le retour de données complexes comme Employé. Dans ce cas, le type de données personnalisé pour Employé contient des entrées pour chaque champ de l’enregistrement de base de données. Types de données pour la définition de type côté client
• Configuration du type de retour pour une opération Voir « Configuration du type de retour pour les données d’une opération » à la page 29.
Voir « Test des opérations de service » à la page 31.
L’authentification de base permet d’accéder aux services HTTP et Web. Fournissez le nom d’utilisateur et le mot de passe pour accéder à ces services. Sélectionnez les options de mémorisation du nom d’utilisateur et du mot de passe si vous souhaitez que Flash Builder utilise les autorisations spécifiées tout au long de la session.
L’authentification distante permet d’accéder aux services d’objets distants. Les services d’objets distants sont des services implémentés en tant qu’objets distants à l’aide de ColdFusion, PHP, BlazeDS ou LiveCycle Data Services. Flash Builder ne fournit pas l’interface d’authentification distante pour les projets qui n’implémentent pas de services d’objets distants. Fournissez le nom d’utilisateur et le mot de passe pour accéder aux services d’objets distants. Sélectionnez les options de mémorisation du nom d’utilisateur et du mot de passe si vous souhaitez que Flash Builder utilise les autorisations spécifiées tout au long de la session.
Pour la définition de type côté client, configurez les paramètres d’entrée des opérations disponibles à partir du service de données. La procédure suivante part du principe qu’une connexion à un service de données a été établie dans Flash Builder et que le service de données dispose d’opérations nécessitant des paramètres d’entrée configurables. 1 Dans la vue Données/Services, sélectionnez une opération contenant des paramètres d’entrée configurables. Dans
2 Dans la boîte de dialogue Configurer les types d’entrée, sélectionnez un type de données dans la liste pour chaque
Vous pourrez également sélectionner les types de données de retour personnalisés préalablement définis. Pour la définition de type côté serveur, le service spécifie le type de données pour les paramètres d’entrée.
Un service qui définit le type des données renvoyées par une opération fournit la définition de type côté serveur. Si un service ne définit pas le type des données renvoyées par une opération, Flash Builder utilise la définition de type côté client pour définir le type des données renvoyées.
• Détecter automatiquement le type de retour à partir de l’exemple de données Si le service implémente la définition de type côté serveur, Flash Builder détecte le type de données défini par le service. Si le service n’implémente pas la définition de type côté serveur, Flash Builder crée un type personnalisé pour l’application client. Pour la définition de type côté client, spécifiez un nom pour le type personnalisé. En règle générale, le nom décrit les données renvoyées. Par exemple, si l’opération renvoie un tableau de livres à partir d’un tableau de base de données, nommez le type Livre.
Un type existant peut être défini par le service, un type ActionScript ou un type personnalisé précédemment défini. La procédure utilisée par Flash Builder pour introspecter les données varie légèrement en fonction du type de service de données. Par exemple, la procédure utilisée pour introspecter et configurer le type de retour pour un service HTTP est différente de celle utilisée pour les services PHP ou ColdFusion.
Lors de l’introspection des données de serveur, vous pouvez fusionner les champs d’un autre type de données ou créer un type de données basé sur un type de données existant. Voici quelques méthodes de modification d’un type de données personnalisé.
Utilisez un nouveau nom si vous prévoyez d’utiliser les données renvoyées de différentes manières dans l’application client. Par exemple, vous pouvez extraire des données employé qui peuvent être utilisées dans le résumé de l’employé et dans les tableaux d’informations des employés dans l’application client.
Vous pouvez ajouter des champs renvoyés à un type de données existant. L’ajout de champs supplémentaires peut être utile lors de l’association de données provenant de plusieurs sources, par exemple pour une opération JOIN renvoyant des données extraites de plusieurs tableaux de base de données. Un autre exemple est celui de données provenant de différents services, par exemple la fusion de données de type Livre reçues d’un service HTTP et d’un service ColdFusion.
Cette procédure part du principe que vous êtes connecté à un service de données implémenté avec PHP ou ColdFusion. 1 Dans la vue Données/Services, sélectionnez Configurer le type de retour dans le menu contextuel d’une opération. 2 Si l’opération comporte des arguments, entrez les valeurs d’argument. Spécifiez le type de données correct pour
3 (Type personnalisé nouveau ou modifié) Sélectionnez l’option de détection automatique du type des données
Si ce service nécessite une authentification, sélectionnez Authentification requise et fournissez les autorisations requises. Voir « Authentification de l’accès aux services » à la page 28. Flash Builder introspecte l’opération et crée un type de données personnalisé.
Si vous avez préalablement défini un type de données personnalisé, vous pouvez ajouter les champs renvoyés à la définition du type de données personnalisé existant. 4 (Utilisation du type existant) Utilisez cette option pour spécifier un type ActionScript ou un type que vous avez
5 Cliquez sur Terminer.
2 (Nouveau type personnalisé) Sélectionnez l’option de détection automatique du type des données renvoyées par
Si ce service nécessite une authentification, sélectionnez Authentification requise et fournissez les autorisations requises. Flash Builder introspecte l’opération et crée un type de données personnalisé. Choisissez une méthode permettant à Flash Builder de passer les valeurs des paramètres de l’opération et cliquez sur Suivant.
Vous pouvez également spécifier le type de données des paramètres. Flash Builder sélectionne automatiquement le type de données par défaut.
Utilisez cette option si vous êtes hors ligne ou si le service HTTP est encore en cours de développement, mais vous connaissez la réponse provenant du serveur. 3 (Nouveau type personnalisé, suite) Spécifiez un nom de type de données personnalisé ou sélectionnez un nœud
Si vous sélectionnez un nœud pour les données renvoyées, Flash Builder crée un type de données personnalisé pour les données renvoyées pour ce nœud. Indiquez si les données sont renvoyées sous forme de tableau. Si le service renvoie un fichier XML, la liste déroulante Sélection de la racine est activée. Sélectionnez un nœud dans le fichier XML pour spécifier un type de données. 4 (Utilisation du type existant) Utilisez cette option pour spécifier un type ActionScript ou un type que vous avez
5 Cliquez sur Terminer.
Vous pouvez utiliser Flash Builder pour tester des opérations de service et afficher les données renvoyées par une opération. Cette fonction est utile pour vérifier le comportement des services.
Cette procédure part du principe que vous êtes connecté à un service de données. 1 Dans la vue Données/Services, sélectionnez une opération de service. Dans le menu contextuel, sélectionnez
La vue Opération de test s’ouvre et affiche l’opération sélectionnée. Si l’opération nécessite des paramètres d’entrée, la vue Opération de test comporte une liste des paramètres. 2 Pour chaque paramètre d’entrée requis, cliquez sur le champ Entrer une valeur et spécifiez une valeur.
L’éditeur de saisie d’argument accepte la notation JSON pour la représentation de types complexes dans ActionScript. 3 Si le serveur requiert une authentification, sélectionnez l’option Authentification requise. Cliquez sur Tester.
Flash Builder affiche les données renvoyées par le service. 4 (Facultatif) Dans la vue Opération de test, sélectionnez et testez d’autres services et opérations disponibles.
Pagination : la pagination est l’extraction incrémentielle de jeux de données volumineux d’un service distant.
(matérialisée par exemple par le défilement de la grille de données par l’utilisateur) conduit à l’extraction et à l’affichage de la page d’enregistrements suivante. Gestion des données : dans Flash Builder, la gestion de données est la synchronisation des mises à jour des données
La gestion de données implique la coordination de plusieurs opérations (création, récupération, mise à jour et suppression) répondant aux événements de l’application client, tels que la mise à jour de l’enregistrement de l’employé. Lors de l’activation de la gestion des données avec Flash Builder, ce dernier génère un code mettant automatiquement à jour les composants de l’interface utilisateur. Par exemple, Flash Builder génère un code assurant la synchronisation des composants DataGrid avec les données sur le serveur.
Vous pouvez activer la pagination pour un service de données qui implémente une fonction de pagination avec la signature suivante :
Opérations de pagination des interrogations filtrées Activez la pagination des interrogations pour filtrer les résultats envoyés par la base de données. Lorsque vous filtrez les résultats de l’interrogation, 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
Cette procédure part du principe que vous avez codé les opérations getItems_paged() et count() du service distant et que vous avez configuré le type de données de retour pour l’opération, ainsi que décrit dans « Configuration des types de données pour les opérations de service de données » à la page 27. 1 Dans la vue Données/Services, ouvrez le menu contextuel de l’opération getItems_paged() et sélectionnez
2 En l’absence de clé unique pour le type de données, spécifiez les attributs qui caractériseront une instance de ce type
Cet attribut est généralement la clé primaire. 3 (Facultatif) Spécifiez le nombre d’éléments à récupérer pour définir un format de page personnalisé.
4 (Facultatif) Spécifiez l’opération count(). Cliquez sur Terminer.
La pagination est activée pour l’opération. Dans la vue Données/Services, la signature de la fonction qui implémente la pagination n’inclut plus les paramètres startIndex et numItems. Flash Builder ajoute maintenant ces valeurs de façon dynamique et les détermine en fonction de la taille des pages définie par l’utilisateur ou de la taille des pages par défaut (20 enregistrements par page).
Pour activer la gestion de données pour un service, le service implémente une ou plusieurs des fonctions suivantes. La gestion de données utilise ces fonctions pour synchroniser les mises à jour des données sur le serveur distant :
Vous pouvez utiliser n’importe quel nom valide pour la fonction.
Cependant, si vous souhaitez désactiver cette fonctionnalité, définissez l’indicateur autoCommit sur true. Si autoCommit est défini sur true, les mises à jours des données du serveur ne sont pas mises en cache, mais sont effectuées immédiatement. Voir « Activation de la gestion de données pour un service » à la page 41.
Lorsque vous supprimez des éléments alors que la gestion des données est activée, utilisez l’indicateur deleteItemOnRemoveFromFill. Par défaut, cet indicateur est défini sur true. Lorsque vous supprimez un élément, cet élément est immédiatement retiré de la base de données. Définissez deleteItemOnRemoveFromFill sur false pour différer la suppression jusqu’à l’appel de la méthode commit(). L’exemple suivant illustre le code pour la création d’un gestionnaire d’événement complet pour un contrôle DataGrid. Si l’utilisateur supprime un élément Employee sélectionné dans le DataGrid, l’élément sélectionné n’est retiré de la base de données qu’à l’appel de la méthode 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(); }
Cette procédure part du principe que vous avez implémenté les opérations requises dans le service distant et que vous avez configuré le type de données de retour pour les opérations utilisant un type de données personnalisé. Voir « Configuration des types de données pour les opérations de service de données » à la page 27. 1 Dans la vue Données/Services, développez le nœud Types de données. 2 Accédez au menu contextuel d’un type de données et sélectionnez Activer la gestion de données. 3 En l’absence de clé unique pour le type de données, spécifiez les attributs qui caractériseront une instance de ce type
Cet attribut est généralement la clé primaire. 4 Spécifiez les opérations d’ajout, d’obtention de toutes les propriétés, de mise à jour et de suppression que vous avez
La gestion des données est activée pour l’opération.
Flash Builder génère du code client donnant accès aux opérations du service distant. La génération de code est déclenchée par les opérations suivantes :
• Actualisation du service de données dans la vue Données/Services • Configuration d’un type de retour pour une opération • Liaison d’une opération de service à un contrôle de l’interface utilisateur • Activation de la pagination pour une opération de service • Activation de la gestion de données pour un service • Création d’un gestionnaire d’événement ou d’un appel de service
Utilisez l’assistant de service pour vous connecter à un service de données. Lorsque vous vous connectez à un service, Flash Builder génère un fichier de classe ActionScript donnant accès aux opérations du service. Pour les services qui accèdent à un composant RemoteObject, la classe générée étend la classe RemoteObjectServiceWrapper. En règle générale, les services implémentés avec PHP, ColdFusion, BlazeDS et LiveCycle Data Services accèdent à un RemoteObject. Pour les services HTTP, la classe générée étend la classe HTTPServiceWrapper. Pour les services Web, la classe générée étend la classe WebServiceWrapper. Flash Builder base le nom du fichier de la classe générée sur le nom attribué au service dans l’assistant de service. Par défaut, Flash Builder place cette classe dans le dossier source principal d’un projet. En règle générale, ce dossier est nommé src. Le nom du package est basé sur celui du service. Par exemple, Flash Builder génère les classes ActionScript suivantes pour une classe EmployeeService. - project | - src La super-classe est une classe générée. Ne l’éditez jamais. Les modifications apportées à la super-classe risquent d’être remplacées. Les modifications apportées à l’implémentation peuvent provoquer un comportement non défini. Dans cet exemple, utilisez EmployeeService.as pour étendre la super-classe générée et ajouter l’implémentation.
« Connexion à des services de données » à la page 9
De nombreux services de données distants fournissent une définition de type côté serveur. Ces services renvoient des données complexes comme type de données personnalisé. Pour les services de données distants ne renvoyant pas de données typées, Flash Builder fournit une définition de type côté client. Avec la définition de type côté client, vous utilisez l’assistant de connexion Flash Builder pour définir et configurer le type des données complexes renvoyées par le service. Vous pouvez par exemple définir et configurer un type de données Employé pour un service renvoyant des enregistrements d’une base de données d’employés. Flash Builder génère une classe ActionScript pour l’implémentation de chaque type de données personnalisé envoyé par le service. Il utilise cette classe pour créer des objets de valeur, qu’il utilise ensuite pour accéder aux données à partir du service distant. Par exemple, Flash Builder génère les classes ActionScript suivantes pour une classe EmployeeService qui contient un type de données Employee : - project | - src Dans cet exemple, utilisez EmployeeService.as et Employee.as pour étendre la super-classe générée et ajouter l’implémentation.
Pour obtenir des informations sur la liaison des données renvoyées par des opérations de service à un contrôle de l’interface utilisateur, voir « Liaison d’opérations de service à des contrôles » à la page 23. Lorsque vous liez une opération de service à un contrôle, Flash Builder génère le code suivant :
• Un gestionnaire d’événement pour appeler l’appel de service • Une liaison de données entre le contrôle et les données renvoyées par l’opération
Une balise Declarations est un élément MXML qui déclare des propriétés de la classe actuelle qui ne sont pas des propriétés par défaut ni visuelles. Lors de la liaison d’une opération de service à une interface utilisateur, Flash Builder génère une balise Declarations contenant une propriété CallResponder et une balise de service. La propriété CallResponder et la classe de service générée sont les propriétés de l’élément de conteneur, qui est généralement la balise Application. L’exemple suivant présente une balise Declarations donnant accès à un service EmployeeService distant : <fx:Declarations> <s:CallResponder id="getAllEmployeesResult"/> <employeesservice:EmployeesService id="employeesService" fault="Alert.show(event.fault.faultString + '\n' DataGrid. Immédiatement après sa création, le composant DataGrid affiche les éléments extraits de l’appel de service getAllItems. Le contrôle Delete Item Button supprime de la base de données l’enregistrement sélectionné dans le composant DataGrid.
La propriété event du contrôle est définie sur le gestionnaire d’événement généré. L’exemple suivant illustre le gestionnaire d’événement creationComplete généré pour un contrôle DataGrid :
Flash Builder génère du code qui lie les données renvoyées par une opération de service au contrôle de l’interface utilisateur affichant les données. L’exemple suivant illustre le code que Flash Builder génère pour renseigner un contrôle DataGrid. L’opération getAllItems renvoie un ensemble d’enregistrements d’employés pour le type de données personnalisé Employé.
DataGridColumn correspondant à chaque champ renvoyé pour un enregistrement Employé. Les propriétés headerText et dataField de chaque colonne sont définies en fonction des données renvoyées dans un enregistrement Employé. <mx:DataGrid creationComplete="datagrid1_creationCompleteHandler(event)" dataProvider="{getAllItemsResult.lastResult}" editable="true"> <mx:columns> Vous n’avez pas à modifier de code d’application client une fois la pagination activée. Pour plus d’informations, voir « Activation de la pagination » à la page 32.
Dans Flash Builder, la gestion de données est la synchronisation d’un ensemble de mises à jour des données sur le serveur. Vous pouvez activer la gestion de données pour les types de données personnalisés renvoyés par un service. Avec la gestion de données activée, vous pouvez modifier un ou plusieurs éléments dans une application client sans mettre à jour le serveur. Vous pouvez ensuite valider l’ensemble des modifications apportées au serveur en une opération. Vous pouvez aussi annuler les modifications sans mettre à jour les données sur le serveur. Pour plus d’informations sur l’implémentation de cette fonction, voir « Activation de la gestion des données » à la page 34. Lorsque vous activez la gestion des données, Flash Builder modifie l’implémentation de la classe de service générée et de la classe générée pour les types de données personnalisés. Il crée une classe DataManager pour implémenter cette fonctionnalité.
Lorsque vous appelez des opérations de service pour un type de données géré, les changements sont reflétés dans l’application client. Toutefois, vous pouvez spécifier que les données sur le serveur ne soient mises à jour que lorsque vous appelez la méthode commit() de la classe DataManager. Lorsque la gestion des données est activée pour un service, le service comporte un indicateur autoCommit. Par défaut, autoCommit est défini sur false. L’indicateur autoCommit détermine si les changements sont validés immédiatement ou s’il faut attendre l’appel de service.commit().
Si autoCommit est défini sur true, les mises à jours sont envoyées immédiatement au serveur. Vous ne pouvez pas appeler la méthode revertChanges() pour ignorer les changements. L’indicateur deleteItemOnRemoveFromFill détermine si un élément supprimé est immédiatement retiré de la base de données. Si l’indicateur est défini sur true, l’élément n’est supprimé qu’à l’appel de service.commit(). Le code suivant désactive la synchronisation par gestion des données des mises à jour avec les données du serveur. Les modifications apportées aux données du type géré sont mises à jour immédiatement sur le serveur. bookService.getDataManager(bookService.DATA_MANAGER__BOOK).autoCommit = true;
En outre, les éléments supprimés ne sont retirés de la base de données qu’à l’appel de commit(). bookService.getDataManager(bookService.DATA_MANAGER__BOOK).autoCommit = false; bookService.getDataManager(bookService.DATA_MANAGER__BOOK).deleteItemOnRemoveFromFill= true;
La classe DataManager fournit la méthode revertChanges qui permet de rétablir dans l’application client les valeurs extraites du serveur avant le dernier appel de la méthode commit. Appelez revertChanges() avant d’appeler commit() pour annuler les modifications apportées à un type de données géré dans l’application client : bookService.getDataManager (bookService.DATA_MANAGER_BOOK).revertChanges();
Si vous souhaitez remplacer le comportement par défaut de la gestion des données et désactiver la possibilité de rétablir les modifications, définissez l’indicateur autoCommit sur true. Par exemple, si vous disposé d’une instance de bookService et avez activé la gestion des données pour le type de données Book, définissez autoCommit sur true : bookService.getDataManager(bookService.DATA_MANAGER__BOOK).autoCommit = true;
Il existe de nombreux facteurs à considérer lorsque vous déplacez votre application d’un environnement de développement vers un environnement de déploiement. Le processus de déploiement d’une application dépend de votre application, de ses exigences et de votre environnement de déploiement. Par exemple, le processus de déploiement d’une application d’un site Web interne accessible uniquement aux employés de l’entreprise est différent du processus de déploiement de la même application sur un site Web public. La section Deploying applications présente les différents éléments à considérer et inclut une liste de contrôle de déploiement (Deployment checklist). La liste de contrôle aborde les problèmes courants de configuration de système que les clients ont pu rencontrer lors du déploiement des applications pour la mise en production. La documentation contient également des conseils de dépannage permettant de détecter les problèmes de déploiement les plus courants.
Les outils Flash Builder vous permettent de générer du code client pour accéder aux données d’une base de données. Cette fonction est disponible pour PHP et ColdFusion. Cependant, ce code est destiné uniquement au prototypage. N’utilisez pas ce code comme modèle pour écrire des applications sécurisées. Par défaut, le code généré permet à toute personne disposant d’un accès réseau à votre serveur d’insérer, de sélectionner, de mettre à jour ou de supprimer des éléments du tableau de base de données. Voici quelques recommandations à prendre en compte lors de la modification du code généré ou de la rédaction de code accédant aux services. Pour plus d’informations, voir Sécurisation des services de données.
Supprimez ou ajoutez un commentaire à toute fonction que vous ne souhaitez pas utiliser dans votre application.
Ajoutez l’authentification utilisateur afin de vous assurer que seuls les utilisateurs de confiance peuvent accéder à vos informations de base de données.
Si l’authentification est nécessaire, ajoutez les vérifications d’autorisation. Même si vous avez donné accès à des utilisateurs authentifiés à votre application, vous devez vous assurer qu’ils sont autorisés à faire des requêtes spécifiques. Par exemple, vous pouvez autoriser tous les utilisateurs à sélectionner, mais restreindre le nombre d’utilisateurs autorisés à supprimer. Un autre exemple consiste à autoriser un utilisateur A à extraire ses propres informations à l’aide d’une requête de sélection tout en l’empêchant d’utiliser cette même requête pour accéder aux informations de l’utilisateur B.
Assurez-vous d’ajouter la validation de données. Par exemple, effectuez une validation des données fournies à toute instruction d’insertion afin de vous assurer qu’aucune donnée erronée ou malveillante ne soit acceptée dans la base de données. La validation côté client ne permet pas de vous protéger des envois de requêtes manuelles à votre serveur Web. La validation des données protège contre les pirates et garantit la qualité des informations stockées.
Les méthodes de sélection peuvent sélectionner la totalité d’un tableau. Dans certains cas, cela peut entraîner la présence d’une quantité trop importante d’informations sur le réseau. Extrayez uniquement les données dont vous avez besoin. Par exemple, SELECT * à partir d’un tableau d’utilisateurs peut renvoyer le nom de l’utilisateur et son mot de passe sur le réseau.
L’utilisation d’un protocole sécurisé permet d’assurer la sécurité des informations que vous envoyez.
Lorsque vous exportez la version validée d’une application, Flash Builder fournit l’option Activer l’affichage de la source. Cette option permet aux utilisateurs d’afficher les fichiers source qui implémentent l’application. Dans le cadre des projets pour serveurs, les fichiers source incluent le dossier services qui contient les fichiers fournissant l’accès à l’implémentation du service. Important : faites preuve de prudence lorsque vous incluez des fichiers de service avec l’option d’affichage de la source. Lors de l’accès à la base de données, les fichiers de service exposent des détails et peuvent comporter des informations sensibles, telles que des noms d’utilisateurs et des mots de passe. Si des services sont inclus dans l’option d’affichage de la source, toute personne ayant accès à l’application lancée peut également accéder à des données sensibles.
Sécurité Flex Les meilleures pratiques en matière de rédaction de services incluent :
• Utilisez l’authentification de service pour autoriser uniquement certains utilisateurs à effectuer certaines actions. Par exemple, admettons que vous disposez d’une application permettant de modifier les données d’employés avec un appel RemoteObject. Dans ce cas, utilisez l’authentification RemoteObject afin de vous assurer que seuls les gestionnaires puissent modifier les données des employés.
• Appliquez des contraintes de sécurité déclarative à des services entiers. • Lorsque vous accédez à un service Web (<mx:WebService>) ou HTTP (<mx:HTTPService>), l’un des éléments suivants doit être vrai :
Le modèle de sécurité pour Flex protège le client et le serveur. Tenez compte des deux aspects généraux de sécurité suivants :
• Flash Player opérant dans un sandbox sur le client Flex prend en charge l’utilisation de la sécurité d’applications Web de tout serveur d’application J2EE. En outre, les applications précompilées dans Flex peuvent s’intégrer au modèle d’authentification et d’autorisation de toute technologie de serveur sous-jacente afin d’empêcher les utilisateurs d’accéder à vos applications. La structure Flex inclut également plusieurs mécanismes de sécurité intégrés vous permettant de contrôler l’accès aux services Web, aux services HTTP et aux ressources basées sur serveur comme les EJB. Flash Player s’exécute au sein d’un sandbox de sécurité qui empêche le piratage du client par du code d’application malveillant. Remarque : le contenu SWF exécuté dans Adobe AIR suit des règles de sécurité différentes de celles appliquées au contenu exécuté dans le navigateur. Pour plus de détails, voir la rubrique sur la sécurité Air de la documentation AIR. Pour obtenir des liens vers différentes rubriques de sécurité, voir Security Topic Center sur le portail Adobe Developer Connection.
BlazeDS et LiveCycle Data Services. AMF fournit la messagerie nécessaire pour échanger des données entre une base de données et l’application client. ColdFusion, BlazeDS et LiveCycle Data Services fournissent chacun une structure AMF pour les services d’objets distants. Pour les services implémentés dans PHP, Flash Builder utilise la structure Zend AMF. Les services ColdFusion et PHP peuvent fournir une définition de type côté serveur. Dans la définition de type côté serveur, le service définit le type des données renvoyées. Toutefois, si l’implémentation de service ne définit pas le type de données de retour, Flash Builder fournit la définition de type côté client. Il échantillonne des données du service, ce qui vous permet de configurer le type de retour dans l’application client.
Dans Flex, une application client utilise le type des données renvoyées par un appel de service dans les méthodes qui accèdent et affichent les données. Cependant, les exemples de services énumérés ci-dessous renvoient des données non typées.
• « Implémentation de services PHP » à la page 53 • « Exemple d’implémentation de services à partir de plusieurs sources » à la page 67 Par exemple, pour l’opération getAllEmployees, le service renvoie un tableau d’objets non typés représentant des enregistrements issus de la base de données. Flash Builder fournit des outils qui activent la définition de type côté client. Les outils Flash Builder vous permettent d’examiner en détail les données renvoyées et de définir un type personnalisé pour les données. Vous pouvez définir le type de données personnalisé Employé pour l’objet renvoyé des enregistrements d’employés. Chaque colonne de l’enregistrement devient une propriété du type de données Employé. A l’aide du type de données personnalisé Employé, l’application client peut accéder aux données renvoyées et les afficher correctement. Flash Builder peut également accéder à des services implémentant une définition de type côté serveur. Pour obtenir des exemples de la définition de type côté serveur, voir Exemples de définition de type côté serveur dans Flash Builder.
Lors de l’implémentation de services dans ColdFusion, implémentez les services en tant que fichiers de composants ColdFusion (CFC). Chaque CFC contient des fonctions fournissant des opérations de service. Vous pouvez créer des services ColdFusion dans n’impote quel IDE, tel qu’Adobe ColdFusion® Builder™. Flash Builder ne fournit pas d’éditeur spécifique aux fichiers ColdFusion. L’ouverture d’un fichier ColdFusion dans Flash Builder conduit toutefois au lancement de l’application du système associée aux fichiers ColdFusion.
Vous pouvez implémenter un service ColdFusion de base en créant un composant ColdFusion (CFC) qui contient les fonctions pour les opérations de service. L’exemple suivant, employeeService.cfc, illustre un EmployeeService qui implémente deux fonctions. La fonction getAllIEmployees() extrait tous les enregistrements d’employés de la base de données. La fonction getEmployees() renvoie un enregistrement d’employé unique basé sur l’argument emp_no de la fonction. Cet exemple illustre la définition de type côté client. Le service renvoie des données non typées. Flash Builder utilise la définition de type côté client pour introspecter les données renvoyées et définir le type de données. Les exemples suivants illustrent comment implémenter les services pour la pagination et la gestion de données. Vous pouvez également utiliser Flash Builder pour accéder à des services implémentant la définition de type côté serveur. Voir « Définition de type côté client et côté serveur » à la page 46. Aucun exemple de définition de type côté serveur n’était disponible lorsque la rédaction de ce document a été achevée. Pour obtenir des exemples de définition de type côté serveur, voir Exemples de définition de type côté serveur dans Flash Builder.
Cet exemple illustre comment implémenter un service de base dans ColdFusion. Cet exemple est basé sur le code généré par Flash Builder lors de l’accès au tableau de la base de données. Voir « Génération d’un exemple de service ColdFusion à partir d’un tableau de base de données » à la page 10. Cet exemple illustre la définition de type côté client. Voir « Définition de type côté client et côté serveur » à la page 46. Pour obtenir des exemples de définition de type côté serveur, voir Flash Builder server-side type examples. Important : les exemples de services sont destinés uniquement à l’établissement d’un prototype. Utilisez l’exemple de service uniquement dans un environnement de développement fiable. Avant de déployer ce service, assurez-vous d’augmenter la protection et de restreindre l’accès de façon adéquate. Pour obtenir des informations sur la rédaction de services ColdFusion sécurisés, voir la documentation ColdFusion About User Security.
Flex gère les jeux d’enregistrements renvoyés en tant que tableau d’objets. Chaque ligne représente un enregistrement extrait de la base de données. Chaque colonne de l’enregistrement de base de données devient une propriété de l’objet renvoyé. L’application client peut ainsi accéder aux données renvoyées comme objets avec un ensemble de propriétés.
• Fonction de gestion des erreurs du serveur ColdFusion La gestion des erreurs fournie par ColdFusion est utile lors du débogage d’un service. Dans ColdFusion Administrator, modifiez les paramètres de débogage et de journalisation afin de fournir des informations de débogage plus performantes. L’interface Opération de test de Flash Builder affiche les informations renvoyées par le serveur ColdFusion. Pour plus d’informations sur les services de test, voir « Débogage de services distants » à la page 65.
L’exemple de code n’illustre pas comment authentifier les utilisateurs. Voir la documentation ColdFusion About User Security.
« Configuration des types de données pour les opérations de service de données » à la page 27 « Accès aux services ColdFusion » à la page 9 « Génération d’un exemple de service ColdFusion à partir d’un tableau de base de données » à la page 10
Les outils Flash Builder permettent d’implémenter la pagination des données extraites d’un service distant. La pagination est l’extraction incrémentielle de jeux de données volumineux. Pour implémenter la pagination, Flash Builder nécessite des signatures de fonction spécifiques. L’exemple de code suivant illustre une méthode d’implémentation d’un service ColdFusion pour des données paginées. L’exemple EmployeeServicePaged est basé sur le code généré par Flash Builder lors de l’accès au tableau de la base de données. Voir « Génération d’un exemple de service ColdFusion à partir d’un tableau de base de données » à la page 10. Important : les exemples de services sont destinés uniquement à l’établissement d’un prototype. Utilisez l’exemple de service uniquement dans un environnement de développement fiable. L’exemple permet à toute personne disposant d’un accès réseau à votre serveur d’accéder aux données du tableau de la base de données et de les modifier ou supprimer. Avant de déployer ce service, assurez-vous d’augmenter la protection et de restreindre l’accès de façon adéquate. Pour obtenir des informations sur la rédaction de services ColdFusion sécurisés, voir la documentation ColdFusion About User Security.
« Gestion de l’accès aux données à partir du serveur » à la page 32
Les outils Flash Builder permettent d’implémenter la fonctionnalité de gestion des données pour les services distants. La gestion de données est la synchronisation des mises à jour des données sur le serveur à partir de l’application client.
L’exemple EmployeeServiceDM est basé sur le code généré par Flash Builder lors de l’accès au tableau de la base de données. Voir « Génération d’un exemple de service ColdFusion à partir d’un tableau de base de données » à la page 10. Important : les exemples de services sont destinés uniquement à l’établissement d’un prototype. Utilisez l’exemple de service uniquement dans un environnement de développement fiable. Avant de déployer ce service, assurez-vous d’augmenter la protection et de restreindre l’accès de façon adéquate. Pour obtenir des informations sur la rédaction de services ColdFusion sécurisés, 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. « Exemples de services ColdFusion » à la page 47 « Configuration des types de données pour les opérations de service de données » à la page 27 « Gestion de l’accès aux données à partir du serveur » à la page 32
Adobe® ColdFusion® Builder™ fournit la fonctionnalité Adobe CFC Generator. Utilisez CFC Generator pour générer un CFC ORM ou un CFC traditionnel à partir d’un ensemble de tables de bases de données. Le CFC généré par ColdFusion Builder peut ensuite être utilisé en tant que service de données dans Flash Builder. Adobe CFC Generator crée des services qui implémentent la définition de type côté serveur. Pour plus d’informations, voir Using Adobe CFC Generator. Remarque : la fonctionnalité de mappage objet/relationnel ColdFusion (ORM (object-relational mapping) utilise un modèle d’objets afin de définir une stratégie de mappage pour le stockage et la récupération de données à partir d’une base de données relationnelle). Voir ColdFusion ORM.
Il n’est pas nécessaire que les classes dans PHP soient des classes orientées objet. Chaque classe peut plutôt constituer une bibliothèque de fonctions fournissant les opérations de service.
Builder conduit toutefois au lancement de l’application du système associée 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.
Pour plus d’informations sur Zend AMF, voir Guide de référence du programmeur Zend Framework. Pour plus d’informations sur l’installation de Zend Framework, voir « Installation de Zend Framework » à la page 21. Pour plus d’informations sur l’utilisation de Zend avec Flash Builder pour PHP, voir le site Web de Zend. Remarque : l’utilisation de la structure Zend AMF par Flash Builder ne signifie pas que vous devez obligatoirement utiliser les composants Zend pour la création de services PHP. Malgré le bon fonctionnement des composants Zend avec Flash Builder, vous pouvez utiliser tout autre environnement de développement pour la création de services.
Les exemples suivants illustrent comment implémenter les services pour la pagination et la gestion de données. Vous pouvez également utiliser Flash Builder pour accéder à des services implémentant la définition de type côté serveur. Voir « Définition de type côté client et côté serveur » à la page 46. Aucun exemple de définition de type côté serveur n’était disponible lorsque la rédaction de ce document a été achevée. Pour obtenir des exemples de définition de type côté serveur, voir Exemples de définition de type côté serveur dans Flash Builder.
Flash Builder lors de l’accès au tableau de la base de données. Voir « Génération d’un exemple de service PHP à partir d’un tableau de base de données » à la page 12. Cet exemple illustre la définition de type côté client. Voir « Définition de type côté client et côté serveur » à la page 46. Important : les exemples de services sont destinés uniquement à l’établissement d’un prototype. Utilisez l’exemple de service uniquement dans un environnement de développement fiable. Avant de déployer ce service, assurez-vous d’augmenter la protection et de restreindre l’accès de façon adéquate. Pour plus d’informations sur la rédaction de services sécurisés, voir « Déploiement des applications accédant aux services de données » à la page 43.
• Il fournit des variables de classe pour la connexion au service et l’accès aux tableaux dans la base de données. Vous pouvez utiliser ces variables dans des fonctions de la classe. Remplacez les valeurs de ces variables avec des valeurs de votre système.
Lors de la programmation à l’aide de la structure Flex, les services ne renvoient que des données. L’application client gère le formatage et la présentation des données. Ce modèle diffère des services PHP traditionnels, qui retournent des données formatées dans un modèle HTML.
Le nombre de variables et la longueur des types de chaînes doivent correspondre aux paramètres dans l’instruction. Le menu de la palette ‘? » de l’instruction de préparation est un espace réservé pour le paramètre. mysqli reconnaît les types suivants :
• double (d) Le serveur ne définissant pas le type des données renvoyées, vous devez configurer le type de données de l’objet renvoyé. Voir « Définition de type côté client et côté serveur » à la page 46.
• Il utilise les instructions de préparation mysqli pour la création de requêtes de base de données. L’utilisation des instructions de préparation est une défense contre les attaques par instructions d’injection SQL dans les appels au serveur. L’instruction est exécutée sur le serveur uniquement après sa préparation.
L’exemple de code n’illustre pas comment authentifier les utilisateurs. Voir la documentation ColdFusion About User Security. Les principes de sécurité sur l’authentification et l’autorisation des utilisateurs dans cette documentation ColdFusion s’appliquent aux services PHP.
Les informations que vous fournissez dans les exceptions sont utiles lors du débogage de l’implémentation du service. L’interface Opération de test de Flash Builder affiche les informations renvoyées par les exceptions. Pour plus d’informations sur les services de test, voir « Débogage de services distants » à la page 65.
« Accès aux services PHP » à la page 11 « Génération d’un exemple de service PHP à partir d’un tableau de base de données » à la page 12
Pour implémenter la pagination, Flash Builder nécessite des signatures de fonction spécifiques. L’exemple de code suivant illustre une méthode d’implémentation d’un service PHP pour des données paginées. Cet exemple est basé sur le code généré par Flash Builder lors de l’accès au tableau de la base de données. Voir « Génération d’un exemple de service PHP à partir d’un tableau de base de données » à la page 12. Important : les exemples de services sont destinés uniquement à l’établissement d’un prototype. Utilisez l’exemple de service uniquement dans un environnement de développement fiable. Avant de déployer ce service, assurez-vous d’augmenter la protection et de restreindre l’accès de façon adéquate. Pour plus d’informations sur la rédaction de services sécurisés, voir « Déploiement des applications accédant aux services de données » à la page 43. <?php /** * This sample service contains functions that illustrate typical service operations. « Configuration des types de données pour les opérations de service de données » à la page 27 « Gestion de l’accès aux données à partir du serveur » à la page 32
La gestion de données est la synchronisation des mises à jour des données sur le serveur à partir de l’application client. Pour implémenter la gestion de données, Flash Builder nécessite une combinaison de signatures de fonction spécifiques. L’exemple de code suivant illustre une méthode d’implémentation d’un service PHP pour la gestion de données. Cet exemple est basé sur le code généré par Flash Builder lors de l’accès au tableau de la base de données. Voir « Génération d’un exemple de service PHP à partir d’un tableau de base de données » à la page 12.
« Exemples de services PHP » à la page 54 « Configuration des types de données pour les opérations de service de données » à la page 27 « Gestion de l’accès aux données à partir du serveur » à la page 32
Le débogage des applications accédant aux services distants peut se faire de différentes manières.
La vue Opération de test de Flash Builder vous permet d’appeler des opérations de service et d’afficher les données renvoyées. Elle affiche tous les messages d’erreur interceptés par le service.
Pour le débogage supplémentaire des services, vous pouvez écrire des scripts qui testent le code du serveur et des informations de flux de sortie dans les fichiers journaux.
Après avoir créé une application accédant à un service dans Flash Builder, utilisez le Moniteur de réseau pour visionner les données échangées entre le serveur et le client.
Utilisez la vue Opération de test de Flash Builder afin d’appeler les opérations d’un service et afficher les résultats de l’opération. Les résultats incluent tout message d’erreur renvoyé par un service. Vous pouvez utiliser la vue Opération de test afin d’afficher les données renvoyées par les opérations sur les services que vous rédigez, les services disponibles à partir de HTTP ou les services Web.
Cette procédure part du principe que vous avez rédigé un service que vous testez ou que vous pouvez accéder à un service HTTP ou à un service Web. 1 Dans la vue Données/Services de Flash Builder, accédez à l’opération de service que vous souhaitez tester. 2 Dans le menu contextuel de l’opération, sélectionnez l’option Opération de test. 3 (Facultatif) Dans la vue Opération de test, sélectionnez Authentification requise afin de saisir les informations de
4 Si l’opération accepte les paramètres, cliquez sur le champ Entrer une valeur afin de fournir une valeur pour le
Si le paramètre nécessite un type complexe, cliquez sur les points de suspension dans le champ Entrer une valeur afin d’ouvrir un éditeur acceptant la notation JSON. Spécifiez la valeur pour le paramètre à l’aide de la notation JSON. 5 Cliquez sur Tester afin d’afficher le résultat de l’opération.
Utilisez des scripts de test pour afficher et déboguer le code serveur avant d’essayer de vous connecter au serveur dans Flash Builder. Les scripts de test présentent les avantages suivants :
Rafraîchissez l’affichage du navigateur pour visionner le résultat des modifications que vous apportez au code.
Exemple d’implémentation de services à partir de plusieurs sources En règle générale, les applications accèdent aux données de sources différentes, affichant le résultat de l’association de données dans une application. Cet exemple illustre comment associer les données des trois tableaux suivants dans une base de données d’employés :
Chaque enregistrement contient les champs suivants : numéro et nom du département.
DataGrid Employés répertorie tous les employés de ce département. La sélection d’un employé dans le composant DataGrid Employés renseigne un formulaire vous permettant de mettre à jour l’enregistrement de l’employé sélectionné.
Pour cet exemple, créez un service unique. Le service contient les opérations suivantes :
• getEmployeesByDept() 1 Dans Flash Builder, créez un projet Flex nommé Associations.
(PHP) Après avoir créé le projet, Flash Builder crée un dossier de sortie dans le dossier de racine Web de votre configuration PHP. Le nom par défaut du projet PHP_Associations est PHP_Associations-debug. (ColdFusion) Lors de la création du projet, spécifiez ColdFusion comme type de serveurs d’applications. Sélectionnez ensuite ColdFusion Flash Remoting. 2 (PHP) Dans PHP_Associations-debug, créez un dossier nommé services. Copiez EmployeeService.php dans
3 (ColdFusion) Créez un dossier nommé Associations dans la racine Web de votre configuration ColdFusion.
4 Importez EmployeeService dans le projet.
Sélectionnez Données > Connexion à PHP. Pour spécifier la classe PHP, accédez au dossier services et sélectionnez EmployeeService.php. Cliquez sur Terminer. Pour plus d’informations, voir « Connexion à des services de données PHP » à la page 11. 5 Configurez le type de retour des opérations dans EmployeeService.
Dans le menu contextuel de l’opération getAllDepartments, sélectionnez Configurer le type de retour. Cliquez sur Suivant pour lancer la détection automatique du type de retour. Spécifiez Département pour le type de retour personnalisé. Cliquez sur Terminer.
Dans le menu contextuel de l’opération getEmployeesByDept(), sélectionnez Configurer le type de retour. Cliquez sur Suivant pour lancer la détection automatique du type de retour. Saisissez la valeur d007 pour le paramètre. Cliquez sur Suivant. Spécifiez Employé comme type de retour personnalisé. Cliquez sur Terminer. Pour plus d’informations, voir « Configuration des types de données pour les opérations de service de données » à la page 27.
Vous pouvez utiliser un composant HTTPService avec tout type de technologie côté serveur, y compris les pages PHP, les pages ColdFusion, les pages JavaServer (JSP), les servlets Java, Ruby on Rails et les pages Microsoft ASP. Il vous est également possible d’utiliser HTTPService pour accéder aux services Web basés sur REST. Pour obtenir des informations de référence API sur le composant HTTPService, voir mx.rpc.http.mxml.HTTPService.
PHP avec la méthode GET ou POST pour effectuer une interrogation de base de données, puis formater les données du résultat de l’interrogation dans une structure XML et renvoyer la structure XML à l’application dans le cadre de la réponse HTTP. Une fois le résultat renvoyé à l’application, vous pouvez l’afficher dans un ou plusieurs contrôles de l’interface utilisateur. Code MXML Dans l’exemple suivant, l’application appelle une page PHP avec la méthode POST. La page PHP interroge une table de base de données MySQL appelée users. Elle formate les résultats de l’interrogation sous XML et renvoie les données XML à l’application, dans laquelle elles sont liées à la propriété dataProvider d’un contrôle DataGrid et affichées dans ce contrôle DataGrid. L’application envoie également le nom d’utilisateur et l’adresse électronique des nouveaux utilisateurs à la page PHP, qui procède à une insertion dans la table de base de données des utilisateurs.
Une autre possibilité consiste à utiliser une propriété resultFormat définie sur e4x pour renvoyer les données en tant qu’objet XMLList sur lequel vous pouvez exécuter ECMAScript pour les opérations XML (E4X). Si vous sélectionnez la valeur e4x pour la propriété resultFormat, vous devrez apporter les quelques modifications suivantes au code MXML. Remarque : si le format de résultat est e4x, n’incluez pas le nœud racine de la structure XML dans la notation par point lors de la liaison au contrôle DataGrid.
également utiliser les composants pour insérer, mettre à jour et supprimer les données d’une base de données. Vous pouvez appeler une page ColdFusion avec la méthode GET ou POST pour effectuer une interrogation de base de données, puis formater les données du résultat de l’interrogation dans une structure XML et renvoyer la structure XML à l’application dans le cadre de la réponse HTTP. Une fois le résultat renvoyé à l’application, vous pouvez l’afficher dans un ou plusieurs contrôles de l’interface utilisateur. Code MXML Dans l’exemple suivant, l’application appelle une page ColdFusion avec la méthode POST. La page ColdFusion interroge une table de base de données MySQL appelée users. Elle formate les résultats de l’interrogation sous XML et renvoie les données XML à l’application, dans laquelle elles sont liées à la propriété dataProvider d’un contrôle DataGrid et affichées dans ce contrôle DataGrid. L’application envoie aussi le nom d’utilisateur et l’adresse électronique des nouveaux utilisateurs à la page ColdFusion, qui procède à une insertion dans la table de base de données 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"> La propriété resultFormat du composant HTTPService étant définie sur object, les données sont renvoyées à l’application en tant que graphique d’objets ActionScript. Il s’agit de la valeur par défaut de la propriété resultFormat. Une autre possibilité consiste à utiliser un format de résultat e4x pour renvoyer les données en tant qu’objet XMLList sur lequel vous pouvez exécuter ECMAScript pour les opérations XML (E4X). Si vous sélectionnez la valeur e4x pour la propriété resultFormat, vous devrez apporter les quelques modifications suivantes au code MXML. Remarque : si le format de résultat est e4x, n’incluez pas le nœud racine de la structure XML dans la notation par point lors de la liaison au contrôle DataGrid. Les données XML renvoyées dans cet exemple ne contiennent aucune information d’espace de noms. Pour obtenir des informations sur l’utilisation de données XML ne contenant pas d’espaces de noms, voir « Traitement de résultats en tant que données XML avec le format de résultat E4X » à la page 127. ... <s:HTTPService id="userRequest" url="http://myserver:8500/flexapp/returncfxml.cfm" useProxy="false" method="POST" resultFormat="e4x"> ... SQL pour afficher les résultats d’une interrogation de base de données dans une application. Vous pouvez également utiliser les composants pour insérer, mettre à jour et supprimer les données d’une base de données. Vous pouvez appeler une page JSP avec la méthode GET ou POST pour effectuer une interrogation de base de données, puis formater les données du résultat de l’interrogation dans une structure XML et renvoyer la structure XML à l’application dans le cadre de la réponse HTTP. Une fois le résultat renvoyé à l’application, vous pouvez l’afficher dans un ou plusieurs contrôles de l’interface utilisateur. Code MXML Dans l’exemple suivant, l’application appelle une page JSP et extrait des données d’une base de données SQL. Elle formate les résultats de l’interrogation de la base de données sous XML et retourne les données XML à l’application, dans laquelle elles sont liées à la propriété dataProvider d’un contrôle DataGrid et affichées dans ce contrôle DataGrid.
Remarque : si le format de résultat est e4x, n’incluez pas le nœud racine de la structure XML dans la notation par point lors de la liaison au contrôle DataGrid. Les données XML renvoyées dans cet exemple ne contiennent aucune information d’espace de noms. Pour obtenir des informations sur l’utilisation de données XML ne contenant pas d’espaces de noms, voir « Traitement de résultats en tant que données XML avec le format de résultat E4X » à la page 127. ... <s:HTTPService id="srv" url="catalog.jsp" resultFormat="e4x"/> ... Dernière mise à jour le 16/11/2012
Protocol) 1.1, XML Schema 1.0 (versions 1999, 2000 et 2001), WSDL 1.1 codé RPC, littéral RPC et littéral document (paramètres de style brut et enveloppé). Les deux types de services Web les plus courants utilisent des liaisons SOAP codées (RPC) ou littéral document ; les termes codées et littéral indiquent le type de mappage WSDL sur SOAP qu’un service utilise. Flex prend en charge les demandes et les résultats de service Web formatés en tant que messages SOAP. SOAP fournit la définition du format XML que vous pouvez utiliser pour échanger des informations structurées et typées entre un client de service Web (une application créée avec Flex, par exemple) et un service Web.
Si vous n’utilisez pas LiveCycle Data Services ou BlazeDS, vous pouvez accéder aux services Web dans le même domaine que l’application ou utiliser un fichier crossdomain.xml (de régulation interdomaines) permettant l’accès à partir du domaine de l’application et devant être installé sur le serveur Web hébergeant le service RPC. Pour obtenir des informations de référence API sur le composant WebService, voir mx.rpc.soap.mxml.WebService. Exemple d’application WebService L’exemple de code suivant concerne une application qui utilise un composant WebService pour appeler des opérations de service Web. Code MXML Dans l’exemple suivant, l’application appelle un service Web. Ce service interroge une table de base de données SQL appelée users et renvoie des données à l’application, dans laquelle ces données sont liées à la propriété dataProvider d’un contrôle DataGrid où elles sont affichées. L’application envoie également le nom d’utilisateur et l’adresse électronique des nouveaux utilisateurs au service Web, qui procède à une insertion dans la table de base de données des utilisateurs. L’implémentation principale du service Web est un composant ColdFusion ; le même composant ColdFusion est accédé en tant qu’objet distant dans « Utilisation de composants RemoteObject » à la page 101. <?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> Remarque : lorsque vous déclarez un composant WebService dans ActionScript, appelez la méthode WebService.loadWSDL().
Les documents WSDL contiennent les balises décrites dans le tableau suivant. Balise
Lorsqu’elle appelle une opération orientée RPC, une application envoie un message SOAP spécifiant une opération et ses paramètres. Lorsqu’elle appelle une opération orientée document, une application envoie un message SOAP contenant un document XML. Dans un document WSDL, chaque balise <port> comporte une propriété binding qui spécifie le nom d’une balise <soap:binding> spécifique, comme l’illustre l’exemple suivant : <binding name="InstantMessageAlertSoap" type="s0:InstantMessageAlertSoap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> Utilisation d’en-têtes SOAP Un en-tête SOAP est une balise facultative dans une enveloppe SOAP qui contient généralement des informations spécifiques aux applications (des informations d’authentification, par exemple).
Vous pouvez ajouter un en-tête SOAP à toutes les opérations de services Web ou à des opérations individuelles en appelant la méthode addHeader() ou addSimpleHeader() d’un objet WebService ou Operation dans une fonction d’écouteur d’événement. Avant d’utiliser la méthode addHeader(), vous devez créer séparément les objets SOAPHeader et QName. La méthode addHeader() présente la signature suivante : addHeader(header:mx.rpc.soap.SOAPHeader):void
SOAPHeader(qname:QName, content:Object)
QName(uri:String, localName:String) Dernière mise à jour le 16/11/2012
Codage des données ActionScript Le tableau suivant présente les mappages de codage des types ActionScript 3.0 en types complexes de schéma XML.
Si la valeur d’entrée est null, elle est remplacée par cette valeur par défaut.
QName avec une classe ActionScript correspondante. Vous disposez par exemple de la définition de classe suivante dans un fichier nommé User.as : package { public class User { public function User() {} public var firstName:String; public var lastName:String; } QName donné avec la même classe ActionScript à travers toutes les opérations de service Web de l’application. Pour enregistrer différentes classes pour différentes opérations, faites figurer le code suivant dans une méthode de l’application : 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;
Deux méthodes permettent de prendre le contrôle intégral de la manière dont les objets ActionScript sont sérialisés dans XML et dont les messages de réponse XML sont désérialisés. La méthode recommandée est l’utilisation directe d’E4X. Si vous transmettez une instance de XML comme seul paramètre à une opération de service Web, elle est transmise intacte en tant qu’enfant du nœud <SOAP:Body> dans la demande sérialisée. Utilisez cette stratégie pour contrôler intégralement le message SOAP. De même, lorsque vous désérialisez une réponse de service Web, vous pouvez définir la propriété resultFormat de l’opération sur e4x. Cela renvoie un message de réponse contenant l’objet XMLList avec les enfants du nœud <SOAP:Body>. Vous pouvez ensuite implémenter la logique personnalisée requise pour créer les objets ActionScript appropriés. Plus fastidieuse, la seconde méthode consiste à fournir vos propres implémentations de mx.rpc.soap.ISOAPDecoder et mx.rpc.soap.ISOAPEncoder. Si vous avez par exemple écrit une classe nommée MyDecoder implémentant ISOAPDecoder, le code suivant pourra figurer dans une méthode de l’application : myWS.someOperation.decoder = new MyDecoder();
ActionScript attendus.
Vous pouvez utiliser un composant Flex RemoteObject pour appeler des méthodes sur un composant ColdFusion ou une classe Java.
Flash Builder pour PHP est un outil de développement créé en partenariat avec Zend Technologies qui inclue une copie intégrée de Zend Studio. Pour plus d’informations, voir le site Web d’Adobe. De même que les composants HTTPService et WebService, les composants RemoteObject peuvent être utilisés pour afficher le résultat d’une requête de base de données dans une application. Vous pouvez également utiliser les composants pour insérer, mettre à jour et supprimer les données d’une base de données. Une fois le résultat de la requête renvoyé à l’application, vous pouvez l’afficher dans un ou plusieurs contrôles de l’interface utilisateur. Pour obtenir des informations de référence API sur le composant RemoteObject, voir mx.rpc.remoting.mxml.RemoteObject.
Code MXML Dans l’exemple suivant, l’application utilise un composant RemoteObject pour appeler un composant ColdFusion. Le composant ColdFusion interroge une table de base de données MySQL appelée users. Il renvoie le résultat de l’interrogation à l’application, dans laquelle ce résultat est lié à la propriété dataProvider d’un contrôle DataGrid et affiché dans ce contrôle DataGrid. L’application envoie également le nom d’utilisateur et l’adresse électronique des nouveaux utilisateurs au composant ColdFusion, qui les ajoute à la table de la base de données des utilisateurs. <?xml version="1.0" encoding="utf-8"?> L’application appelle le composant ColdFusion suivant. Ce code ColdFusion effectue des insertions et des interrogations de base de données SQL, puis renvoie les résultats de l’interrogation à l’application. La page ColdFusion utilise la balise cfquery pour insérer des données dans la base de données et pour l’interroger. Elle fait appel à la balise cfreturn pour formater les résultats de l’interrogation en tant qu’objet d’interrogation ColdFusion.
Dernière mise à jour le 16/11/2012
LiveCycle Data Services, BlazeDS ou ColdFusion ou dans un fichier que le nom de classe complet inclut par référence (remoting-config.xml, par exemple). La classe doit également comporter un constructeur no-args. Pour ColdFusion, vous pouvez si vous le souhaitez définir la propriété destination du composant RemoteObject sur Coldfusion et la propriété source sur le nom complet d’un composant ColdFusion ou d’une classe Java. Lorsque vous configurez une destination de service distant pour accéder à des objets sans état (étendue de la demande), Flex crée un objet différent pour chaque appel de méthode au lieu d’appeler les méthodes sur le même objet. Vous pouvez définir l’étendue d’un objet sur l’étendue de la demande (valeur par défaut), de l’application ou de la session. Les objets dans l’étendue de l’application sont accessibles à l’application Web qui contient l’objet. Les objets dans l’étendue de la session sont accessibles à toute la session client.
Accès à des objets EJB et autres objets dans JNDI Vous pouvez accéder à des objets EJB (Enterprise JavaBean) et autres objets stockés dans JNDI (Java Naming and Directory Interface) en appelant des méthodes sur une destination constituant une classe de façade de service qui recherche un objet dans JNDI et appelle sa méthode. Vous pouvez utiliser des objets avec ou sans état pour appeler les méthodes d’objets Enterprise JavaBean et d’autres objets utilisant JNDI. Pour un objet EJB, vous pouvez appeler une classe de façade de service qui renvoie l’objet EJB de JNDI et appelle une méthode sur l’objet EJB. Dans la classe Java, vous pouvez utiliser le schéma de codage Java standard, dans lequel vous créez un contexte initial et effectuez une recherche JNDI. Pour un objet EJB, utilisez également le schéma de codage standard dans lequel la classe contient des méthodes qui appellent la méthode create() de l’objet racine EJB et les méthodes métier de l’objet EJB résultant. L’exemple suivant utilise une méthode appelée getHelloData() sur une destination de classe de façade : <mx:RemoteObject id="Hello" destination="roDest"> <mx:method name="getHelloData"/> Sérialisation entre ActionScript et Java LiveCycle Data Services et BlazeDS sérialisent les données entre les types de données ActionScript (AMF 3), Java et ColdFusion dans les deux directions. Pour plus d’informations sur les types de données ColdFusion, voir la documentation ColdFusion. Conversion des données d’ActionScript en Java Le type des données envoyées d’une application à un objet Java par des paramètres de méthodes est automatiquement converti d’ActionScript en Java. Lorsque LiveCycle Data Services ou Blaze DS recherche une méthode appropriée sur l’objet Java, il utilise d’autres conversions, moins systématiques, pour trouver une correspondance. Les types de données de base du client (les valeurs Boolean et String, par exemple) correspondent en général exactement à une API distante. Flex tente toutefois d’effectuer certaines conversions simples lorsqu’il recherche une méthode appropriée sur un objet Java. Un tableau ActionScript peut indexer des entrées de deux manières. 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 chaîne. Il est important de savoir quel type de tableau vous envoyez au serveur, car ce type change le type de données des paramètres utilisés pour invoquer une méthode sur un objet Java. Un tableau dense est un tableau dans lequel tous les index numériques sont consécutifs, sans écart, commençant à 0 (zéro). Un tableau très dense est un tableau dans lequel il existe des écarts entre les index numériques ; le tableau est traité comme un objet et les index numériques deviennent des propriétés désérialisées dans un objet java.util.Map pour éviter l’envoi de nombreuses entrées nulles. Le tableau suivant répertorie les conversions ActionScript (AMF 3) vers Java prises en charge pour les types de données simples.
Dernière mise à jour le 16/11/2012
Les valeurs primitives ne peuvent pas être définies sur null dans Java. Lors de la transmission de valeurs Boolean et Number du client vers un objet Java, Flex interprète les valeurs null comme valeurs par défaut 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 défaut. LiveCycle Data Services et BlazeDS traitent les objets java.lang.Throwable comme tout autre objet typé. Ces objets sont traités avec des règles recherchant des champs publics et des propriétés bean. Des objets typés sont renvoyés au client. Ces règles sont identiques aux règles bean ordinaires, à ceci près qu’elles recherchent des getters pour les propriétés en lecture seule. La quantité d’informations obtenues d’une exception Java est ainsi plus importante. Afin de spécifier un comportement existant pour les objets Throwable, définissez la propriété legacy-throwable d’un canal sur true. Pour plus d’informations, voir Configuration de la sérialisation AMF sur un canal. Vous pouvez transmettre des tableaux stricts en tant que paramètres à des méthodes s’attendant à une implémentation des API java.util.Collection ou de tableau Java natif. Une collection Java peut contenir n’importe quel nombre de types d’objets, alors qu’un tableau Java nécessite que les entrées soient du même type (java.lang.Object[ ] et int[ ], par exemple). LiveCycle Data Services et BlazeDS convertissent aussi les tableaux stricts ActionScript en implémentations appropriées pour les interfaces API Collection courantes. Par exemple, si un tableau strict ActionScript est envoyé à la méthode d’objet Java public void addProducts(java.util.Set products), LiveCycle Data Services et BlazeDS le convertissent en une instance java.util.HashSet avant de le transmettre en tant que paramètre, car HashSet est une implémentation appropriée pour l’interface java.util.Set. De même, LiveCycle Data Services et BlazeDS transmettent une instance de java.util.TreeSet aux paramètres typés avec l’interface java.util.SortedSet. LiveCycle Data Services et BlazeDS transmettent une instance de java.util.ArrayList aux paramètres typés avec l’interface java.util.List et toute autre interface qui étend java.util.Collection. Ces types sont ensuite renvoyés au client en tant qu’instances mx.collections.ArrayCollection. Pour renvoyer au client les tableaux ActionScript normaux, vous devez définir l’élément legacy-collection sur true dans la section serialization des propriétés d’une définition de canal. Pour plus d’informations, voir Configuration de la sérialisation AMF sur un canal. Mappage explicite d’objets ActionScript et Java Pour les objets Java que LiveCycle Data Services et BlazeDS ne traitent pas implicitement, les valeurs trouvées dans les propriétés bean publiques avec les méthodes get/set et les variables publiques sont envoyées au client en tant que propriétés sur un objet. Les propriétés privées, les constantes, les propriétés statiques et les propriétés en lecture seule entre autres ne sont pas sérialisées. Pour les objets ActionScript, les propriétés publiques définies avec les accesseurs get/set et les variables publiques sont envoyées au serveur.
ActionScript sont introspectées sur le client. Dans la classe ActionScript, utilisez la balise de métadonnées [RemoteClass(alias=" ")] pour créer un objet ActionScript se mappant directement sur l’objet Java. La classe ActionScript vers laquelle les données sont converties doit être utilisée ou référencée dans le fichier MXML afin d’être liée dans le fichier SWF et disponible lors de l’exécution. Pour ce faire, une manière efficace consiste à projeter l’objet de résultat, comme l’illustre l’exemple suivant : var result:MyClass = MyClass(event.result);
Les exemples suivants présentent le code source d’une classe ActionScript utilisant la balise de métadonnées [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; Map spécial lorsqu’il est envoyé au serveur. L’objet renvoyé du serveur aux clients est toutefois le type ActionScript d’origine. Pour empêcher l’envoi d’une propriété au serveur à partir d’une classe ActionScript, utilisez la balise de métadonnées [Transient] située au-dessus de la déclaration de cette propriété dans la classe ActionScript.
Un objet renvoyé par une méthode Java est converti de Java en ActionScript. LiveCycle Data Services et BlazeDS traitent également les objets figurant dans des objets. LiveCycle Data Services traite implicitement les types de données Java répertoriés dans le tableau suivant.
Vous pouvez prendre en charge la sérialisation du type AMF existant utilisé dans les versions précédentes de Flex et configurer d’autres propriétés de sérialisation dans les définitions de canaux du fichier services-config.xml.
SortedMap. Notez que l’attribution de la valeur true à cette propriété peut conduire à un ralentissement considérable des performances en présence de larges volumes de données.
Si les mécanismes standard de sérialisation et de désérialisation de données entre ActionScript sur le client et Java sur le serveur ne répondent pas à vos besoins, vous pouvez écrire votre propre schéma de sérialisation. Vous implémentez l’interface flash.utils.IExternalizable ActionScript sur le client et l’interface java.io.Externalizable Java correspondante sur le serveur. La sérialisation est souvent utilisée pour éviter de transmettre l’ensemble des propriétés de la représentation côté client ou côté serveur d’un objet à travers le niveau réseau. Lorsque vous implémentez la sérialisation personnalisée, vous pouvez coder vos classes afin que les propriétés spécifiques uniquement client ou uniquement serveur ne soient pas transmises via le réseau. Lorsque vous utilisez le schéma de sérialisation standard, toutes les propriétés publiques font l’aller-retour entre le client et le serveur. Côté client, l’identité d’une classe qui implémente l’interface flash.utils.IExternalizable est écrite dans le flux de sérialisation. La classe sérialise et reconstruit l’état de ses instances. La classe implémente les méthodes writeExternal() et readExternal() de l’interface IExternalizable pour contrôler le contenu et le format du flux de sérialisation, mais pas le nom ou le type de classe, pour un objet et ses supertypes. Ces méthodes remplacent le comportement de sérialisation AMF natif. Elles doivent être symétriques à leur homologue distant pour enregistrer l’état de la classe. Côté serveur, une classe Java qui implémente l’interface java.io.Externalizable exécute des fonctionnalités analogues à une classe ActionScript implémentant l’interface flash.utils.IExternalizable.
L’exemple suivant présente le code source complet de la version (ActionScript) client d’une classe Product se mappant sur une classe Product Java sur le serveur. La classe Product client implémente l’interface IExternalizable et la classe Product serveur l’interface 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; L’exemple de sérialisation AMF 3 dans la méthode writeExternal() de la classe Product client est l’appel à la méthode flash.utils.IDataOutput.writeObject(), qui se mappe à l’appel de la méthode java.io.ObjectInput.readObject() dans la méthode readExternal() de la classe Product serveur. La méthode flash.utils.IDataOutput.writeObject() envoie à la classe Product serveur la propriété properties, qui constitue un objet, et la propriété name, qui constitue une chaîne. Cette opération est possible car le point de terminaison AMFChannel comporte une implémentation de l’interface java.io.ObjectInput qui s’attend à ce que les données envoyées par la méthode writeObject() soient au format AMF 3. Ensuite, lorsque la méthode readObject() est appelée dans la méthode readExternal() de la classe Product serveur, elle utilise la désérialisation AMF 3 ; c’est la raison pour laquelle la version ActionScript de la valeur properties est supposée être de type Map et la valeur name de type String. L’exemple suivant présente la source complète de la classe Product serveur : // Product.java package samples.externalizable; import import import import import
Notez que pendant la sérialisation, les noms des propriétés d’une classe Product ne sont envoyés ni dans un sens, ni dans l’autre. L’état de la classe étant fixe et gérable, les propriétés sont envoyées dans un ordre bien défini sans leur nom. La méthode readExternal() les lit dans l’ordre approprié.
L’appel des composants HTTPService, WebService et RemoteObject peut se faire de deux manières différentes : par la transmission de paramètres explicites et par la liaison de paramètres. La transmission de paramètres explicites consiste à fournir des informations à un service sous la forme de paramètres pour une fonction ActionScript. Cette manière d’appeler un service ressemble fortement à l’appel de méthodes sous Java. Les validateurs de données Flex ne peuvent pas être automatiquement utilisés avec la transmission de paramètres explicites. La liaison de paramètres vous permet de copier des données de contrôles de l’interface utilisateur ou de modèles pour demander des paramètres. Elle n’est disponible que pour les composants d’accès aux données que vous déclarez dans MXML. Vous pouvez appliquer des validateurs aux valeurs des paramètres avant de soumettre des demandes aux services. Pour plus d’informations sur la liaison de données et les modèles de données, voir Data binding et Storing data. Pour plus d’informations sur la validation de données, voir Validating Data. La liaison de paramètres consiste à déclarer des balises de paramètres de la méthode RemoteObject imbriquées dans une balise <mx:arguments> sous une balise <mx:method>, des balises de paramètres HTTPService imbriquées dans une balise <mx:request> ou des balises de paramètres d’opération WebService imbriquées dans une balise <mx:request> sous une balise <mx:operation>. La méthode send() permet d’envoyer la demande.
WebService La transmission de paramètres explicites utilisée avec les composants RemoteObject est similaire à celle utilisée avec les composants WebService. L’exemple suivant illustre le code MXML utilisé pour déclarer un composant RemoteObject et appeler un service en utilisant la transmission de paramètres explicites dans l’écouteur d’événement click d’un contrôle Button. Un contrôle ComboBox fournit les données au service. Des écouteurs d’événement simple traitent les événements result et fault de niveau service.
WebService, sur lesquels vous appelez des méthodes qui sont des versions côté client des méthodes ou opérations du service RPC. La transmission de paramètres explicites vous permet de spécifier un objet contenant des paires nom-valeur comme paramètre de la méthode send(). Le paramètre de la méthode send() doit être un type de base simple ; vous ne pouvez pas utiliser d’objets imbriqués complexes car il n’existe aucune méthode générique permettant de les convertir en paires nom-valeur. si vous ne spécifiez pas de paramètre de la méthode send(), le composant HTTPService utilise les paramètres d’interrogation spécifiés dans la balise <mx:request>. Les exemples suivants illustrent deux manières d’appeler un service HTTP en utilisant la méthode send() avec un paramètre. Le second exemple indique également comment appeler la méthode cancel() pour annuler un appel de service HTTP.
Une balise <mx:method> peut contenir une balise <mx:arguments> contenant des balises enfant pour les paramètres de la méthode. La propriété name d’une balise <mx:method> doit correspondre au nom d’une méthode du service. L’ordre des balises d’argument doit correspondre à celui des paramètres de méthode du service. Vous pouvez nommer les balises d’argument de manière telle à ce que leurs noms correspondent le plus possible aux noms réels des paramètres de méthode correspondants, mais cela n’est pas nécessaire. Remarque : si les balises d’argument dans une balise <mx:arguments> portent le même nom, les appels de service échouent si la méthode distante n’attend pas un tableau comme unique source d’entrée. Aucun avertissement à ce sujet n’est affiché lorsque l’application est compilée. Vous pouvez lier des données aux paramètres de méthode d’un composant RemoteObject. Vous référencez les noms de balise des paramètres en vue de la liaison et de la validation de données. L’exemple suivant illustre une méthode comportant deux paramètres liés à la propriété text des contrôles TextInput. Un validateur PhoneNumberValidator est assigné à arg1, qui est le nom de la première balise d’argument.
Lorsqu’un service HTTP accepte des paramètres d’interrogation, vous pouvez les déclarer comme balises enfant d’une balise <mx:request>. Les noms des balises doivent correspondre aux noms des paramètres d’interrogation auxquels s’attend le service. L’exemple suivant illustre la liaison de paramètres dans la balise <mx:request> d’un composant HTTPService pour lier les données d’un élément ComboBox sélectionné à la demande employeeSrv lorsque l’utilisateur clique sur un contrôle Button. La liaison de paramètres correspond à un appel de service par l’utilisation de la méthode send() sans paramètres. Cet exemple présente une propriété url sur le composant HTTPService. La manière dont vous appelez un service est toutefois la même, que vous vous connectiez au service directement ou passiez par une destination.
Lorsque vous utilisez la liaison de paramètres avec un composant WebService, vous déclarez toujours les opérations dans les balises <mx:operation> du composant WebService. Une balise <mx:operation> peut contenir une balise <mx:request> comportant les nœuds XML auxquels s’attend l’opération. La propriété name d’une balise <mx:operation> doit correspondre à l’un des noms de l’opération WebService. Vous pouvez lier des données aux paramètres des opérations WebService. Vous référencez les noms de balise des paramètres en vue de la liaison et de la validation de données. L’exemple suivant illustre comment la liaison de paramètres est utilisée dans la balise <mx:operation> d’un composant WebService pour lier les données d’un élément ComboBox sélectionné à l’opération employeeWS.getList lorsque l’utilisateur clique sur un contrôle Button. La balise <deptId> correspond directement au paramètre deptId de l’opération getList. La liaison de paramètres correspond à un appel de service par l’utilisation de la méthode send() sans paramètre. Cet exemple présente une propriété destination sur le composant WebService. La manière dont vous appelez un service est toutefois la même, que vous vous connectiez au service directement ou passiez par une destination. <?xml version="1.0"?> <!-- fds\rpc\WebServiceParamBind.mxml --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" verticalGap="10"> Après que le composant RPC a appelé un service, les données renvoyées par le service sont placées dans un objet lastResult. Par défaut, la valeur de la propriété resultFormat des composants HTTPService et des opérations du composant WebService est object et les données renvoyées sont représentées par une arborescence simple d’objets ActionScript. Flex interprète les données XML renvoyées par un service Web ou HTTP pour représenter de manière appropriée les types de base, tels que String, Number, Boolean et Date. Pour utiliser des objets fortement typés, remplissez ces objets en utilisant l’arborescence d’objets créée par Flex. Les composants WebService et HTTPService renvoient chacun des objets et des tableaux anonymes constituant des types complexes. Si makeObjectsBindable a la valeur (par défaut) true, les objets sont enveloppés dans des instances mx.utils.ObjectProxy et les tableaux dans des instances mx.collections.ArrayCollection. Remarque : ColdFusion n’est pas sensible à la casse et applique en interne la mise en majuscule à toutes ses données. Gardez à l’esprit cette caractéristique lorsque vous utilisez un service Web ColdFusion.
Lorsqu’un appel de service est terminé, la méthode RemoteObject, l’opération WebService ou le composant HTTPService distribue un événement result ou un événement fault. Un événement result indique que le résultat est disponible. Un événement fault indique qu’une erreur s’est produite. L’événement result fait office de déclencheur de la mise à jour des propriétés liées à lastResult. Vous pouvez traiter les événements fault et result explicitement en ajoutant des écouteurs d’événement aux méthodes RemoteObject ou aux opérations WebService. Pour un composant HTTPService, vous pouvez spécifier les écouteurs d’événement result et fault sur le composant lui-même. Le composant HTTPService ne dispose en effet pas de plusieurs méthodes ou opérations. Lorsque vous ne spécifiez pas d’écouteurs pour les événements result ou fault sur une méthode RemoteObject ou une opération WebService, les événements sont transmis au niveau du composant. Vous pouvez spécifier des écouteurs pour les événements result et fault à niveau de composant. Dans l’exemple MXML suivant, les événements result et fault d’une opération WebService spécifient les écouteurs d’événement ; l’événement fault du composant WebService spécifie également un écouteur d’événement : <?xml version="1.0"?> <!-- fds\rpc\RPCResultFaultMXML.mxml --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> E4X Vous pouvez définir la propriété resultFormat des composants HTTPService et des opérations WebService sur la valeur e4x pour créer une propriété lastResult de type XML. Vous pouvez accéder à la propriété lastResult en utilisant ECMAScript pour les expressions XML (E4X). Vous n’incluez pas le nœud racine de la structure XML dans la notation par point lorsque vous utilisez un objet XML E4X dans une expression de liaison. Cela diffère de la syntaxe d’une propriété lastResult définie sur object pour lequel vous devez inclure le nœud racine de la structure XML dans la notation par point. Par exemple, lorsque la propriété lastResult est définie sur e4x, vous utilisez {srv.lastResult.product} ; lorsque la propriété lastResult est définie sur object, vous utilisez {srv.lastResult.products.product}. L’utilisation du format de résultat e4x est à privilégier pour travailler directement dans XML. Vous pouvez toutefois également définir la propriété resultFormat sur xml pour créer un objet lastResult de type flash.xml.XMLNode, qui est l’objet existant pour utiliser XML. De plus, vous pouvez définir la propriété resultFormat des composants HTTPService sur flashvars ou text pour créer des résultats en tant qu’objets ActionScript contenant des paires nom-valeur ou en tant que texte brut, respectivement. Remarque : pour appliquer la syntaxe E4X aux résultats de service, vous devez définir la propriété resultFormat du composant HTTPService ou WebService sur e4x. La valeur par défaut est object. Lorsque vous définissez la propriété resultFormat d’un composant HTTPService ou d’une opération WebService sur e4x, vous devrez éventuellement traiter les informations d’espace de noms contenues dans le code XML renvoyé. Pour un composant WebService, les informations d’espace de noms sont contenues dans le corps de l’enveloppe SOAP renvoyée par le service Web. L’exemple suivant présente une partie d’un corps SOAP contenant des informations d’espace de noms. Ces données ont été renvoyées par un service Web qui obtient des cotes de titres. Les informations d’espace de noms sont en gras.
L’exemple suivant indique comment obtenir une valeur d’élément ou d’attribut lorsqu’aucun espace de noms n’est spécifié sur l’élément ou l’attribut : var attributes:XMLList = XML(event.result).Description.value;
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> Dernière mise à jour le 16/11/2012