Dev Mag 201112

Embed Size (px)

Citation preview

DeveloppezSommaireEclipse Android Java MS Office Business Intelligence Qt C/C++/Gtk+ Visual Basic Dveloppement Web Liens Page 2 Page 10 Page 13 Page 18 Page 28 Page 34 Page 45 Page 52 Page 59 Page 71

Le Mag

dition de dcembre - janvier 2011/2012. Numro 37. Magazine en ligne gratuit. Diffusion de copies conformes loriginal autorise. Ralisation : Alexandre P ottiez Rdaction : la rdaction de Developpez Contact : [email protected]

Article MS Office

Comment positionner un formulaire un endroit dterminCe texte s'adresse des utilisateurs Access dbutants qui veulent s'initier la programmation.par Claude Leloup Page 18

Article DotNet ditorialPour bien dmarrer cette nouvelle anne, le magazine refait le plein de nos meilleurs articles, critiques de livres, questions/rponses, news. Ils sont dcouvrir ou redcouvrir. Profitez-en bien ! La rdaction

Le dbogage sous Visual Basic 6 & Visual Basic pour Application (1re partie)Tout ce que vous devez savoir sur le dbogage et la gestion des erreurs sous Visual Basic 6.par DarkVader Page 52

EclipseLes derniers tutoriels et articlesIntroduction Tycho : construction automatique d'un product Eclipse Ce tutoriel est une introduction Tycho, un plugin pour Maven permettant de construire des bundles OSGi et des plugins Eclipse. Nous montrons par l'exemple comment construire automatiquement des excutables Eclipse (appels product ) par l'intermdiaire de Tycho.1. Introduction Historiquement la construction automatique de bundles OSGi ou de plugins Eclipse passait par l'utilisation d'un ensemble de tches ANT fournies par la plateforme Eclipse. Malheureusement la manipulation de ces tches ANT n'tait pas simple et l'utilisation dans un outil d'intgration continue (Jenkins, Cruise Control par exemple) tait rendue difficile. ct de cela, Maven l'outil de construction de binaires a dmontr qu'il tait ais de compiler, de jouer des tests et de grer les dpendances dans l'univers Java. Toutefois l'utilisation de Maven dans la plateforme Eclipse tait impossible du fait qu'Eclipse se base sur une architecture OSGi. Avec l'arrive de Tycho, qui est un plugin Maven, il est dsormais possible d'utiliser toute la puissance de Maven pour construire des bundles OSGi et des plugins Eclipse. 2.1. Eclipse RCP / Plugin L'environnement de dveloppement Eclipse est naturellement utilis puisqu'il intgre la plateforme de dveloppement de plugins. Par ailleurs, nous utiliserons la version Indigo qui est la version courante au moment de l'criture de ce tutoriel. Le tlchargement de l'environnement de dveloppement est obtenu sur le site de la fondation Eclipse : Lien 02. Pour l'installation, dcompresser l'archive dans le rpertoire o vous installez gnralement vos applications (par exemple : c:\program files). 2.2. Maven 3 Introduction Tycho : construction automatique d'un product Eclipse

Maven est un outil de construction de binaires pour la plateforme de dveloppement Java. Il se distingue des Dans ce tutoriel, je vous propose l'utilisation du plugin autres outils dans le sens o il utilise une approche Tycho dans le cas de la construction d'excutables Eclipse dclarative. En effet, le contenu et la structure d'un projet RCP galement appels product. Nous montrons par Java sont dcrits. l'exemple toutes les tapes ncessaires en insistant sur la structuration du projet en diffrents plugins et comment Pour utiliser Tycho, vous devez obligatoirement installer la gnrer des binaires selon une version spcifique de la version de Maven 3 disponible en tlchargement sur le plateforme Eclipse. site de la fondatation Apache : Lien 03. Ce tutoriel suppose que vous disposiez des connaissances Pour l'installation, suivre les tapes lmentaires de base sur les technologies suivantes : suivantes : dcompresser l'archive dans le rpertoire o vous dveloppement de plugins avec la plateforme installez gnralement vos applications (par Eclipse (SWT/JFace, Eclipse RCP...), voir la page exemple : c:\program files) ; des tutoriels Eclipse de Developpez.com pour une crer une variable d'environnement M2_HOME mise niveau : Lien 01 ; qui pointe sur le rpertoire de Maven (par construction de binaires avec Maven. exemple : c:\program files\maven3) ; ajouter le rpertoire binaire de Maven la 2. Installation des outils variable d'environnement PATH. Cette section prsente tous les outils utiliss dans le cadre de ce tutoriel. Nous signalons volontairement pour chaque 2.3. Tycho outil, la version utilise lors de la ralisation de ce tutoriel. Tycho est un plugin pour Maven pour construire des Eclipse RCP / Plugin : l'environnement de binaires de bundles OSGi et de plugins Eclipse. Comme dveloppement Java pour dvelopper des plugins indiqu prcdemment il ne peut fonctionner qu' partir de (version 3.7.0). la version 3 de Maven. Maven 3 : l'outil de construction automatique de binaires. Pour l'installation, il suffit de complter le fichier pom.xml Tycho : le plugin pour Maven pour construire des au niveau de la balise . Nous tudierons ce point binaires de bundles OSGi et de plugins Eclipse. plus prcisment dans la suite au niveau de la section 3. M2Eclipse: l'intgration de Maven pour Eclipse. Nous dtaillons pour chacun de ces outils la procdure d'installation et de configuration. ...

Developpez Magazine est une publication de developpez.com

Numro 37 Dcembre - Janvier 2011/2012 Page 2

org.sonatype.tycho tycho-maven-plugin ${tycho-version} true

demand de redmarrer Eclipse, ne pas accepter le redmarrage et quitter Eclipse. Avant de relancer Eclipse, modifier le fichier eclipse.ini situ la racine de votre rpertoire d'installation d'Eclipse afin de prciser le rpertoire de votre JDK. Le plugin M2Eclipse utilise ce chemin pour excuter ses commandes.

2.4. M2Eclipse M2Eclipse est une intgration de Maven pour l'environnement de dveloppement Eclipse. Son utilisation permet d'employer des commandes Maven directement dans Eclipse et permet galement de rendre la manipulation du fichier pom.xml plus aise puisqu'une interface graphique sous forme de formulaire remplace la reprsentation XML assez verbeuse. Pour l'installation, nous utiliserons l'outil Marketplace de l'diteur Eclipse. Voici les tapes. Ouvrir l'outil Marketplace via le menu Help -> Eclipse Marketplace... Depuis la zone de texte Find, saisir la valeur M2Eclipse, puis cliquer sur "rechercher". Vous devriez obtenir le rsultat prsent sur la capture d'cran ci-dessous :

-vm C:/Program Files (x86)/Java/jdk1.6.0_18/bin/javaw.exe

Redmarrer Eclipse, ouvrir le menu des prfrences (Window -> Preferences) et slectionner les options lies Maven. Depuis les options Maven, afficher les lments lis User Settings et prciser dans la zone User Settings votre fichier settings.xml (li au rpertoire d'installation de Maven 3) et cliquer sur Update Settings.

3. Construction des plugins Dans la suite, nous prsentons l'utilisation de Tycho au travers d'une application RCP contenant une vue affichant un arbre. L'objectif final est de gnrer automatiquement une archive contenant notre product Eclipse. Nous insistons dans un premier temps sur la dcomposition de l'application en plusieurs projets, chacun contenant un fichier de description pom.xml. Cette Cliquer sur Install depuis le plugin Maven dcomposition est prsente ci-dessous : Integration for Eclipse. Aprs un certain temps de recherche, vous keulkeul.tychorcpdemo.aggregator : regroupe devriez obtenir le rsultat suivant, cliquer sur tous les autres projets ; Next. keulkeul.tychorcpdemo.rcp : contient le plugin RCP ; keulkeul.tychorcpdemo.parent : le projet Parent au niveau Maven ; keulkeul.tychorcpdemo.feature : dcrit un projet feature ; keulkeul.tychorcpdemo.repository : contient la description d'un product et l'update site. Dans un second temps, nous dtaillons le contenu de chaque fichier de description pom.xml afin d'indiquer les paramtrages pour Tycho. Accepter la licence d'autorisation, puis cliquer sur Finish. Le plugin va tre install et il vous sera

Developpez Magazine est une publication de developpez.com

Numro 37 Dcembre - Janvier 2011/2012 Page 3

3.1. Cration d'un projet Agrgateur (keulkeul.tychorcpdemo.aggregator) Ce projet Agrgateur aura comme seul but de contenir tous les sous-projets (plugins, feature, tests, repository p2...). Du point de vue Maven il s'agira de dcrire dans le fichier pom.xml tous les sous-modules . Veuillez suivre la dmarche ci-dessous. Ouvrir l'assistant de cration de projet File -> New -> Other... Choisir l'lment Maven Project de la catgorie Maven, l'cran ci-dessous doit apparatre :

Choisir l'lment Plug-in Project depuis la catgorie Plug-in Development, puis cliquer sur Next. L'cran ci-dessous doit apparatre :

Cocher l'option Create a simple project (skip archetype selection), puis cliquer sur Next.

Dans le champ Project Name saisir la valeur keulkeul.tychorcpdemo.rcp. Dcocher l'option Use default location. Crer un rpertoire keulkeul.tychorcpdemo.rcp la racine du rpertoire du projet agrgateur cr prcdemment, puis cliquer sur Next. L'cran suivant doit apparatre :

Dans le champ de texte Group Id saisir la valeur tychorcpdemo. Dans le champ de texte Artifact Id saisir la valeur keulkeul.tychorcpdemo.aggregator. Au niveau de la slection Packaging slectionner la valeur pom puis cliquer sur Finish.

Cocher la case Would you like to create a rich client application ? puis cliquer sur Next. L'cran suivant doit apparatre :

Un nouveau projet Maven sera cr contenant un fichier pom.xml. Nous modifierons ce fichier chaque fois que nous ajouterons un nouveau module. 3.2. Cration du plugin RCP (keulkeul.tychorcpdemo.rcp) Ce plugin est particulier dans le sens o il s'agit d'un RCP (Rich Client Application) ce qui signifie qu'il peut tre utilis seul. Comme l'ide n'est pas d'apprendre crer un plugin RCP nous utiliserons un exemple patron. Ouvrir l'assistant de cration de projet File -> New -> Other...Numro 37 Dcembre - Janvier 2011/2012 Page 4

Developpez Magazine est une publication de developpez.com

Choisir comme patron RCP application with a view puis cliquer sur Next. L'cran suivant doit apparatre :

Choisir depuis Launch with la valeur plug-ins selected below only. Dcocher tous les plugins prsents depuis le nud racine Target Platform. Slectionner uniquement le plugin keulkeul.tychorcpdemo.rcp depuis le nud racine Workspace. Cliquer sur Add Required Plug-ins pour ajouter uniquement les plugins requis l'excution de ce plugin RCP. Cliquer sur Run. Vous devriez obtenir l'cran suivant :

Dans le champ Application window title saisir la valeur Keulkeul Tycho RCP Demo Application. Slectionner l'option Add branding ce qui permettra d'tre identifi comme un product lors de la cration de la configuration d'excution, puis cliquer sur Finish.

Un nouveau projet keulkeul.tychorcpdemo.rcp vient d'tre cr. Pour s'assurer que ce plugin RCP fonctionne nous allons crer une configuration d'excution. Ouvrir l'cran de cration des configurations. Depuis le menu principal Run -> Run Configurations ... L'cran suivant doit apparatre :

Ajouter un nouveau fichier Maven pom.xml la racine de ce projet (keulkeul.tychorcpdemo.rcp) dont le contenu est le suivant :

4.0.0 tychorcpdemo keulkeul.tychorcpdemo.parent 1.0.0-SNAPSHOT ../keulkeul.tychorcpdemo.parent/po m.xml tychorcpdemo keulkeul.tychorcpdemo.rcp 1.0.0-SNAPSHOT eclipse-plugin

Crer une nouvelle configuration de type Eclipse Application dont le nom sera TychoRCPDemo. Choisir depuis Run a product la valeur keulkeul.tychorcpdemo.rcp.product (uniquement disponible si vous aviez coch l'option Add branding. Slectionner l'onglet Plug-ins et vous devriez obtenir l'cran suivant :

Comme vous pouvez le constater, ce fichier pom.xml fait rfrence un pom.xml parent que nous dfinirons plus tard. Intressons-nous d'abord l'ajout d'un projet keulkeul.tychorcpdemo.rcp comme module au projet keulkeul.tychorcpdemo.aggregator. Par consquent modifier le fichier pom.xml du projet keulkeul.tychorcpdemo.aggregator de cette manire :

4.0.0 tychorcpdemo keulkeul.tychorcpdemo.aggregator 1.0.0-SNAPSHOT pom keulkeul.tychorcpdemo.parent keulkeul.tychorcpdemo.rcp

Developpez Magazine est une publication de developpez.com

Numro 37 Dcembre - Janvier 2011/2012 Page 5

De mme nous profitons de cette modification pour ajouter un autre module keulkeul.tychorcpdemo.parent.

keulkeul.tychorcpdemo.aggregator \pom.xml keulkeul.tychorcpdemo.parent \pom.xml keulkeul.tychorcpdemo.rcp \src \pom.xml

3.3. Cration d'un projet parent (keulkeul.tychorcpdemo.parent) Le projet parent a pour objectif de contenir toutes les configurations propres Tycho dont tous les plugins auront besoin. Il contiendra galement les liens vers les entrepts p2.

3.4. Dmarrer une construction du projet via Maven

Nous allons volontairement construire le projet en utilisant l'invite de commandes de Windows au lieu d'utiliser le plugin M2Eclipse. En effet, Tycho est surtout utilis pour construire le projet final via un outil d'intgration continue. C'est une faon de s'assurer que cette construction La dmarche de cration de ce projet est identique celle fonctionne en dehors de l'environnement Eclipse. utilise pour crer le projet keulkeul.tychorcpdemo.aggregator la diffrence que ce Ouvrir l'invite de commandes de Windows et se placer la projet doit tre plac la racine du projet agrgateur. Pour racine du rpertoire parent. Saisir la ligne de commande les valeurs donner dans le nouveau fichier pom.xml, ci-dessous : suivre les indications donnes ci-dessous. mvn clean install Dans le champ de texte Group Id saisir la valeur tychorcpdemo. Dans le champ de texte Artifact Id saisir la valeur Normalement si tout se passe bien vous devriez obtenir le message suivant : keulkeul.tychorcpdemo.parent. Au niveau de la slection Packaging slectionnez la valeur pom puis cliquer sur Finish. Complter le fichier pom.xml gnr par les informations lies la configuration de Tycho 4.0.0 tychorcpdemo keulkeul.tychorcpdemo.parent 1.0.0-SNAPSHOT pom 0.11.0 helios p2 http://download.eclipse.org/releases/heli os/ org.sonatype.tycho tycho-maven-plugin ${tycho-version} true

3.5. Cration d'un projet feature (keulkeul.tychorcpdemo.feature) Ce projet de type feature va nous permettre de regrouper dans une feature l'ensemble des plugins de notre application. Il faut admettre que pour l'instant il n'y en a pas normment. L'ide est que si vous souhaitez ajouter de nouveaux plugins, vous n'aurez qu' modifier cette feature. Ouvrir l'assistant de cration de projet File -> New -> Other... Choisir l'lment Feature Project depuis la catgorie Plug-in Development, puis cliquer sur Next. L'cran ci-dessous doit apparatre :

ce niveau vous devriez obtenir la structure de fichiers suivante :

Choisir comme nom keulkeul.tychorcpdemo.feature.

de

projet

Developpez Magazine est une publication de developpez.com

Numro 37 Dcembre - Janvier 2011/2012 Page 6

Personnaliser le rpertoire de travail pour tre la racine du projet keulkeul.tychorcpdemo.aggregator. Choisir depuis la liste des plugins disponibles (Initialize from the plug-ins list) le plugin keulkeul.tychorcpdemo.rcp puis cliquer sur Finish.

Ouvrir le fichier site.xml et depuis l'onglet Site Map crer une nouvelle catgorie appele TychoRCPDemo. Depuis cette nouvelle catgorie, ajouter la feature keulkeul.tychorcpdemo.feature cre prcdemment (voir capture d'cran ci-dessous).

Un nouveau projet keulkeul.tychorcpdemo.feature vient d'tre cr. Ajouter un nouveau fichier Maven pom.xml la racine de ce projet dont le contenu est le suivant : 4.0.0 tychorcpdemo keulkeul.tychorcpdemo.parent 1.0.0-SNAPSHOT ../keulkeul.tychorcpdemo.parent/po m.xml tychorcpdemo keulkeul.tychorcpdemo.feature 1.0.0-SNAPSHOT eclipse-feature

Ajouter un nouveau fichier Maven pom.xml la racine de ce projet dont le contenu est le suivant :

Ajouter ce nouveau projet comme module en compltant le pom.xml du projet keulkeul.tychorcpdemo.aggregator. Vrifier que l'application se construit correctement via un mvn clean install.

4.0.0 tychorcpdemo keulkeul.tychorcpdemo.parent 1.0.0-SNAPSHOT ../keulkeul.tychorcpdemo.parent/po m.xml tychorcpdemo fr.ensma.lisi.tychorcpdemo.repositor y 1.0.0-SNAPSHOT eclipse-repository

3.6. Cration d'un projet update site (keulkeul.tychorcpdemo.repository) Ce nouveau projet a pour objectif de crer un update site de notre projet. Cela permettra ainsi d'utiliser l'outil de mise jour pour installer nos nouveaux plugins. Ouvrir l'assistant de cration de projet File -> New -> Other... Choisir l'lment Plug-in Project depuis la catgorie Plug-in Development, puis cliquer sur Next. L'cran ci-dessous doit apparatre :

Ajouter ce nouveau projet comme module en compltant le pom.xml du projet keulkeul.tychorcpdemo.aggregator. Vrifier que l'application se construit correctement via un mvn clean install.

3.7. Cration d'un fichier product (keulkeul.tychorcpdemo.repository) Le fichier product contient toutes les informations relatives la construction d'un excutable Eclipse (plateformes supportes, le splashscreen, le nom de l'application, les images...). Ouvrir l'assistant de cration de projet File -> New -> Other... Choisir l'lment Product Configuration depuis la catgorie Plug-in Development, puis cliquer sur Next. L'cran ci-dessous doit apparatre :

Choisir comme nom de projet keulkeul.tychorcpdemo.repository. Personnaliser le rpertoire de travail pour tre la racine du projet keulkeul.tychorcpdemo.aggregator. Cocher l'option Generate a web page listing all available features within the site puis cliquer sur Finish. Depuis le nouveau projet gnr, renommer le fichier site.xml en category.xml.

Developpez Magazine est une publication de developpez.com

Numro 37 Dcembre - Janvier 2011/2012 Page 7

Choisir le projet keulkeul.tychorcpdemo.repository. Saisir la valeur tychorcpdemo.product dans le champ File name. Choisir pour l'option Use a launch configuration la valeur TychoRCPDemo puis cliquer sur Finish. diter en mode texte le fichier tychorcpdemo.product (sans l'diteur de configuration de product) et ajouter les instructions suivantes qui permettront de dmarrer les plugins adquats au lancement de l'application RCP

org.sonatype.tycho tycho-p2-directorplugin ${tycho-version} materialize-products materialize-products

Finalement depuis le projet feature (keulkeul.tychorcpdemo.feature) il nous reste ajouter le fragment SWT correspondant la plateforme Windows Depuis l'onglet Overview du mode dition du (notre plateforme de tests) de faon construire le product fichier tychorcpdemo.product, saisir la valeur pour cette plateforme. TychoRCPDemo.product. Modifier l'option The Product configuration is noter que pour le support de diffrentes versions de based on par la valeur features. Windows (64 bits par exemple) ou le support de diffrents S'assurer que la valeur systmes d'exploitation (Linux, MAC OS X...), il sera keulkeul.tychorcpdemo.rcp.product est ncessaire de ritrer cette tape. slectionne pour l'option Product et que la valeur Ouvrir le fichier feature.xml et afficher l'onglet keulkeul.tychorcpdemo.rcp.application est Plug-ins. slectionne pour l'option Application. Voir Ajouter la feature capture d'cran ci-dessous : org.eclipse.swt.win32.win32.x86 et dfinir la valeur win32 dans le champ Operating Systems, la valeur win32 dans le champ Window Systems et la valeur x86 dans le champ Architecture. Voir capture d'cran ci-dessous pour visualiser le rsultat attendu :

Depuis l'onglet Dependencies choisir la valeur keulkeul.tychorcpdemo.feature. Voir capture d'cran ci-dessous : Vrifier que l'application se construit correctement via un mvn clean install. Depuis le rpertoire keulkeul.tychorcpdemo.repository/target/products /TychoRCPDemo.product/win32/win32/x86 vous devriez obtenir le rsultat de cette construction. Un product Eclipse construit automatiquement l'aide de Maven/Tycho.

Pour construire un product Eclipse selon un environnement donn (OS/WS/Arch) complter le fichier pom.xml du projet keulkeul.tychorcpdemo.repository comme prsent ci-dessous :

4. Conclusion Ce tutoriel a prsent une introduction l'utilisation du plugin Tycho pour construire automatiquement un product Eclipse. Nous avons insist sur la structuration des diffrents plugins qui composent notre projet et sur leNumro 37 Dcembre - Janvier 2011/2012 Page 8

Developpez Magazine est une publication de developpez.com

contenu XML placer dans les diffrents fichiers de 5. Liens description spcifiques Maven. Vous trouverez ci-dessous en ensemble de liens qui peuvent complter ce tutoriel : De nombreuses fonctionnalits restent dcouvrir Apprendre construire un plugin : Lien 04. concernant Tycho et notamment la possibilit d'excuter Quelques billets sur Tycho : Lien 05. des tests unitaires, de grer des dpendances de Site de Tycho : Lien 06. bibliothques tierces, de gnrer un product Eclipse selon la version de la plateforme, de dployer les nouveaux plugins dans un update site, et de faire rfrence des 6. Sources plugins depuis un update site donn. Les sources de ce tutoriel sont disponibles ici : FTP (Lien 07) ou HTTP (Lien 08). Retrouvez l'article de Mickael BARON en ligne : Lien 09

Developpez Magazine est une publication de developpez.com

Numro 37 Dcembre - Janvier 2011/2012 Page 9

AndroidLes dernires newsGlobalement, le march des tlphones mobiles enregistre une hausse de 5,6 % par rapport la mme priode de Plus dun smartphone vendu sur deux sous lOS lanne dernire, avec prs de 440,5 millions de dispositifs de Google dans le monde vendus. Les ventes de smartphones, quant elles, ont Le succs dAndroid se confirme en France. Le systme quasiment explos avec une hausse de 42 % par rapport dexploitation de Google est devenu lOS mobile numro 2010. 115 millions de smartphones ont t vendus au 1 sur le territoire franais, selon un rcent rapport publi troisime trimestre. par le cabinet dtude des mdias Mdiamtrie. Ct constructeurs, Samsung devient le premier En six mois, les achats de nouveaux smartphones sous constructeur de smartphones pour cette priode. Nokia Android par les consommateurs ont t deux fois plus demeure nanmoins le premier fabricant de tlphones nombreux quau premier trimestre 2011, permettant ainsi mobiles. lOS de devancer pour la premire fois iOS en France avec 40 % de parts de march. Commentez la news d'Idelways en ligne : Lien 10

Android devient numro 1 en France

L'attrait des terminaux mobiles sous lOS de Google au cours de ces derniers mois se confirme aussi de faon globale travers le monde entier.

Google publie le code source d'Android 4

Le kit de dveloppement natif de l'OS supporte dsormais les API de cette version Les rsultats dune nouvelle tude du cabinet danalyse Gartner, au cours du troisime trimestre de cette anne, Sur la mailing-list d'Android, un ingnieur de Google rvlent quAndroid dtient une part de march de 52,5 %, annonce la publication progressive du code source d'Ice soit le double des ventes de smartphones Android au Cream Sandwish (Lien 11) sur son serveur Git public, d'o troisime trimestre 2010. il peut tre librement tlcharg. Pour Gartner, cette croissance dAndroid se justifie par la diversit des terminaux mobiles sous lOS, un affaiblissement de lenvironnement concurrentiel, le manque de nouveaux produits pour les systmes dexploitation alternatifs comme Windows Phone 7 et BlackBerry OS. Cette ouverture constitue un pas significatif pour Android, car il s'agit de la premire fois qu'une base de code de l'OS, adapte aux tablettes, soit accessible. Android 4 reprsente un environnement unifi pour les smartphones et les tablettes. Pour ces dernires, une version d'Android a t ddie : Honeycomb (Android 3) (Lien 12), mais son code source n'a jamais t publi La seconde place est occupe par Symbian, qui enregistre (Lien 13). Google avait slectionn les partenaires qui ont une chute de prs de 20 points en un an, pour se retrouver eu droit de l'utiliser, l'instar de Motorola pour sa tablette 16,9 % de parts de march au cours de cette priode. Xoom. On constate galement une baisse des ventes de liPhone dApple, dont la part reprsente dsormais 15 % pour le troisime trimestre, contre 16,6 % pour la mme priode de lanne dernire. Cette baisse sexplique selon linstitut Gartner par lattente du nouvel iPhone par les consommateurs. Ces sources dsormais disponibles incluent tout l'historique de l'volution du code. Il est donc possible de remonter aux sources de Honeycomb que Google n'a pas tagu afin de dissuader les dveloppeurs de l'utiliser. L'ingnieur Jean-Baptiste Queru explique dans cette annonce que cette version est quelque peu incomplte. Nous voulons que chacun se concentre sur Ice Cream RIM, le constructeur des tlphones BlackBerry, recule Sandwish , dclare-t-il. aussi de quatre points sur un an avec 11 % de parts de march pour le troisime trimestre. Gartner constate Lors de la sortie des premiers appareils sous Honeycomb, nanmoins que les ventes des tlphones de la firme sont beaucoup d'observateurs avaient fustig le modle open restes stables entre les deux trimestres. source trs contrl. Google publie cette fois le code source avant le lancement commercial du Galaxy Nexus, mais n'amliore pas la gouvernance du projet, toujours sens unique. Paralllement, le Kit de Dveloppement Natif de l'OS vient d'avoir une nouvelle rvision qui expose aux applications C et C++ les nouvelles API introduites par Android 4.0 : Lien 14.

Developpez Magazine est une publication de developpez.com

Numro 37 Dcembre - Janvier 2011/2012 Page 10

Les dernier tutoriels et articlesAndroid et les Services Web SOAP

Les instructions pour tlcharger les sources d'Android Tlcharger la nouvelle rvision du NDK : Lien 16 4.0.1 sont consultables sur cette page : Lien 15 Commentez la news d'Idelways en ligne : Lien 17 Android et les Services Web SOAP

Cet article va vous prsenter comment appeler des Services Web SOAP au sein de votre application Android et comment parser le rsultat de l'appel.1. Prambule web-services/wsdl?WSDL, celle-ci proposant la mthode getMeteo(String ville). Voyons comment appeler ce L'appel de Services Web SOAP peut s'avrer trs utile au service : sein d'une application Android. Ici nous allons voir comment appeler un Service Web permettant de connatre public class AppelService { la mto du jour. Avant cela, une petite mise au point est ncessaire. private static final String NAMESPACE = Tout d'abord, qu'est-ce qu'un Service Web ? Un Service Web est une fonctionnalit excutable distance pouvant tre dveloppe dans divers langages comme Java, .NET... Ces services peuvent tre appels partir d'un langage diffrent de celui du service. Par exemple, il est possible d'appeler un service cod en Java au sein d'un code en PHP. Les fonctionnalits de ces Web_Services peuvent tre des interactions avec une base de donnes, fournir des informations au programme appelant le service. Un Service Web SOAP ncessite une WSDL contrairement des services REST. Qu'est-ce qu'une WSDL? Le WSDL est une description fonde sur le XML qui indique comment utiliser le service. Le WSDL sert dcrire : - le protocole de communication (SOAP RPC ou SOAP orient message) ; - le format de messages requis pour communiquer avec ce service ; - la dfinition des mthodes qu'il est possible d'appeler ; - la localisation du service. Une description WSDL est un document XML qui commence par la balise "definitions" et qui contient les balises suivantes : - "binding" : dfinit le protocole utiliser pour invoquer le service web ; - "port" : spcifie l'emplacement actuel du service ; - "service" : dcrit un ensemble de points finals du rseau. Des outils sont-ils ncessaires? Pour appeler un Service Web SOAP, une bibliothque est ncessaire vu qu'il n'existe pas un tel outil dans le SDK d'Android. Il s'agit de la bibliothque kSoap2 disponible l'adresse suivante : kSoap2 (Lien 18). Elle permettra galement de parser la rponse du service. 2. Appel d'un service Nous allons supposer qu'une WSDL (Web Services Description Language, ou langage de description de services) est disponible l'adresse http://mon-exemple"http://mon-site-web.fr"; private static final String URL = "http://monexemple-web-services/wsdl.WSDL"; private static final String SOAP_ACTION = "getMeteo"; private static final String METHOD_NAME = "getMeteo"; private String getMeteo(String ville) { try { SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); request.addProperty("ville", ville); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.setOutputSoapObject(request); AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL); androidHttpTransport.call(SOAP_ACTION, envelope); } catch (Exception e) { Log.e("getMeteo", "", e); } } }

Rien de spcial retenir dans ce code part qu'il utilise intgralement la bibliothque. Afin de pouvoir l'utiliser, il vous faudra juste remplacer les constantes par vos URL et noms de mthodes, adaptes votre WSDL et si ncessaire ajouter des paramtres votre requte. Voil, nous savons donc maintenant comment appeler un Service Web 3. Parser une rponse SOAP Il est fort intressant de savoir appeler un Service Web, encore faut-il savoir comment parser la rponse. Ici, nous voulons donc parser la rponse SOAP se prsentant de la manire suivante : beau

Developpez Magazine est une publication de developpez.com

Numro 37 Dcembre - Janvier 2011/2012 Page 11

Log.e("getMeteo", "", e); public class AppelService { } private static final String NAMESPACE = "http://mon-site-web.fr"; private static final String URL = "http://monexemple-web-services/wsdl.WSDL"; private static final String SOAP_ACTION = "getMeteo"; private static final String METHOD_NAME = "getMeteo"; private String getMeteo(String ville) { String meteo = null; try { SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); request.addProperty("ville", ville); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.setOutputSoapObject(request); AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(URL); androidHttpTransport.call(SOAP_ACTION, envelope); SoapObject objetSOAP = (SoapObject)envelope.getResponse(); meteo = this.parserObjet(objetSOAP); } catch (Exception e) { private String parserObjet(SoapObject objet) { SoapObject meteoObjet = (SoapObject)positionSoap.getProperty("meteo"); String meteo = meteoObjet.getProperty("temps").toString(); return meteo; } } }

Un simple appel la mthode getProperty permet de rcuprer un autre objet SoapObject ou directement la valeur d'une proprit. 4. Conclusion Vous avez pu voir qu'il est trs simple de faire appel des Services Web SOAP et de parser les rsultats. Ici, il s'agit d'un exemple simple mais mme si vous faites face un plus compliqu, vous ne serez pas perdu ! Dans un prochain article, nous verrons comment appeler des Services REST. Retrouvez l'article de Michel Dirix en ligne : Lien 19

Developpez Magazine est une publication de developpez.com

Numro 37 Dcembre - Janvier 2011/2012 Page 12

JavaLes derniers tutoriels et articlesIntroduction l'cosystme Java Cet article fait un vaste tour d'horizon du monde java et des technologies qui y sont lies afin de permettre aux nouveaux arrivants de se faire une ide d'ensemble.1. Introduction La trs grande richesse de Java constitue galement l'un de ses dfauts du point de vue de la personne qui dbute et qui ne sait pas trop par o commencer. De fait, les tutoriels pour apprendre les bases sont nombreux (Lien 20), mais lorsqu'il faut aller au-del, chaque cours va tre li un aspect spcifique de Java, et il n'est pas toujours ais de voir les liens entre toutes les facettes, en particulier lorsque l'on dbute. Le but de ce tutoriel est donc de prsenter une approche parmi d'autres de la dcouverte progressive de l'cosystme Java et galement du J2EE. La complexit de ce tutoriel n'est pas linaire, elle augmente mesure que des choses plus compliques sont abordes. Arrtez-vous lorsque vous commencerez ne plus comprendre, et n'hsitez pas cliquer sur les liens qui renvoient vers des tutoriels ayant trait aux sujets abords ;). 2. Ma premire classe Ce paragraphe est davantage destin situer le point de dpart de la progression du tutoriel qu' fournir un point de dpart dans l'apprentissage de Java. De fait, dans l'ensemble de ce tutoriel, on supposera que les bases de la programmation oriente objet (POO) en Java sont connues du lecteur. Pour l'criture de la premire classe Java, point n'est besoin d'utiliser un outillage complexe. partir du moment o vous avez install un JDK et configur les variables d'environnement (Lien 21), de simples diteurs de texte tels que Notepad sous Windows ou Gedit sous Ubuntu suffisent pour crire le premier programme.public class PremiereClasse { public static void main(String[] args) { System.out.println("Bonjour ceci est mon premier essai avec Java"); } }

Introduction l'cosystme Java

prouverez rapidement le besoin d'utiliser un diteur de texte qui fournisse au minimum la coloration syntaxique afin de rendre la lecture de code plus aise. Gedit sous Linux le fait dj, mais il existe des solutions plus pousses comme Geany (qui est multiplateforme) ou Notepad++ (pour Windows et Mac). 3. Utilisation d'un environnement de dveloppement Si vous progressez en Java, vous allez rapidement vous retrouver confront aux limites de l'approche prcdente et commencer utiliser un environnement de dveloppement. Il s'agit d'un logiciel qui va automatiser tout ce que vous faisiez la main en ligne de commande et vous fournir des outils d'aide au dveloppement qui vont grandement vous faciliter la vie. Le plus connu est Eclipse (Lien 22), mais il existe plusieurs autres possibilits (Lien 23). Dans un environnement de dveloppement (EDI, ou en anglais : IDE), vous allez pouvoir trs facilement compiler et tester vos programmes, utiliser des fichiers diffrents pour chaque classe, structurer les classes en packages et sous-packages , exporter l'ensemble du projet sous forme d'un jar excutable, ajouter des bibliothques tierces, et dans le cas d'un projet J2EE, dployer le projet dans un serveur d'applications, toutes oprations qui taient dj possibles en ligne de commande, mais qui vont se trouver en pratique grandement facilites par l'utilisation d'un EDI. Dans la suite de ce tutoriel nous nous concentrerons sur Eclipse, qui est le plus rpandu (mais pas forcment le plus simple). Vous trouverez ici de nombreux cours pour apprendre dbuter avec Eclipse : Lien 24.

Quelques raccourcis clavier pour vous mettre l'eau la bouche : CTRL+ESPACE = autocompltion. Vous commencez crire un mot et Eclipse le termine pour vous ; ALT+MAJ+J = Javadoc. Permet de gnrer automatiquement le squelette des commentaires Aprs sauvegarde dans un fichier que l'on nomme donc qui ont trait au code survol par le curseur ; "PremiereClasse.java" on peut compiler puis excuter en ligne de commande l'aide de : CTRL+MAJ+O = Import automatique des dpendances requises par votre classe pour peu $ javac PremiereClasse.java qu'elles soient contenues dans des bibliothques $ java PremiereClasse situes dans le CLASSPATH du projet.Bonjour ceci est mon premier essai avec Java

On peut coder un moment de cette manire. Tant que l'on ne va utiliser que les bibliothques fournies avec le JDK, a ne pose aucun souci. Il suffit de placer toutes ses classes la suite dans le mme fichier (une seule sera publique, celle qui contient la mthode main). Cependant vous

Le Classpath est une variable d'environnement du projet qui recense l'ensemble des chemins dans lesquels le compilateur va pouvoir trouver des classes ou des bibliothques du projet. Attention l'UTF-8. Par dfaut, Eclipse enregistre lesNumro 37 Dcembre - Janvier 2011/2012 Page 13

Developpez Magazine est une publication de developpez.com

fichiers dans le codage de caractres systme. C'est--dire en gros ISO pour Windows et UTF-8 pour les autres. C'est pourquoi il est conseill de choisir un codage donn et de s'y tenir si vous ne souhaitez pas avoir de problmes avec des caractres accentus qui s'affichent mal (je vous recommande le tout UTF-8). 4. Premires interfaces graphiques En gnral, on fait ses armes sur AWT et (surtout) SWING, deux frameworks graphiques inclus dans le JDK, qui permettent la cration relativement rapide d'interfaces graphiques. Pour quelqu'un qui dbute, le niveau de difficult peut sembler augmenter, car il y a un certain nombre de nouveaux concepts assimiler, notamment ceux de Layout (comment organiser les contrles de l'interface) (Lien 25) et d'EventListener (ou comment relier un bouton une mthode) (Lien 26). Si vous venez d'un langage assez unifi comme le .Net, vous allez commencer prendre conscience qu'en Java comme dans beaucoup d'autres langages, on code partir de multiples briques fonctionnelles forges par d'autres, et qui ne sont pas toujours faciles manipuler. Si jamais vous avez la sensation de vous battre avec un framework, dites-vous que a peut valoir le coup de chercher mieux comprendre quand, par qui, comment et pourquoi il a t conu ;). Pour vous aider dmarrer, il y a plthore de tutoriels sur les interfaces graphiques Java : Lien 27. noter qu'alternativement SWING, vous pouvez aussi vous tourner vers SWT (Lien 28), qui a t dvelopp par IBM pour pallier certains inconvnients de SWING. On peut galement mentionner ici les RCP (RCP signifie "Rich CLient Platform"), qui fournissent des interfaces standard et fournissent un important package logiciel prenant en compte les concepts d'extensibilit, de docking, d'onglets, de menus, de prfrences, etc. mais se situent un niveau au-dessus de SWING et SWT en termes d'abstraction. Citons par exemple les plateformes Eclipse RCP (Lien 29) et Netbeans RCP, sur lesquelles sont bass les IDE du mme nom. Pour aller plus loin : Lien 30. 5. Traduction au sein de mon application (i18n et l10n) Envie de crer un programme qui soit utilisable par des gens parlant diffrents langages ? Il est relativement ais de parvenir ce but. L'astuce est toute simple : l o d'ordinaire vous criviez en dur dans le code la phrase afficher, vous allez en lieu et place utiliser une cl de traduction et utiliser la classe ResourceBundle (Lien 31) pour faire le lien avec la traduction correspondante que vous aurez place dans un fichier de proprits situ dans le classpath. Ceci est davantage dvelopp dans le chapitre 24. L'internationalisation (Lien 32) du cours Dveloppons en Java de J.M.Doudoux : Lien 33. Pour aller plus loin, il est galement intressant de mentionner ce tutoriel : Lien 34. Comme le mentionne la documentation de la classe PropertyResourceBundle (Lien 35), il est prfrable que les fichiers de proprits soient encods au format ISO8859-1 Si vous vous demandez ce que veulent dire i18n et l10n, sachez que ces sigles barbares sont des raccourcis pour InternationalizatioN et LocalisatioN. chaque fois on a

gard la premire et la dernire lettre, et entre les deux on a mis le nombre de lettres intermdiaires. 6. Un peu d'architecture Arrivs un certain stade de dveloppement, avec un projet sans cesse croissant en taille et en complexit, vous allez prouver le besoin de dcouper le projet en plusieurs couches fonctionnelles et d'organiser vos classes au sein de ces couches afin de mieux dgager la structure d'ensemble et rendre la comprhension gnrale plus aise. Le mcanisme des packages est d'une grande aide pour cela. Une architecture trs courante est l'architecture dite "trois tiers" : elle consiste construire une application en trois couches : la couche dite "de prsentation" gre l'interface graphique, la couche dite "mtier" contient le cur de l'application, et la couche dite "d'accs aux donnes" permet de lire/persister les donnes ncessaires l'application (typiquement l'accs une base de donnes). Ayez l'esprit que pour russir crer une application dote d'une bonne architecture, il faut y rflchir avant de commencer coder. C'est toute la phase de modlisation, prliminaire ncessaire la cration de toute application un tant soit peu complexe. Pour cette raison, il y a de nombreux tutoriels sur la question : Lien 36. Mais attention, il n'est pas toujours bon de se lancer dans une modlisation trs complexe, cela doit vraiment dpendre de vos besoins. Abandonnez l'ide du design parfait (qui n'existe pas), car vous aurez forcment besoin de retoucher des dtails pendant que vous coderez. Mieux vaut dfinir une architecture gnrale et spcifier en dtail le fonctionnement des algorithmes les plus complexes, mais inutile d'aller plus loin. Vous entendrez probablement parler aussi de Design Patterns : Lien 37. Il s'agit tout simplement des problmes courants que peut rencontrer un dveloppeur et des moyens reconnus par la communaut comme les plus pertinents pour y rpondre. De mon exprience, la plupart ne sont pas immdiatement accessibles au dbutant. Il est ncessaire d'avoir un minimum d'exprience et avoir vraiment t confront au problme pour saisir la pertinence d'un pattern donn. 7. Bibliothques externes et frameworks Java est un langage trs populaire et relativement ancien, il existe donc de nombreux bibliothques et frameworks qui implmentent les besoins les plus courants du dveloppeur et lui permettent de se concentrer sur la partie mtier, c'est-dire ce qui l'intresse vraiment et qui a trait au but dans lequel il dveloppe, et non pas des trucs bateaux comme les entres/sorties, la connexion Internet, l'export sous forme d'images ou de PDF, l'criture d'emails, etc. La diffrence que je verrais entre une bibliothque et un framework est la suivante : une bibliothque est une archive jar que vous allez rajouter dans votre classpath, et dont vous allez utiliser les classes directement. Exemple typique, jdbc (qui permet d'accder une base de donnes). Alors qu'un framework, pour prendre une analogie a va tre comme un programme dj existant au cur duquel vous insreriez le vtre. Le framework se chargeant de toutes les oprations communes et vous apportant des fonctionnalits intressantes comme l'inversion de contrle (ce n'est plus vous qui appelez lesNumro 37 Dcembre - Janvier 2011/2012 Page 14

Developpez Magazine est une publication de developpez.com

classes du framework, mais le framework qui appelle vos classes) et l'injection de dpendances (utile en programmation par contrats : vous dclarez un objet d'aprs l'interface qu'il doit implmenter et vous utilisez son setter pour lui fournir son implmentation vritable), ce qui vous permettra un meilleur dcouplage des diffrentes couches qui constituent l'architecture de l'application. Les frameworks sont particulirement utiles dans l'univers J2EE (construction d'applications Java tournant dans un serveur Web). Exemple typique : Spring (Lien 38). Pour les plus curieux, quelques explications complmentaires sur l'inversion de contrle. L'explication qui en a t donne ici : "ce n'est plus vous qui appelez les classes du framework, mais le framework qui appelle vos classes" est rductrice car elle ne prsente qu'une facette de l'inversion de contrle. Voici une explication plus dtaille : le principe consiste briser une dpendance bidirectionnelle (ou cyclique), ou encore briser une dpendance unidirectionnelle non voulue comme une couche mtier qui invoquerait directement des mthodes de la couche de l'IHM. Il existe deux grosses techniques : par change de messages (cf. middleware) ; par contrat (cf. interface). Dans le premier cas, il s'agit d'avoir un pont de communication abstrait via lequel les lments s'changent des messages. Dans le second cas, on dtermine un jeu d'interfaces (ou de classes abstraites) qui seront implmentes par la couche invoque de manire directe. Ensuite cette mme couche fournit la couche qui en a besoin les implmentations utiliser (souvent par injection). 8. Fichiers de configuration et annotations Tt ou tard, si vous continuez programmer en Java, vous allez avoir besoin d'utiliser des fichiers de configuration et/ou des annotations. Le but est de dcrire le comportement du programme et la manire dont il va interagir avec d'autres programmes. Typiquement vous pouvez utiliser un fichier de configuration qui vous est propre pour indiquer des chemins d'accs, ou des paramtres que vous voulez pouvoir changer sans avoir besoin de recompiler le programme. Mais la premire fois que vous aurez besoin d'utiliser un fichier de configuration sera sans doute pour configurer un framework ou une bibliothque. On distingue gnralement deux types de fichiers de configuration : les fichiers XML et les fichiers de proprits. Les fichiers de proprits sont les plus simples : ils contiennent un ensemble de paires CL=VALEUR raison d'une par ligne. Les dveloppeurs utilisent souvent des noms de cl qui refltent la catgorie de celle-ci. Par exemple "monappli.macouchemetier.coefficients.usure=15". De cette manire il est trs ais de savoir quoi va servir la cl (et d'viter que deux cls nommes usure ayant trait deux choses diffrentes ne se tlescopent). Les fichiers XML sont un peu plus complexes, mais il ne faut pas en avoir peur. La structure est similaire celle d'un fichier HTML et elle est gnralement plus simple. L'avantage du

XML est qu'il permet d'organiser facilement les donnes de configuration. Ce qu'on lui reproche gnralement est sa verbosit : de nombreuses balises sont ncessaires la description d'une information mme simple. Si vous vous lancez dans le J2EE, vous ne pourrez pas en faire l'conomie, puisque vous aurez ncessairement besoin d'un fichier web.xml pour dcrire le comportement de votre application au serveur d'applications dans lequel elle sera dploye. Venons-en aux annotations : Lien 39. Elles sont apparues avec la cinquime version de Java vers fin 2004. Elles visent rduire le volume des fichiers de configuration (voire s'en passer totalement), en crivant directement dans le code l'aide d'une balise spciale des informations lies son comportement. Ce qu'il faut garder en tte, c'est que les annotations ne sont pas un remde miracle, et il ne faut pas verser dans le tout annotations comme certains font, mais savoir les utiliser avec discernement. Le danger est le risque d'parpiller des informations de configuration un peu partout dans le programme alors qu'elles seraient plus claires en tant centralises dans un unique fichier de configuration. C'est en particulier le cas des annotations qui dcrivent le comportement des classes les unes vis-vis des autres. l'inverse, il y a peu d'intrt reporter dans un fichier de configuration des annotations propres au fonctionnement interne d'une classe donne. 9. Tests unitaires Les tests unitaires sont une partie importante des applications que les dveloppeurs ont trop souvent tendance oublier par manque de temps : Lien 40. Il s'agit tout simplement d'une classe de test qui va vrifier que chaque mthode d'une classe effectue bien le travail demand. C'est particulirement utile en cas de refactoring pour se rendre compte immdiatement des problmes qui ont pu arriver. Par ailleurs les tests unitaires contiennent de prcieuses informations sur le comportement attendu de l'application qui sont plus utiles que de longs commentaires. Une bonne pratique consiste crire ses tests unitaires avant d'crire les classes auxquelles ils correspondent. Cela permet tout la fois : de se poser les bonnes questions : "Quel est le comportement attendu de ma classe ?" plutt que de commencer par modliser et d'adapter les mthodes a posteriori ; d'tre sr d'avoir son test unitaire fonctionnel une fois la classe finie, et de ne pas tre influenc dans le sens "je fais un test qui correspond ce que j'avais en tte quand j'ai fait la mthode", ce qui peut parfois constituer un pige, puisque l'on ne vrifie pas la conformit aux spcifications. Cette manire de programmer est appele le TDD (Test Driven Developpement). En Java, le framework communment utilis pour les tests unitaires est Junit (Lien 41), mais il y a galement TestNG (Lien 42), qui est une variante intressante. De nombreux plugins pour Eclipse rendent aise l'utilisation des tests unitaires. Citons tout d'abord le plugin pour JUnit luimme (gnralement fourni par dfaut avec Eclipse), mais galement MoreUnit, qui facilite le lien entre une classe et son test unitaire et la gnration de mocks, ainsiNumro 37 Dcembre - Janvier 2011/2012 Page 15

Developpez Magazine est une publication de developpez.com

qu'Infinitest, qui permet de relancer automatiquement le 12. Outils de build dernier test effectu chaque enregistrement d'une Maven (Lien 54) devient trs vite incontournable ds lors modification de fichier. que l'on commence avoir un projet Java qui inclut de multiples bibliothques. Il s'agit d'un outil qui permet Rapidement vous pourrez rencontrer le problme suivant : d'inclure facilement les bibliothques dont le projet lorsqu'une classe dpend d'une autre classe, comment besoin, et de les configurer aisment. Il permet galement tester juste cette classe prcise sans tester aussi la de grer les dpendances de manire transitive sans en dpendance ? La solution passe par l'utilisation de stubs oublier aucune, ce qui est un luxe que vous apprcierez (qui simulent le comportement d'une classe donne) ou de lorsque vous vous serez suffisamment battu avec les mocks (qui vont rejouer une srie de comportements "ClassNotFoundException", caractristiques de l'oubli prtablis). Citons EasyMock (Lien 43), Jmockit d'inclusion d'une bibliothque. (Lien 44), et Mockito (Lien 45) parmi les bibliothques de gnration de mocks rpandues. Mais Maven ne s'arrte pas l. Il s'agit en effet d'un outil de build (en franais: de construction) de projet hautement 10. Traces logicielles (logging) configurable, et qui peut s'interfacer de nombreux outils Lorsque l'on teste un programme, on a besoin de savoir ce d'analyse de code (comme Sonar : Lien 55) et d'intgration qu'il se passe. Au dbut on utilise l'instruction continue (comme Hudson (Lien 56) ou Cruise Control "System.out.println()" pour crire dans la console des (Lien 57)), ce qui en fait un outil connatre absolument informations sur le droulement du programme, mais trs pour tout dveloppeur Java qui se respecte. rapidement, cela ne suffit plus car il est ennuyeux de devoir recompiler pour le dsactiver et qu'il serait Alternativement Maven, il convient de mentionner galement souhaitable de pouvoir dfinir des niveaux de galement ANT : Lien 58. Cet outil est plus ancien que criticit des messages. C'est pourquoi une solution Maven et reste d'autant plus rpandu qu'il est aussi trs communment utilise dans le monde de Java est la utilis pour construire des projets dvelopps dans d'autres librairie commons-logging d'Apache (Lien 46). Elle langages. Notons que les deux ne sont nullement contient toutes les classes que vous aurez besoin d'appeler incompatibles, il est possible de les adapter l'un l'autre, depuis votre programme Java. Au lancement elle par exemple pour migrer en douceur. Pour vous faire une recherchera dans votre classpath une dpendance charge ide des avantages/inconvnients des diffrents outils de de la ralisation effective de l'criture ou l'affichage des build, voici un comparatif : Lien 59. traces. En gnral, on utilise log4j pour cette tche : Lien 47. Il est galement possible d'appeler log4j 13. Java EE directement sans passer par commons-logging, mais Java EE (ou J2EE) dsigne l'ensemble des technologies gnralement on s'en abstient pour viter de rendre les permettant de crer des applications d'entreprise. Le traces du programme dpendantes d'une implmentation principe est simple : on veut viter de devoir recoder dans particulire. chaque projet tout ce qui n'est pas spcifique au cur de mtier de l'application. Par consquent, on va utiliser un Il existe d'autres solutions que commons-logging. On peut serveur d'applications (qui va contenir tout le code non citer par exemple SLF4J qui est assez largement utilis : spcifique), et y embarquer notre application (centre sur Lien 48. Il permet de pallier certains dfauts que l'on ce qui est propre notre mtier). Des fichiers de reproche parfois commons-logging. De la mme configuration permettent de dcrire au serveur manire, il en existe aussi pour log4J, dont notamment le d'applications comment l'application doit se comporter. projet Logback (Lien 49), qui se pose comme le J2EE sert souvent la cration d'applications Web, de successeur non officiel de log4J. manire assez similaire ce que fait PHP. Elle est plus complexe mettre en uvre que PHP, mais elle apporte 11. Bases de donnes beaucoup plus de possibilits lorsque l'on recherche des La plupart des applications un tant soit peu volues vont fonctionnalits un peu pousses. avoir besoin de s'interfacer avec des bases de donnes. L'outil universel utilis dans ce but est JDBC : Lien 50. Il Il y a deux facettes dans J2EE. Celle qui est la plus connue est compos de deux parties distinctes : une API Java est la facette "prsentation Web". On l'aborde contenant les fonctions que vous aurez besoin d'appeler, et gnralement en commenant par coder des servlets et des un driver propre la base de donnes que vous allez JSP suivant le modle MVC : Lien 60. On va utiliser. En gnral on commence faire ses armes sur gnralement utiliser un serveur d'applications dit "conteneur lger" qui n'implmente la spcification J2EE l'utilisation des bases de donnes en Java avec cet outil. que dans ce domaine, comme Tomcat (Lien 61) ou Jetty. Cependant il faut savoir qu'il existe des API de plus haut L'tape suivante consiste utiliser un framework tel que niveau qui permettent de grer plus aisment la persistance Spring (Lien 62) ou Seam (Lien 63) pour avoir la plupart des objets mtiers en base de donnes. Citons par exemple des fonctionnalits requises par une application WEB trois JPA (implmentation de la spcification de rfrence) tiers un petit peu plus complexe, et ventuellement un (Lien 51), Hibernate (de loin la solution la plus rpandue) framework de prsentation tel que JSF (obligatoire dans le (Lien 52) et IBatis (qui permet de contrler finement les cas de Seam, et en train de devenir un standard, JSP tant plus ou moins dprci) (Lien 64) pour parfaire requtes SQL excutes) (Lien 53). l'exprience utilisateur mais aussi celle du dveloppeur.

Developpez Magazine est une publication de developpez.com

Numro 37 Dcembre - Janvier 2011/2012 Page 16

Ce qui est moins connu, c'est que J2EE ne s'arrte pas l. La spcification touche aussi des aspects qui n'intressent que les concepteurs des applications les plus complexes, comme la distribution d'une application sur plusieurs serveurs, avec des fonctionnalits comme le failover (en gros la tolrance aux pannes, si possible sans interruption du service), et le load-balancing (c'est--dire la rpartition de charge, tant au niveau du trafic HTTP, que de la charge de l'application elle-mme). Il est donc possible d'avoir une mme application Java dont les diffrentes instances d'une mme classe seront rparties sur diffrents serveurs. Pour faire tourner de telles applications, il est ncessaire d'utiliser un serveur d'applications dit "conteneur lourd" qui implmente la totalit de la spcification J2EE, tel que par exemple Glassfish et JBossAS. C'est dans ce contexte que vous pouvez tre amen manipuler des EJB (Lien 65) et JCA (Lien 66), qui lors de sa sortie tait prsente par Sun comme "La solution" au problme d'intgration entre le monde J2EE et les systmes d'information d'entreprise.

14. Conclusion C'est la fin de ce tour d'horizon de l'cosystme Java, j'espre ne rien avoir oubli d'essentiel, mais normalement a devrait suffire quelqu'un dbutant le Java pour se faire une ide de la complexit de ce monde et avoir un aperu d'une manire de l'aborder progressivement. Petite astuce pour finir, sachez qu'il existe de nombreux plugins Eclipse qui peuvent vous faciliter grandement la vie. Le plugin m2eclipse pour l'intgration de Maven, le plugin Instasearch pour effectuer des recherches dans les fichiers du projet et le plugin "properties editor" pour diter des fichiers de proprits avec un codage en UTF8 transparent, en sont de bons exemples. Retrouvez l'article de Gauthier Perrineau en ligne : Lien 67.

Developpez Magazine est une publication de developpez.com

Numro 37 Dcembre - Janvier 2011/2012 Page 17

MS OfficeLes derniers tutoriels et articlesComment positionner un formulaire un endroit dtermin Ce texte s'adresse des utilisateurs Access dbutants qui veulent s'initier la programmation. Dans ce tutoriel nous allons apprendre : - positionner un formulaire un endroit dtermin de l'cran ; - rcuprer les coordonnes d'un formulaire affich. Nous examinerons en dtail le fonctionnement de l'instruction DoCmd.MoveSize. Nous aborderons les notions de twips et pixels. Nous ferons appel une API : GetWindowRect. Le tout au travers d'un exemple concret : un formulaire construit pas pas.1. Avant-propos Si vous voulez ouvrir un formulaire indpendant un endroit donn avec des dimensions prcises, vous le Access n'offre pas spontanment beaucoup de moyens positionnez manuellement. Ensuite vous le recouvrez pour positionner un formulaire un endroit dtermin de exactement avec cet utilitaire. La commande l'cran. DoCmd.MoveSize avec les paramtres adquats se trouve dans votre presse-papier. Si on veut y arriver, il faut faire appel des API, c'est-dire des interfaces offertes par d'autres programmes (par 2. Le cas banal exemple Windows) qui autorisent l'interaction avec Access. L'utilisation de ces techniques n'est pas facilement Pour illustrer notre propos, construisons un formulaire abordable par un dbutant. appel fOuSuisJe. Voici les rfrences de deux contributions sur 2.1. Construisons notre formulaire Developpez.com qui abordent le sujet au moyen d'API : Dans la fentre Access : onglet Formulaires , clic sur Argyronet a trait le sujet dans son tutoriel Comment positionner un formulaire ouvert depuis , un autre, droite de l'cran : Lien 68. Arkham46 dans la contribution suivante, donne choisir Mode Cration tout le code pour positionner un formulaire sous un contrle d'un autre formulaire : Lien 69. Notre dmarche consistera utiliser une seule API et d'en expliquer le fonctionnement. , Comment positionner un formulaire un endroit dtermin

Comme exemple concret pour illustrer la thorie, nous pour enregistrer sous le nom fOuSuisJe. allons construire pas pas, ce formulaire gadget clic sur nanmoins utilisable : Dans un premier temps, ce formulaire est totalement vide : il ne contient aucun contrle et n'est rattach aucune source. Nous le garnirons au fur et mesure des besoins de l'expos. Nous modifions quelques-unes des proprits comme illustr ci-aprs :

Si on le dplace l'cran ou si on le redimensionne, les donnes affiches sont instantanment actualises.

Developpez Magazine est une publication de developpez.com

Numro 37 Dcembre - Janvier 2011/2012 Page 18

Sauvegarder le formulaire et ouvrez-le nouveau en dcrit et aux dimensions spcifies dans les paramtres. double-cliquant sur son nom dans la fentre des objets. Nous allons coder cette instruction. Le formulaire s'affiche l'cran l'endroit o il se trouvait lorsque vous l'avez sauvegard. Ouvrons notre formulaire en mode construction. Ouvrez le formulaire. Double-cliquons sur son coin suprieur gauche pour Dplacez-le. afficher les proprits : Sauvegardez-le. Fermez-le. Ouvrez-le nouveau. Faites l'exprience 3. Positionner et dimensionner un formulaire l'ouverture 3.1. La mthode MoveSize de l'objet Docmd Cette mthode permet de dplacer ou de redimensionner la fentre du formulaire. En d'autres mots, elle permet de positionner le formulaire un endroit dtermin d'avance et de prciser la hauteur et la largeur de sa fentre. Pour dcrire, avec des mots, un rectangle affich l'cran, quatre donnes suffisent : la position horizontale du coin suprieur gauche ; la position verticale du coin suprieur gauche ; Double-cliquez sur le texte Sur ouverture (1) et cliquez la largeur ; ensuite sur les (2) qui apparaissent l'extrme la hauteur. droite de la ligne. Ce sont, prcisment, les paramtres de la mthode Vous ouvrez ainsi l'diteur de code VBA, l'endroit qui Docmd.MoveSize. correspond au code associ l'vnement Sur ouverture (Form_Open) du formulaire. Un exemple de syntaxe : DoCmd.MoveSize 2835, 3405, 5670, 5100 Les units de ces arguments sont exprimes en twips. Twip est l'acronyme de TWentIeth of a Point soit de point. C'est une mesure d'affichage indpendante de la rsolution de l'cran. 1 pouce (inch) = 1440 twips. 1 cm = 567 twips. Dans l'exemple, les paramtres expriment que l'on veut placer le coin suprieur gauche 5 cm droite et 6 cm en dessous (nous expliquerons par rapport quoi, plus bas) Vous refermez la fentre de l'diteur de code. et que le formulaire aura 10 cm de large et 9 cm de hauteur. Vous enfoncez la touche pour passer en mode Formulaire. Ce dernier s'ouvre 5 cm droite et 6 cm en 3.2. Si le formulaire est une fentre indpendante dessous du coin suprieur gauche de l'cran et sa fentre Reprenons notre formulaire fOuSuisJe et essayons de voir fait 10 cm de large et 9 cm de hauteur. quoi correspond une telle syntaxe. Si le formulaire est une fentre indpendante, le point de Nous allons communiquer Access, que l'vnement Sur repre pour positionner avec DoCmd.MoveSize est le coin ouverture du formulaire fOuSuisJe doit dclencher suprieur gauche de l'cran. l'instruction DoCmd.MoveSize 2835, 3405, 5670, 5100. Ceci nous permet d'attirer l'attention sur l'importance de la Nous demandons donc Access que lorsqu'un utilisateur proprit Fen indpendante pour dterminer la position ouvre le formulaire fOuSuisJe, ce dernier soit l'endroit qu'occupera l'cran, le formulaire aprs excution de l'instruction DoCmd.MoveSize.Numro 37 Dcembre - Janvier 2011/2012 Page 19

Une fentre s'ouvre et affiche les proprits du formulaire. Cliquez sur l'onglet vnement .

L o se situe le curseur, vous saisissez le code : DoCmd.MoveSize 2835, 3405, 5670, 5100. Vous obtenez finalement ceci :

1/20 e

Developpez Magazine est une publication de developpez.com

Le positionnement du formulaire avec la mthode Pour constater o se situe le repre, nous allons modifier MoveSize de l'objet Docmd dpend de la valeur attribue l'instruction : la proprit Fen indpendante . DoCmd.MoveSize 0, 0, 5670, 5100 Nous avons associ DoCmd.MoveSize l'ouverture du formulaire, nous aurions pu l'associer d'autres En franais : dplacer le formulaire 0 twip droite ; 0 twip vnements : le clic sur un bouton par exemple. en dessous ; avec une largeur de 10 cm ; avec une hauteur de 9 cm. 3.4. En rsum Pour accder au code, enfoncez simultanment les touches et (on note : ). Modifiez l'instruction. Fermez la fentre. Ouvrez le formulaire, il s'ouvre maintenant dans le coin suprieur gauche de votre cran. 3.3. Et si le formulaire n'est pas indpendant ? Essayons ! Basculons notre formulaire en mode cration. Faites un clic droit sur le formulaire et dans le menu contextuel qui s'affiche, cliquez sur l'icne Essayons de faire l'inverse. C'est--dire pouvoir exprimer Affichez les proprits et positionnez NON Fen o se trouve un formulaire ouvert et quelles sont sa largeur et sa hauteur. indpendante. C'est plus dur, car Access, du moins dans la version 2000 ne fournit pas, nativement, ce genre de renseignement. Par contre, de telles informations sont disponibles dans le systme d'exploitation Windows. Windows API ou WinAPI est le nom donn par Microsoft l'interface de programmation (API) qui permet une application comme Access d'interagir avec le systme d'exploitation Windows. Fermez la fentre de l'diteur de code. Fermez le 4.1. GetWindowRect : une API utile pour localiser un formulaire l'cran formulaire en le sauvegardant. GetWindowRect Ouvrez le formulaire nouveau. Cette fonction nous renseigne les coordonns du coin Cette fois la position du formulaire se situe l'intrieur de suprieur gauche et du coin infrieur droit d'un rectangle la fentre de l'application ACCESS en dessous des barres affich l'cran. d'outils et coll au bord gauche. Pour la dclarer dans notre application, il faut insrer ce code dans un module : Dclaration de GetWindowRectDeclare Function GetWindowRect Lib "user32" Alias "GetWindowRect" ( _ ByVal hwnd As Long, _ lpRect As RECT) As Long

.

4. Trouver la position et les dimensions d'un formulaire

Developpez Magazine est une publication de developpez.com

Numro 37 Dcembre - Janvier 2011/2012 Page 20

Pour l'utiliser, il faut dfinir un type de donnes : Type RectType RECT Left As Long Top As Long Right As Long Bottom As Long End Type

bas (down) : Top. Rien n'est simple ! Non seulement ce vocabulaire est droutant : quand Access dit droite (Right) Windows dit Left ; quand Access dit Bas (down) Windows dit Top . Mais en plus Windows s'exprime en pixels tandis qu'Access mesure en twips !

Il faudra l'appeler en donnant le paramtre hWnd du rectangle qui nous intresse, en l'occurrence le rectangle Et pour encore corser les choses : le nombre de pixels occup par notre formulaire. dpend de la rsolution de votre cran ! Un hWnd est un nombre entier gnr permettant d'identifier de manire unique l'cran. Dans Access, chaque formulaire ouvert a hWnd qui renseigne ce descripteur Windows. par Windows Il nous faut donc un convertisseur pixels => twips. une fentre En ralit il en faut deux : une proprit attribu par - nombre de pixels d'une distance horizontale => twips ; - nombre de pixels d'une distance verticale => twips. Mais ne brlons pas les tapes. Essayons d'abord de rcuprer les donnes fournies par GetWindowRect. 4.2. Une fonction pour rcuprer les donnes de la position Voici une fonction qui permet de rcuprer, pour un formulaire ouvert dont le nom est donn en paramtre, sa position et ses dimensions exprimes en pixels : FonctionOption Compare Database Option Explicit

Faites l'exprience Ouvrez fOuSuisJe. Enfoncez pour atteindre la fentre d'excution (). Saisissez : ? Forms!fOuSuisJe.hwnd (en franais : afficher la proprit hWnd du formulaire fOuSuisJe) Notez ce numro. Fermez la fentre pour revenir au formulaire. Fermez-le et ouvrez-le nouveau. Retournez la fentre d'excution et rptez la commande. Le numro a chang ! La fonction va nous donner accs quatre nombres : Left, Top, Right et Bottom qui dtermine le rectangle l'cran.

Type Position Droite As Long Bas As Long Largeur As Long Hauteur As Long End Type

Prcisons : Top renseigne la position du premier pixel l'intrieur de la fentre. Par contre, Bottom est en dehors, c'est le pixel qui suit le bord infrieur de la fentre. Si l'un vaut t et l'autre vaut b, alors la hauteur en pixels vaut b t. Pareil, pour Left (dedans) et Right (dehors). Le coin suprieur gauche de notre formulaire a donc comme coordonnes par rapport au coin suprieur gauche de l'cran : droite (Right) : Left ;

Public Function PositionFormPx(NomDuFormulaire As String) As Position Dim rectForm As RECT 'Rcuprer le rectangle de la fentre du formulaire GetWindowRect Forms(NomDuFormulaire).hwnd, rectForm 'Copier les coordonnes du coin sup gauche PositionFormPx.Droite = rectForm.Left PositionFormPx.Bas = rectForm.Top 'Calculer la largeur PositionFormPx.Largeur = rectForm.Right rectForm.Left 'Calculer la hauteur PositionFormPx.Hauteur = rectForm.Bottom rectForm.Top End Function

On commence par dfinir un type de donnes spcifique, qui nous permettra de stocker :

Developpez Magazine est une publication de developpez.com

Numro 37 Dcembre - Janvier 2011/2012 Page 21

- Droite la distance entre le bord gauche de l'cran et le coin suprieur du formulaire ; - Bas la distance entre le bord suprieur de l'cran et le coin suprieur du formulaire ; - Largeur de la fentre du formulaire ;

rectForm.Left 'Calculer la hauteur PositionFormPx.Hauteur = rectForm.Bottom rectForm.Top End Function

Dans Access, pour en savoir plus sur un mot-cl, placez le curseur de la souris l'intrieur du mot et enfoncez la touche : l'aide s'affiche la bonne page. - Hauteur de la fentre du formulaire. Exemple, placez le curseur l'intrieur de Type et enfoncez : la documentation relative l'instruction Toutes ces donnes seront exprimes en pixels s'affiche. Dans la fonction proprement dite, on invoque Si vous utilisez systmatiquement cette technique durant GetWindowRectpour rcuprer les coordonnes des votre apprentissage, vos progrs seront spectaculaires. quatre coins que l'on exploite pour construire les rsultats Ce conseil vaut aussi pour les proprits des objets (tats, formulaires...) : cliquez sur la proprit, elle s'affiche en de la fonction. surbrillance, et enfoncez . Testons tout cela concrtement. Dans la barre des menus, cliquez sur Dbogage et Dans la fentre des objets, cliquez sur Modules et ensuite sur Compiler... . ensuite sur Nouveau . Entre autres, ceci nous permet de vrifier l'absence d'erreur Dans la fentre qui s'ouvre, collez ce code qui correspond de code. la dclaration de GetWindowRect : Sauvegardez en donnant ce module le nom mFonctions (par exemple). Declare Function GetWindowRect Lib "user32" ( _ByVal hwnd As Long, _ lpRect As RECT) As Long Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type

Fermez la fentre de l'diteur VBA. Nous allons maintenant constater que la fonction nous donne le rsultat attendu.

Modifiez le formulaire fOuSuisje comme suit : proprit Fen indpendante => OUI ; code de l'vnement Sur ouverture => Sauvegardez en donnant ce module le nom mAPI (par DoCmd.MoveSize 2835, 3405, 5670, 5100 exemple). Puisque la proprit Fen indpendante est OUI, le Fermez la fentre de l'diteur VBA. formulaire va se positionner par rapport l'cran : 2835 twips du bord gauche ; Dans la fentre des objets, cliquez nouveau sur 3405 twips du bord suprieur ; Modules et ensuite sur Nouveau . avec une largeur de 5670 twips ; avec une hauteur de 5100 twips. Dans la fentre qui s'ouvre, collez le code de notre fonction PositionFormPx : Affichez le formulaire.Type Position Droite As Long Bas As Long Largeur As Long Hauteur As Long End Type

Accdez la fentre d'excution () et saisissez : ? PositionFormPx("fOuSuisJe").Droite => un nombre s'affiche en dessous. Rptez avec

Public Function PositionFormPx(NomDuFormulaire As String) As Position Dim rectForm As RECT 'Rcuprer le rectangle de la fentre du formulaire GetWindowRect Forms(NomDuFormulaire).hwnd, rectForm 'Copier les coordonnes du coin sup gauche PositionFormPx.Droite = rectForm.Left PositionFormPx.Bas = rectForm.Top 'Calculer la largeur PositionFormPx.Largeur = rectForm.Right -

? PositionFormPx("fOuSuisJe").Bas ? PositionFormPx("fOuSuisJe").Largeur ? PositionFormPx("fOuSuisJe").Hauteur Les nombres qui vont s'afficher dpendent de la rsolution de votre cran. Mon cran actuel a une rsolution de 1280 x 1024.

Developpez Magazine est une publication de developpez.com

Numro 37 Dcembre - Janvier 2011/2012 Page 22

J'obtiens respectivement : 189 227 378 340. Cela veut donc dire que, dans mon environnement : une distance horizontale de 1 pixel vaut 15 twips (2835 / 189 = 15 ; 5670 / 378 = 15) ; une distance verticale de 1 pixel vaut 15 twips (3405 / 227 = 15 ; 5100 /340 = 15). De par sa construction, le rapport twips/pixels est un nombre entier. Si la rsolution de votre cran est diffrente de celle que j'utilise (1280 x 1024), vous aurez peut-tre des rapports diffrents, voire mme avec des dcimales ! C'est d aux arrondis. Vous en comprendrez l'origine plus loin dans ce texte, lorsqu'on affectera des nombres premiers aux paramtres de DoCmd.MoveSize pour voir Nos zones de texte n'ont pas de source. Nous allons les ce que cela donne. garnir par programmation. 4.3. Comment dterminer la conversion Pixels => Twips Sauvegardons notre travail : .

Avec quelques API, on pourrait calculer les deux 5.2. Le code pour calculer le nombre de twips par pixel coefficients (horizontal et vertical) de conversion Pixels Comme dit plus haut, lors de l'ouverture du formulaire, vers Twips. nous allons calculer le nombre de twips par pixel horizontal en divisant sa largeur exprime en twips par sa C'est la solution que choisiront les virtuoses, entre autres largeur en pixels. les deux auteurs cits plus haut. Nous allons utiliser une mthode plus artisanale, cela nous permettra de mettre profit ce que nous savons dj faire : nous pouvons localiser un formulaire ouvert l'cran et trouver ses dimensions en nous exprimant en pixels, c'est notre fonction PositionFormPx ; d'autre part, depuis la version Access2000 un formulaire dispose de deux proprits WindowHeight (HauteurFentre) et WindowWidth (LargeurFentre) toutes deux exprimes en twips. Ds lors, si nous affichons notre formulaire et que dans la foule, nous rcuprons : sa largeur avec PositionFormPx(NomDuFormulaire).Largeur ; ainsi que sa hauteur avec PositionFormPx(NomDuFormulaire).Hauteur, toutes deux exprimes en pixels, nous disposerons ainsi de deux longueurs (une horizontale et une verticale) exprimes dans les deux units de mesure... et nous pourrons calculer leur rapport de conversion. Nous traduirons ceci en code dans le paragraphe suivant. 5. Un formulaire talon pour trouver les paramtres de doCmd.MoveSize Nous procderons de mme avec sa hauteur pour dterminer le nombre de twips par pixel vertical. Voici le code pour effectuer ces actions :Me.ZdtNbreTwipspPixelHor = Me.WindowWidth / PositionFormPx(Me.Name).Largeur

En franais : on divise la largeur en twips par la largeur en pixels et on loge le rsultat dans le contrle ZdtNbreTwipspPixelHor. De mme :Me.ZdtNbreTwipspPixelVer = Me.WindowHeight / PositionFormPx(Me.Name).Hauteur

On divise la hauteur en twips par la hauteur en pixels et on loge le rsultat dans le contrle ZdtNbreTwipspPixelVer. Nous allons dclencher l'excution de ce code dans l'vnement Sur ouverture de notre formulaire. Accdez au code actuel : - pour ouvrir l'diteur de code VBA ; - pour afficher l'explorateur de projets ;

Nous allons utiliser tout ceci dans notre formulaire - double-cliquez sur Form_fOuSuisJe ; fOuSuisJe. Vous devriez avoir quelque chose comme ceci l'cran :Ds lors, si nous affichons notre formulaire et que Garnissons-le de quelques tiquettes et zones de texte. dans la foule, nous rcuprons : Pour rester cohrent avec la suite des explications, veuillez baptiser les zones de texte comme indiqu ci-aprs : 5.1. Les contrles du formulaireNumro 37 Dcembre - Janvier 2011/2012 Page 23

Developpez Magazine est une publication de developpez.com

Me.zdtDroitePix = PositionFormPx(Me.Name).Droite Me.zdtBasPix = PositionFormPx(Me.Name).Bas

Et dans zdtDroiteTwi et zdtBasTwi la conversion en twips en multipliant les prcdents par leur coefficient multiplicateur : Remplacez le code actuel par celui-ci :Option Compare Database Option Explicit Me.zdtDroiteTwi = Me.zdtDroitePix * Me.ZdtNbreTwipspPixelHor Me.zdtBasTwi = Me.zdtBasPix * Me.ZdtNbreTwipspPixelVer

Procdons par analogie, pour les largeur et hauteur :Me.zdtLargeurTwi = Me.WindowWidth Me.zdtHauteurTwi = Me.WindowHeight Me.zdtLargeurPix = Me.zdtLargeurTwi / Me.ZdtNbreTwipspPixelHor Me.zdtHauteurPix = Me.zdtHauteurTwi / Me.ZdtNbreTwipspPixelVer

Private Sub Form_Open(Cancel As Integer) 'Calculer le Nbre de twips par Pixel 'Diviser la largeur en Twips (Me.WindowWidth) par la largeur en Pixels (PositionFormPx) Me.ZdtNbreTwipspPixelHor = Me.WindowWidth / PositionFormPx(Me.Name).Largeur 'Diviser la Hauteur en Twips (Me.WindowHeight) par la hauteur en Pixels (PositionFormPx) Me.ZdtNbreTwipspPixelVer = Me.WindowHeight / PositionFormPx(Me.Name).Hauteur End Sub

Pour la zone de texte zdtParam, il suffit de coller les morceaux : La commandeMe.zdtParam = "DoCmd.MoveSize " & Me.zdtDroiteTwi & " , " & Me.zdtBasTwi & " , " _ & Me.zdtLargeurTwi & " , " & Me.zdtHauteurTwi

Pour WindowWidth et WindowHeight, rappelez-vous

Refermez la fentre de l'diteur de code. Fermez le formulaire en le sauvegardant. Ouvrez-le nouveau et vous obtenez quelque chose comme ceci :

Et pour que l'utilisateur puisse rcuprer cette commande dans le presse-papier, on programme les oprations qu'il ferait manuellement : slectionner le texte et copier Commande dans le presse-papierMe.zdtParam.SetFocus 'on slectionne tout le texte Me.zdtParam.SelStart = 0 Me.zdtParam.SelLength = Len(Me.zdtParam.Text) 'on copie dans le presse-papier DoCmd.RunCommand acCmdCopy 'quivalent du raccourci Ctrl-Key-C

5.4. Quand dclencher le processus ? L'ide est que le formulaire affiche ses donnes instantanment quelles que soient la position et les dimensions choisies par l'utilisateur qui le dplace et le redimensionne sa guise. Nous allons faire en sorte que le code se dclenche par exemple toutes les secondes. Affichons les vnement , proprits du formulaire , onglet

fixons 1000 (millisecondes) l'intervalle de minuterie et double-cliquons sur Sur minuterie : 5.3. Le code pour attribuer une valeur chaque zone de texte Compltons l'habillage des autres contrles. Mmorisons dans zdtDroitePix et zdtBasPix les coordonnes en pixels du coin suprieur gauche l'aide des valeurs de notre fonction PositionFormPx :Numro 37 Dcembre - Janvier 2011/2012 Page 24

Developpez Magazine est une publication de developpez.com

Votre presse-papier contient donc la syntaxe de la commande. Un clic sur les ... pour ouvrir l'diteur de VBA, o Fermez fOuSuisJe. nous insrons notre code : vnement sur minuteriePrivate Sub Form_Timer() 'La position du coin sup gauche Me.zdtDroitePix = PositionFormPx(Me.Name).Droite Me.zdtBasPix = PositionFormPx(Me.Name).Bas Me.zdtDroiteTwi = Me.zdtDroitePix * Me.ZdtNbreTwipspPixelHor Me.zdtBasTwi = Me.zdtBasPix * Me.ZdtNbreTwipspPixelVer 'La Largeur et la hauteur Me.zdtLargeurTwi = Me.WindowWidth Me.zdtHauteurTwi = Me.WindowHeight Me.zdtLargeurPix = Me.zdtLargeurTwi / Me.ZdtNbreTwipspPixelHor Me.zdtHauteurPix = Me.zdtHauteurTwi / Me.ZdtNbreTwipspPixelVer Me.zdtParam = "DoCmd.MoveSize " & Me.zdtDroiteTwi & " , " & Me.zdtBasTwi & " , " _ & Me.zdtLargeurTwi & " , " & Me.zdtHauteurTwi 'Commande dans le presse-papier Me.zdtParam.SetFocus 'on slectionne tout le texte Me.zdtParam.SelStart = 0 Me.zdtParam.SelLength = Len(Me.zdtParam.Text) 'on copie dans le presse-papier DoCmd.RunCommand acCmdCopy 'quivalent du raccourci Ctrl-Key-C End Sub

Dans un formulaire indpendant quelconque, dans l'vnement sur ouverture, collez le code qui se trouve dans votre presse-papier (). Ouvrez ce formulaire : il recouvre exactement la fentre des objets. Cqfd. 5.6. Si ce gadget vous intresse Vous pouvez l'importer dans votre base de donnes, par exemple comme ceci : vous affichez cte cte l'cran la base de donnes jointe et la vtre ;

Sauvegardez le formulaire par prcaution. Ouvrez-le, dplacez-le, redimensionnez-le : les donnes s'actualisent. 5.5. La preuve que a marche Faites l'exprience : dans PositionnerFormulaire.mdb vous mettez en surbrillance le module mAPI et avec le bouton gauche de la souris enfonc, vous faites glisser dans la fentre de Positionnez fOuSuisJe de manire telle qu'il recouvre votre application ; exactement la surface de la fentre des objets. vous procdez de mme pour mFonctions et fOuSuisJe... et c'est vous ! 6. Une dernire pour la route... Quand nous avons labor la fonction pour dterminer la conversion Pixels => Twips, j'avais attir votre attentionNumro 37 Dcembre - Janvier 2011/2012 Page 25

Developpez Magazine est une publication de developpez.com

sur le fait qu'Access ne positionne pas ncessairement de 15 les plus proches des paramtres originaux. exactement, droite et en bas, au nombre de twips mentionns dans la commande DoCmd.MoveSize. Chaque 7. Conclusion paramtre est arrondi au plus proche multiple de twips par Ceci est une premire tape. pixel. Un tutoriel suivra dans lequel on mettra en pratique la technique qui vient d'tre expose : positionner un formulaire par rapport un Dans l'vnement Sur ouverture , placez cette contrle d'un autre formulaire ; instruction en tte : rendre deux formulaires solidaires : le dplacement de l'un, entranant le dplacement de DoCmd.MoveSize 2887, 5167, 10267, 8269 l'autre. Quelle que soit la rsolution de votre cran, donc votre nombre de twips par pixel, vous constaterez que le Cela nous permettra d'voquer les proprits WindowLeft fOuSuisJe affich n'a aucun paramtre qui concide avec et WindowTop disponibles seulement partir de ceux de la commande. En effet, 2887, 5167, 10267 et 8269 Access2002 mais nous dcrirons un moyen de pallier leur sont des nombres premiers, ils ne sont donc pas des absence en Access2000. multiples de vos rapports twips/pixels. Vous pouvez tlcharger la base de donnes qui a servi titre d'exemple, avec ma rsolution 1280 x 1024, j'ai en d'exemple : Lien 70. ralit : 2880, 5160, 10260 et 8265 qui sont les multiples Retrouvez l'article de Claude Leloup en ligne : Lien 71. Vido Excel 2010: comparer des listes grce la mise en forme conditionnelle Notre fOUSuisJe nous permet de constater le phnomne.

Vido Excel 2010 : comparer des listes grce la mise en forme conditionnelle

Cette vido illustre la manire de signaler les lments d'une liste non prsents dans une autre. Au dpart d'une liste existante, je vous dtaille les tapes raliser pour crer un outil gnrique de comparaison bas sur une Mise en Forme Conditionnelle (MFC) personnalise.1. Introduction 1.1. Objectifs rsoudre.

On pourrait donc, grce cet exercice, vrifier : la prsence ou l'absence de membres du personnel Cette vido formative poursuit les objectifs suivants : dans une liste de pointage ; illustrer l'utilisation des tableaux 2010 ; la prsence ou l'absence de certains types d'incidents dans une liste de non-conformits matriser la cration d'une mise en forme rencontres ; conditionnelle base sur le rsultat d'une formule ; ... mettre en lumire l'utilit d'une conception La "complexification" de la formule conditionnelle vous professionnelle d'un classeur Excel. permettra de rsoudre divers problmes lis la Ces objectifs seront approchs par la cration de deux comparaison de donnes au sein de listes de donnes. tableaux de donnes, l'un permettant la saisie de donnes dont on veut vrifier la prsence ou l'absence dans un Comme toujours, la bonne conception d'un classeur et l'utilisation d'outils adquats tels qu'illustrs dans la vido, deuxime tableau. tant pour la forme (affichage, multifentre) que le fond L'exemple utilis dans la vido montrera comment mettre (tableaux, formules, fonctions, mise en forme en vidence des articles qui n'ont pas t vendus durant conditionnelle) garantiront une prennit et une volutivit une certaine priode. L'on disposera donc d'une liste de des classeurs. ventes ralises et d'un tableau comparatif dans lequel seront reprises les rfrences d'articles. Les articles de 1.2. Prrequis cette liste qui n'ont pas t vendus seront affichs Matriser les rfrences absolues et relatives (utilisation automatiquement dans un format spcifique grce une du signe $ dans l'adressage d'une rfrence) est le mise en forme conditionnelle personnalise. minimum requis. L'utilisateur mal l'aise avec ces notions gagnera lire mon tutoriel sur le sujet : Lien 72. Dans la vido, j'ai choisi de mettre en vidence les articles non vendus, mais il suffira de modifier l'oprateur de Dans ce tutoriel, nous utiliserons une formule requrant la comparaison pour afficher les articles vendus, voire manipulation de fonctions Excel (ET() et NB.SI()). uniquement ceux qui ont t vendus un certain nombre de Comprendre la cration d'une formule et l'utilisation de fois, etc. fonctions basiques sera videmment utile l'exploitation de cette vido. C'est votre imagination et vos "besoins mtier" qui vous feront adapter l'exemple illustr aux cas que vous devrezNumro 37 Dcembre - Janvier 2011/2012 Page 26

Developpez Magazine est une publication de developpez.com

1.3. Niveau

diffrents outils d'Excel (tableaux, formules, mise en forme conditionnelle) pour mettre en place rapidement des A priori, cette vido s'adresse des personnes ayant des classeurs prennes et professionnels. bases en Excel et voulant progresser. Une matrise globale de ce que peut faire Excel allie Les utilisateurs d'anciennes versions d'Excel (2003 et une conception rigoureuse de vos classeurs vous permettra antrieures) trouveront ici des ides d'utilisation des de raliser des outils performants aptes vous aider dans nouveaux outils disponibles depuis la version 2007. la gestion, et surtout l'analyse, des donnes avec Excel. 1.3.1. Dure Cette vido d'une dure de 14 minutes est dcoupe en huit chapitres techniques, vous donnant ainsi la possibilit de reprendre la vido sur une thmatique que vous souhaitez revoir. 2. La vido Lien 73. 3. Conclusions La vido illustre qu'il n'est gure compliqu de manipuler N'hsitez pas me faire part de vos remarques et suggestions, par rapport la problmatique pose en dbut de tutoriel. Si vous souhaitez un tutoriel vido sur un sujet prcis de l'utilisation d'Excel, vous pouvez bien entendu m'en faire part. Bon travail avec Excel ! Retrouvez l'article de Pierre Fauconnier en ligne : Lien 74.

Developpez Magazine est une publication de developpez.com

Numro 37 Dcembre - Janvier 2011/2012 Page 27

Business IntelligenceLes derniers tutoriels et articlesImport et export des fichiers Microsoft dans l'environnement SAS 9.2 sur Windows 64-bits Identification des problmes et solutions envisageables pour l'import et l'export des fichiers Microsoft Excel ou Access dans l'environnement SAS 9.2 sur Windows 64-bits.1. Introduction Avec l'arrive des OS Windows 64-bits, de nombreux problmes d'importation et d'exportation de fichiers Office sont apparus sur SAS. En effet, lorsque l'on souhaite importer des fichiers Excel ou Access dans les environnements Windows 64-bits (Windows 2008 64-bits, Windows 2008 R2, Windows Vista 64 et Windows 2003 64-bit) ce message est susceptible d'apparatre lorsque l'on utilise un code dvelopp initialement sur les platesformes 32-bits : 2. Accs aux fichiers sur la plate-forme SAS 9.2 64-bits Dans cette premire partie, nous allons nous intresser aux deux modules d'accs aux donnes Office (Excel et Access) prsents dans SAS : le module SAS ACCESS TO PC FILES et le module SAS PC FILE SERVER. Tout d'abord, une prsentation du nouveau module SAS PC FILE SERVER sera donne. Les moteurs inclus dans ce module permettent de grer les accs aux donnes sur les plates-formes UNIX et Windows 64-bits. Import et export des fichiers Microsoft dans l'environnement SAS 9.2 sur Windows 64-bits

ERROR: DBMS type EXCEL (ACCESS) not valid for Ensuite, nous tudierons grce des exemples concrets le import. moteur de connexion des donnes Excel 2003 et 2007, puis sur le mme mode travail, nous prsenterons le Le problme est rcurrent, car la stratgie de la plupart des moteur de connexion des donnes Access 2003 et 2007. socits tant d'installer la version 64-bits de SAS sur des serveurs ou des PC, l'application n'est alors plus Les exemples dtaills de cette partie concerneront tout compatible avec le moteur de connexion DBMS=EXCEL aussi bien l'importation de donnes que l'exportation de qui est un moteur 32-bits. celles-ci, au travers des procdures et du LIBNAME. Si cette stratgie est conserve, il est ncessaire d'utiliser les moteurs de connexion 64-bits tels qu'ils sont dcrits dans les exemples ci-dessous et de connatre les incompatibilits entre les commandes SAS, les moteurs et les types de fichiers Office. Autrement, il est possible d'installer la version 32-bits de SAS sur la plate-forme 64bits et d'utiliser les connecteurs habituels. Ce dossier technique prsente les diffrents changements qui doivent tre pris en compte pour importer et exporter les fichiers Office. Il a t prpar partir du retour d'exprience des missions de conseil ralis par l'auteur chez ses clients et des discussions avec certains experts chez l'diteur et le support. Bien entendu, l'auteur prsente par avance ses excuses si d'autres cas rels n'ont pas t apprhends dans ce dossier alors qu'ils auraient pu aider le lecteur. Les donnes utilises n'ont rien de spcifique ce dossier. L'ensemble des tests a t ralis grce aux tables de la bibliothque SASHELP. Ainsi, les donnes de la table SASHELP.CLASS ont t copies dans un fichier Excel 2003 (nomm D_Excel_2003.xls) puis 2007 (nomm D_Excel_2007.xlsx) et ensuite dans un fichier Access 2003 (nomm D_Access_2003.mdb) et 2007 (nomm D_Access_2007.accdb). 2.1. La nouvelle solution SAS PC FILE SERVER PC FILE SERVER est une application qui gre les requtes de lecture et d'criture de fichiers Office. Elle est fournie en standard pour des plates-formes UNIX et Windows 64-bits dans les dpts SAS.

Elle propose deux moteurs de connexion, EXCELCS et ACCESSCS, permettant de rpondre des besoins prcis que nous verrons plus loin. Installe en tant que service La premire partie de cet article prsente les possibilits partir des plans dans le dpt SAS, elle utilise le Microsoft d'accs aux fichiers en utilisant le client traditionnel de Access Connectivity Engine et les drivers ODBC version SAS sur la plate-forme SAS 9.2 64-bits. 12 pour Microsoft Excel et Microsoft Access. La seconde partie dtaille les erreurs courantes rencontres Par extension, cette application permet d'accder lors de l'utilisation des nouvelles syntaxes fournies galement des SGBD a