20.04.2015 Views

TDF Tech 2009 Support de cours - Source : www.pcsoft-windev ...

TDF Tech 2009 Support de cours - Source : www.pcsoft-windev ...

TDF Tech 2009 Support de cours - Source : www.pcsoft-windev ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

<strong>Support</strong> <strong>de</strong> <strong>cours</strong><br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 1


2 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Le document que vous avez entre les mains n’a<br />

pas la finalité <strong>de</strong> remplacer les documentations<br />

techniques ou commerciales livrées avec WinDev,<br />

WebDev ou WinDev Mobile.<br />

Ce document n’est pas un <strong>cours</strong> d’auto-formation,<br />

mais uniquement un support “papier” à la présentation<br />

technique que vous avez suivie.<br />

Ce document a été réalisé par l’équipe <strong>de</strong> la LST.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 3


Sommaire<br />

<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

Sommaire du support <strong>de</strong> <strong>cours</strong><br />

1<br />

<strong>Support</strong> <strong>de</strong> <strong>cours</strong><br />

4 Sommaire<br />

<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong> Sommaire du support <strong>de</strong> <strong>cours</strong><br />

9 Présentation<br />

10 WinDev<br />

Présentation rapi<strong>de</strong> <strong>de</strong> WinDev et <strong>de</strong> ses fonctionnalités<br />

12<br />

WinDev Mobile<br />

Présentation rapi<strong>de</strong> <strong>de</strong> WinDev Mobile et <strong>de</strong> ses fonctionnalités<br />

14 WebDev<br />

Présentation rapi<strong>de</strong> <strong>de</strong> WebDev et <strong>de</strong> ses fonctionnalités<br />

16<br />

17<br />

18<br />

20<br />

23<br />

24<br />

26<br />

29<br />

PC SOFT à votre service<br />

• Séminaire <strong>de</strong> formation,<br />

• Consulting,<br />

• Assistance Directe,...<br />

Les graphiques<br />

Champs Graphe "donuts"<br />

Utilisation du champ graphe <strong>de</strong> WinDev 14 :<br />

Réalisation d'un graphe "donuts"<br />

Champs graphes Avancés<br />

Utilisation avancée <strong>de</strong>s champs graphes<br />

Gestionnaire <strong>de</strong> sources<br />

Gestionnaire <strong>de</strong> sources<br />

Fonctionnement, historique, différences <strong>de</strong> sources, fusion <strong>de</strong> sources et gestion <strong>de</strong> branches<br />

Sécurité et GDS<br />

Définition <strong>de</strong> droits et d'une politique <strong>de</strong> réintégration dans le Gestionnaire <strong>de</strong> <strong>Source</strong>s<br />

Bases <strong>de</strong> données<br />

30 HyperFileSQL<br />

Comment optimiser les accès à une base <strong>de</strong> données HyperFileSQL<br />

32<br />

HyperFileSQL Full-text<br />

Mise en oeuvre d'in<strong>de</strong>x full-text dans une application <strong>de</strong> gestion <strong>de</strong> contenu<br />

4 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


35 WinDev<br />

36<br />

38<br />

41<br />

42<br />

44<br />

47<br />

48<br />

53<br />

54<br />

Champ Calendrier<br />

Personnalisation du champ calendrier<br />

Champ Table<br />

Utilisation <strong>de</strong> nouveautés du champ table<br />

La réplication<br />

Réplication assistée<br />

Mise en place d'une réplication assistée<br />

Réplication programmée<br />

Mise en place d'une réplication programmée<br />

Mobilité et Base <strong>de</strong> Données<br />

Base <strong>de</strong> données<br />

Applications Mobiles : base <strong>de</strong> données embarquée, distante ou mobile ?<br />

Accès à une base tierce <strong>de</strong>puis un terminal mobile<br />

Debug et Optimisation<br />

Programmation et débogueur<br />

Fonctions <strong>de</strong> mise au point et <strong>de</strong> débogage<br />

56 Analyseurs<br />

Optimisation d'une application grâce au logs et à l'analyseur <strong>de</strong> performances<br />

59<br />

60<br />

62<br />

66<br />

Gestion <strong>de</strong> la qualité<br />

Tests automatiques<br />

Mise en place <strong>de</strong> tests unitaires lors d'un "GO" <strong>de</strong> fenêtre<br />

Centres <strong>de</strong> contrôles<br />

Suivi <strong>de</strong> projet et <strong>de</strong>s inci<strong>de</strong>nts ou suggestions<br />

Erreurs d'ihm<br />

Détecter <strong>de</strong>s problèmes d'IHM non visibles<br />

<strong>Support</strong> <strong>de</strong> <strong>cours</strong><br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 5


Sommaire (SUITE)<br />

<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

Sommaire du support <strong>de</strong> <strong>cours</strong><br />

67 WebDev<br />

68 Référencement<br />

Optimiser le référencement d'un site WebDev<br />

74<br />

Paiement sécurisé<br />

Mise en place d'un système <strong>de</strong> paiement sécurisé<br />

76 Mashup<br />

Mixer <strong>de</strong>s données HyperFileSQL et <strong>de</strong>s données Google<br />

78<br />

81<br />

WebDev PHP<br />

Création et déploiement d'un site PHP<br />

Services Web<br />

82 SOA<br />

Réalisation d'une application "SOA" (Services Oriented Architecture)<br />

84 SAAS<br />

Réalisation d'une application "SAAS" (Software As A Service)<br />

87<br />

Déploiement d’applications<br />

88 Déploiement<br />

Choisir le type <strong>de</strong> déploiement adapté à une application<br />

91<br />

92<br />

93<br />

94<br />

Déploiement WebDev<br />

Personnalisation <strong>de</strong> la page indiquant la mise à jour du serveur<br />

Déploiement mobile<br />

Mise à jour d'une flotte <strong>de</strong> terminaux mobiles<br />

Fonctionnalités spécifiques<br />

Robot <strong>de</strong> surveillance<br />

Configurer la surveillance d'une application critique<br />

96 Databinding<br />

Deux exemples concrets d'utilisation du DataBinding<br />

98<br />

Développement spécifique<br />

Développer une application WinDev pour une utilisation sur Asus EEE-Top<br />

100 Géolocalisation<br />

Géolocaliser une flotte <strong>de</strong> téléphones mobiles<br />

6 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


I<br />

II<br />

IV<br />

Annexes<br />

Annexe A<br />

Quelques comman<strong>de</strong>s du WLangage<br />

Annexe B<br />

Les principales touches <strong>de</strong> raccourci<br />

<strong>Support</strong> <strong>de</strong> <strong>cours</strong><br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 7


Abonnez-vous !<br />

L90119<br />

Tarif modifiable sans préavis<br />

Bulletin d’abonnement à retourner avec<br />

votre règlement à :<br />

PC SOFT<br />

Lettre du <strong>Support</strong> <strong>Tech</strong>nique<br />

BP 44 408<br />

34197 MONTPELLIER Ce<strong>de</strong>x 05<br />

France<br />

En cas <strong>de</strong> paiement par carte bancaire,<br />

vous pouvez nous faxer votre abonnement<br />

au :<br />

+33 (0) 4 67 03 07 87<br />

Vos Nom & Prénom : ...........................................................................<br />

Votre Société : ..................................................................................<br />

Votre Adresse précise : ........................................................................<br />

.....................................................................................................<br />

Co<strong>de</strong> Postal : .............................. Ville : .............................................<br />

Pays : ........................................ Tel : ...............................................<br />

Adresse Email : .................................................................................<br />

Je choisis un abonnement “LST PC SOFT” pour :<br />

FRANCE Métropolitaine<br />

AUTRE (exp. par avion)<br />

□ 1 an - 4 N°+ 4 DVD : 159 euros HT; 190,16 euros TTC<br />

□ 2 ans - 8 N°+ 8 DVD : 279 euros HT ; 333,68 euros TTC<br />

□ 1 an - 4 N°+ 4 DVD : 175 euros HT<br />

□ 2 ans - 8 N°+ 8 DVD : 299 euros HT<br />

À partir du numéro : ..............<br />

Note : une facture acquittée est systématiquement<br />

adressée.<br />

Ci joint mon règlement <strong>de</strong> : ............. Euros TTC<br />

□ Je règle par chèque. J’autorise PC SOFT à débiter sur ma carte VISA/MasterCard<br />

la somme <strong>de</strong> : ..................... Euros<br />

□ Je règle par Carte Bancaire.<br />

Cryptogramme :<br />

□□□<br />

Numéro complet <strong>de</strong> la carte : la carte expire : mois année<br />

□□□□□□□□□□□□□□□□ □□ □□□□<br />

Signature obligatoire du détenteur <strong>de</strong> la carte :<br />

Nom du détenteur <strong>de</strong> la carte :<br />

..........................................................<br />

8 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

Présentation<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 9


WinDev<br />

Présentation rapi<strong>de</strong> <strong>de</strong> WinDev et <strong>de</strong> ses<br />

fonctionnalités<br />

* accès natif optionnel, ** accès natif<br />

inclus.<br />

Les outils<br />

Des outils facilitant le développement<br />

sont également fournis (WDMAP, WDOUTIL,<br />

WDSQL, ...) ainsi que <strong>de</strong> nombreux exemples<br />

et assistants réutilisables.<br />

Des centres <strong>de</strong> contrôle permettent la<br />

gestion du cycle <strong>de</strong> vie <strong>de</strong> vos applications<br />

ainsi que leur administration.<br />

Une ai<strong>de</strong> en ligne vous gui<strong>de</strong> tout au long<br />

du développement <strong>de</strong> votre application.<br />

Cette ai<strong>de</strong> inclut également une ai<strong>de</strong> à la<br />

correction d’erreurs.<br />

Les différents éditeurs seront utilisés,<br />

<strong>de</strong>puis la définition d’une analyse jusqu’à<br />

l’installation, en passant par toutes les<br />

phases du développement (création <strong>de</strong>s<br />

fenêtres, <strong>de</strong>s états, <strong>de</strong>s traitements...),<br />

sans oublier les sauvegar<strong>de</strong>s.<br />

WinDev est un AGL (Atelier <strong>de</strong> Génie<br />

Logiciel).<br />

L’éditeur d’IHM <strong>de</strong><br />

WinDev<br />

WinDev permet <strong>de</strong> développer simplement<br />

tout type d’applications Windows dans les<br />

domaines <strong>de</strong> la gestion, <strong>de</strong> l’industrie, du<br />

médical, etc.<br />

Les applications développées peuvent<br />

inclure l’accès à <strong>de</strong>s bases <strong>de</strong> données.<br />

WinDev propose un puissant moteur <strong>de</strong><br />

base <strong>de</strong> données : HyperFileSQL.<br />

Il est conseillé d’utiliser HyperFileSQL pour<br />

vos applications afin d’obtenir les meilleures<br />

performances dans vos traitements <strong>de</strong><br />

fichiers. Une version HyperFileSQL Client/<br />

Serveur est aussi disponible.<br />

L’environnement <strong>de</strong> développement intégré<br />

<strong>de</strong> WinDev se compose <strong>de</strong> différents<br />

éditeurs :<br />

· Un éditeur <strong>de</strong> projet permettant <strong>de</strong> visualiser<br />

et d’agir sur le graphe du projet.<br />

· Un éditeur d’analyses permettant l’accès à<br />

tout type <strong>de</strong> base <strong>de</strong> données (HyperFileSQL,<br />

HyperFileSQL Client/Serveur, xBase, MySQL,<br />

AS/400*, Oracle*, SQL Server*, Access**,<br />

ODBC, OLE DB, ... )<br />

· Un éditeur UML permettant une modélisation<br />

objet <strong>de</strong> vos données et traitements.<br />

· Un éditeur d’IHM avec correcteur d’interface<br />

en temps réel.<br />

· Un éditeur <strong>de</strong> co<strong>de</strong> évolué (avec assistants,<br />

vérification du co<strong>de</strong> saisi, coloration<br />

syntaxique, ai<strong>de</strong> contextuelle …) incluant<br />

un puissant débogueur.<br />

· Un éditeur <strong>de</strong> requêtes pour les sélections<br />

d’enregistrements dans les fichiers.<br />

· Un éditeur d’états.<br />

· Un éditeur d’ai<strong>de</strong> permettant <strong>de</strong> générer<br />

<strong>de</strong>s fichiers d’ai<strong>de</strong> au format CHM.<br />

· Un éditeur d’installation.<br />

· Un éditeur <strong>de</strong> dossier technique reprenant<br />

intégralement toutes les informations<br />

techniques <strong>de</strong> votre projet.<br />

Les bases <strong>de</strong><br />

données<br />

Le moteur HyperFileSQL sera utilisé pour<br />

les fichiers <strong>de</strong> données <strong>de</strong>s applications.<br />

La base <strong>de</strong> données HyperFileSQL est disponible<br />

en mo<strong>de</strong> Classic ou Client/Serveur<br />

et est librement diffusable avec les applications<br />

WinDev.<br />

L’utilisation d’autres moteurs <strong>de</strong> base <strong>de</strong><br />

données est également possible sur le même<br />

principe.<br />

10 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 11<br />

Présentation


WinDev Mobile<br />

Présentation rapi<strong>de</strong> <strong>de</strong> WinDev Mobile et <strong>de</strong><br />

ses fonctionnalités<br />

• Un éditeur d’installation.<br />

• Un éditeur <strong>de</strong> dossier technique reprenant<br />

intégralement toutes les informations<br />

techniques <strong>de</strong> votre projet.<br />

Des outils facilitant le développement<br />

sont également fournis (WDREGISTRE,<br />

WDCAPTURE, WDSYNCHRO, ...) ainsi<br />

que <strong>de</strong> nombreux exemples et assistants<br />

réutilisables.<br />

Des centres <strong>de</strong> contrôle permettent la<br />

gestion du cycle <strong>de</strong> vie <strong>de</strong> vos applications<br />

ainsi que leur administration.<br />

Une ai<strong>de</strong> en ligne vous gui<strong>de</strong> tout au long<br />

du développement <strong>de</strong> votre application.<br />

Cette ai<strong>de</strong> inclut également une ai<strong>de</strong> à la<br />

correction d’erreurs.<br />

Le moteur HyperFileSQL Mobile sera utilisé<br />

pour les fichiers <strong>de</strong> données <strong>de</strong> l’application.<br />

WinDev Mobile permet <strong>de</strong> développer<br />

simplement tout type d’applications<br />

<strong>de</strong>stinées à être utilisées sur<br />

un Pocket PC, un SmartPhone, et<br />

la plupart <strong>de</strong>s terminaux mobiles<br />

(Symbol, Psion, ...).<br />

Présentation<br />

Les applications développées peuvent<br />

inclure l’accès à <strong>de</strong>s bases <strong>de</strong> données.<br />

WinDev Mobile inclut un puissant moteur <strong>de</strong><br />

base <strong>de</strong> données : HyperFileSQL Mobile.<br />

Il est conseillé d’utiliser HyperFileSQL pour<br />

vos applications afin d’obtenir les meilleures<br />

performances dans vos traitements <strong>de</strong><br />

fichiers. Une version HyperFileSQL Client/<br />

Serveur est aussi disponible.<br />

WinDev Mobile permet également d’accé<strong>de</strong>r<br />

aux bases <strong>de</strong> données CEDB, bases <strong>de</strong><br />

données standards <strong>de</strong>s Pockets PC.<br />

Environnement<br />

L’environnement <strong>de</strong> développement intégré<br />

<strong>de</strong> WinDev Mobile se compose <strong>de</strong> différents<br />

éditeurs :<br />

• Un éditeur <strong>de</strong> projets permettant <strong>de</strong><br />

visualiser et d’agir sur le graphe du projet.<br />

• Un éditeur d’analyses permettant<br />

l’accès à tout type <strong>de</strong> base <strong>de</strong> données<br />

(HyperFileSQL, HyperFileSQL Client/<br />

Serveur).<br />

• Un éditeur UML permettant une modélisation<br />

objet <strong>de</strong> vos données et traitements.<br />

• Un éditeur d’IHM avec correcteur d’interface<br />

en temps réel<br />

• Un éditeur <strong>de</strong> co<strong>de</strong> évolué (avec assistants,<br />

vérification du co<strong>de</strong> saisi, coloration<br />

syntaxique, ai<strong>de</strong> contextuelle) incluant<br />

un puissant débogueur<br />

• Un éditeur <strong>de</strong> requêtes pour les sélections<br />

d’enregistrements dans les fichiers.<br />

• Un éditeur d’états.<br />

L’utilisation d’autres moteurs <strong>de</strong> base <strong>de</strong><br />

données est également possible sur le même<br />

principe.<br />

12 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 13<br />

Présentation


WebDev<br />

Présentation rapi<strong>de</strong> <strong>de</strong> WebDev et <strong>de</strong> ses<br />

fonctionnalités<br />

la définition d’une analyse jusqu’à l’installation,<br />

en passant par toutes les phases<br />

du développement (création <strong>de</strong> pages,<br />

traitements, états, etc.), sans oublier les<br />

sauvegar<strong>de</strong>s.<br />

Les Concepts<br />

Internet<br />

WebDev est un AGL (Atelier <strong>de</strong> Génie<br />

Logiciel) orienté développement <strong>de</strong><br />

sites Intranet et Internet.<br />

WebDev permet <strong>de</strong> développer tout<br />

type <strong>de</strong> sites dynamiques incluant<br />

l’accès à <strong>de</strong>s bases <strong>de</strong> données.<br />

Il permet aussi <strong>de</strong> développer <strong>de</strong>s<br />

sites semi-dynamiques et statiques.<br />

Présentation <strong>de</strong><br />

WebDev<br />

WebDev est composé <strong>de</strong> différents éditeurs<br />

:<br />

• Un éditeur <strong>de</strong> projet permettant <strong>de</strong> visualiser<br />

et d’agir sur le graphe du projet.<br />

• Un éditeur <strong>de</strong> pages.<br />

• Un éditeur d’analyses permettant<br />

l’accès à tout type <strong>de</strong> base <strong>de</strong> données<br />

(HyperFileSQL, HyperFileSQL Client/<br />

Serveur, MySQL, xBase, AS/400*, Oracle*,<br />

SQL Server*, Access**, OLE DB, etc.).<br />

• Un éditeur <strong>de</strong> co<strong>de</strong> évolué (avec assistants,<br />

vérification du co<strong>de</strong> saisi, coloration<br />

syntaxique, ai<strong>de</strong> contextuelle …) incluant<br />

un puissant débogueur.<br />

• Un éditeur <strong>de</strong> styles incluant police,<br />

couleur, position, etc.<br />

• Un éditeur <strong>de</strong> requêtes pour les sélections<br />

d’enregistrements dans les fichiers.<br />

• Un éditeur d’états.<br />

• Un éditeur <strong>de</strong> dossier technique reprenant<br />

intégralement toutes les informations<br />

techniques <strong>de</strong> votre projet.<br />

• Un éditeur d’installation.<br />

* accès natif optionnel, ** accès natif<br />

inclus<br />

L’éditeur d’installation assure la mise en<br />

place <strong>de</strong>s sites créés, ainsi que leur maintenance.<br />

Cet outil permet <strong>de</strong> réaliser une<br />

installation sur le serveur via FTP ou par<br />

média physique (CD, Zip, etc.).<br />

Des outils facilitant le développement<br />

sont également fournis (WDMAP, WDOUTIL,<br />

WDSQL, etc.) ainsi que <strong>de</strong> nombreux exemples<br />

et assistants réutilisables.<br />

Les principaux éditeurs sont utilisés, <strong>de</strong>puis<br />

Les différents services <strong>de</strong> l’Internet<br />

Le terme Internet regroupe plusieurs services<br />

d’utilisation différente :<br />

• FTP (File Transfer Protocol) est un service<br />

permettant <strong>de</strong> transférer <strong>de</strong>s fichiers<br />

d’un ordinateur vers un autre à travers<br />

Internet.<br />

• SMTP (Simple Mail Transfer Protocol)<br />

permet d’envoyer <strong>de</strong>s messages ou mails<br />

à un utilisateur défini. Chaque utilisateur<br />

doit disposer d’une adresse Email qui lui<br />

sert <strong>de</strong> boîte aux lettres.<br />

• HTTP (HyperText Transfer Protocol). HTTP<br />

est un protocole <strong>de</strong> niveau application qui<br />

est utilisé pour le transfert <strong>de</strong> pages sur<br />

Internet.<br />

Chacun <strong>de</strong> ces services nécessite un gestionnaire<br />

<strong>de</strong> services installé sur un serveur :<br />

• Le gestionnaire <strong>de</strong> services FTP gère l’hébergement<br />

<strong>de</strong>s fichiers, les droits d’utilisation<br />

<strong>de</strong>s fichiers et la réponse aux <strong>de</strong>man<strong>de</strong>s<br />

en provenance <strong>de</strong>s autres postes.<br />

• Le gestionnaire <strong>de</strong> services SMTP prend en<br />

charge les <strong>de</strong>man<strong>de</strong>s d’envoi <strong>de</strong> messages et<br />

le routage vers les serveurs POP (réception<br />

<strong>de</strong>s messages) concernés.<br />

• Le gestionnaire Web (<strong>www</strong>) permet<br />

l’hébergement <strong>de</strong>s pages et répond aux<br />

<strong>de</strong>man<strong>de</strong>s <strong>de</strong> consultation <strong>de</strong> la part <strong>de</strong>s<br />

postes client.<br />

Le Web en détail<br />

Les pages Web sont visualisées sur un poste<br />

par l’intermédiaire d’un navigateur Web<br />

(Internet Explorer, FireFox, Opera, etc.).<br />

Le navigateur interprète le contenu <strong>de</strong>s<br />

fichiers au format HTML décrivant les pages.<br />

On parle <strong>de</strong> pages HTML.<br />

WebDev génère automatiquement le co<strong>de</strong><br />

14 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


HTML et JavaScript.<br />

Il est possible d’afficher directement une<br />

page dans un navigateur en tapant son URL<br />

dans la zone adresse du navigateur.<br />

L’URL (Uniform Resource Locator) correspond<br />

au chemin d’accès <strong>de</strong> la page sur le<br />

serveur qui l’héberge, par exemple :<br />

http://<strong>www</strong>.monserveur.com/page3.htm<br />

Si l’URL ne correspond pas à une adresse<br />

vali<strong>de</strong>, une erreur <strong>de</strong> connexion est retournée<br />

dans l’écran du navigateur.<br />

Si l’URL est vali<strong>de</strong>, la page <strong>de</strong>mandée s’affiche<br />

dans le navigateur. L’utilisateur peut<br />

alors déclencher une action en cliquant<br />

sur un lien ou un bouton. La requête correspondante<br />

est alors envoyée au serveur<br />

qui l’analyse.<br />

Le lien permet <strong>de</strong> lancer le chargement<br />

d’une autre page ou bien <strong>de</strong> lancer une<br />

application Web.<br />

Site statique,<br />

semi-dynamique ou<br />

dynamique ?<br />

· Le site statique est composé <strong>de</strong> pages<br />

conçues à l’avance <strong>de</strong> manière définitive.<br />

Dans ce cas, le contenu <strong>de</strong>s pages n’évoluera<br />

pas dynamiquement en fonction d’un<br />

choix <strong>de</strong> l’utilisateur.<br />

• Un site semi-dynamique est un site statique<br />

composé <strong>de</strong> pages conçues à l’avance<br />

mais enrichies par une base <strong>de</strong> données.<br />

Dans ce cas, le contenu <strong>de</strong>s pages n’évoluera<br />

pas dynamiquement en fonction d’un<br />

choix <strong>de</strong> l’utilisateur. L’un <strong>de</strong>s meilleurs<br />

exemples est un catalogue <strong>de</strong> pièces détachées.<br />

• Un site dynamique est constitué <strong>de</strong> pages<br />

enrichies <strong>de</strong> données provenant d’une base<br />

<strong>de</strong> données. Il est nécessaire d’exécuter<br />

<strong>de</strong>s traitements d’accès aux données sur<br />

le serveur permettant <strong>de</strong> constituer la<br />

page.<br />

Fonctionnement<br />

d’une application<br />

WebDev<br />

Une application WebDev hébergée sur un<br />

serveur peut être exécutée en appelant une<br />

URL particulière <strong>de</strong>puis un navigateur. Par<br />

exemple : http://<strong>www</strong>.monserveur.com/<br />

wd140awp/wd140awp.exe/CONNECT/<br />

monappli<br />

Le lanceur <strong>de</strong> WebDev ‘wd140awp.exe’<br />

permet d’exécuter l’application sur le<br />

serveur grâce au serveur d’application<br />

wd140session.exe.<br />

Le serveur d’application construit<br />

dynamiquement la première page <strong>de</strong> l’application<br />

et l’envoie au navigateur par<br />

l’intermédiaire du serveur Web.<br />

Principe <strong>de</strong> programmation<br />

WebDev<br />

Le débit entre le serveur Internet et le poste<br />

client est plus lent qu’avec un réseau local<br />

classique. Les échanges <strong>de</strong> données entre<br />

le poste client et le serveur doivent donc<br />

être réduits pour que l’application puisse<br />

s’exécuter sans ralentissement. WebDev<br />

permet <strong>de</strong> différencier les traitements<br />

exécutés sur le serveur et les traitements<br />

exécutés sur le poste client.<br />

1. Les traitements sur le serveur<br />

Les traitements exécutés sur le serveur sont<br />

les traitements principaux <strong>de</strong> l’application.<br />

Ils concernent la gestion <strong>de</strong> la base <strong>de</strong><br />

données (HyperFileSQL et HyperFileSQL<br />

Client/Serveur, xBase, AS/400, Oracle, SQL<br />

Server, Access, OLE DB, etc.), les traitements<br />

<strong>de</strong> calcul.<br />

Ces traitements sont écrits en<br />

WLangage.<br />

2. Les traitements sur le poste client<br />

Les traitements exécutés sur le poste client<br />

sont les traitements <strong>de</strong> contrôle <strong>de</strong> saisie,<br />

<strong>de</strong> vérification qui ne nécessitent pas d’accé<strong>de</strong>r<br />

au serveur. Ces traitements utilisent<br />

uniquement les informations contenues<br />

dans la page. Ces traitements peuvent être<br />

écrits en JavaScript ou WLangage. Dans ce<br />

<strong>de</strong>rnier cas, WebDev se charge <strong>de</strong> convertir<br />

automatiquement le co<strong>de</strong> WLangage en<br />

JavaScript pour qu’il puisse être exécuté<br />

par le navigateur.<br />

3. Administrateur WebDev<br />

L’administrateur WebDev est un exécutable<br />

installé sur le serveur.<br />

L’administrateur permet <strong>de</strong> configurer<br />

le nombre <strong>de</strong> connexions autorisées en<br />

même temps pour le serveur, par site, par<br />

utilisateur. Il permet aussi <strong>de</strong> fixer le temps<br />

maximum d’exécution d’une requête et<br />

le temps limite pour la déconnexion <strong>de</strong>s<br />

utilisateurs inactifs.<br />

L’administrateur peut à tout moment afficher<br />

la liste <strong>de</strong>s utilisateurs connectés<br />

au site.<br />

Présentation<br />

WebDev permet <strong>de</strong> développer <strong>de</strong>s sites<br />

dynamiques composés <strong>de</strong> pages, <strong>de</strong> traitements<br />

serveur (accès aux bases <strong>de</strong> données,<br />

calculs, etc.) et <strong>de</strong> traitements exécutés<br />

par le navigateur (contrôles, traitements<br />

répétitifs, etc.).<br />

WebDev permet aussi <strong>de</strong> développer <strong>de</strong>s<br />

sites statiques et semi-dynamiques.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 15


PC SOFT à votre service<br />

• Séminaire <strong>de</strong> formation,<br />

• Consulting,<br />

• Assistance Directe,...<br />

N’hésitez pas à nous<br />

contacter: un assistanat<br />

est toujours rentable pour<br />

vos développements.<br />

Profitez <strong>de</strong> l’expérience d’un ingénieur<br />

<strong>de</strong> PC SOFT sur votre site<br />

Un consultant PC SOFT peut être délégué<br />

chez vous, pour une durée <strong>de</strong> 1 à 5 jours.<br />

Un ingénieur PC SOFT connaissant à la<br />

fois votre domaine et les outils que vous<br />

utilisez.<br />

L’ingénieur PC SOFT répond directement<br />

à vos questions, travaille sur votre projet<br />

réel et votre configuration réelle. Vous<br />

obtenez les réponses précises qui vous font<br />

gagner un temps précieux, et vous assurent<br />

<strong>de</strong>s bonnes orientations technologiques et<br />

méthodologiques.<br />

Notre conseil ? Comman<strong>de</strong>z 1 jour <strong>de</strong> consulting<br />

pour 100 jours <strong>de</strong> développement.<br />

Et, chaque année, prenez l’habitu<strong>de</strong> <strong>de</strong><br />

faire venir (juste 2 jours) chez vous un<br />

ingénieur PC SOFT, pour profiter d’une<br />

expertise <strong>de</strong> toutes les nouveautés.<br />

Sur votre projet, dans vos locaux, en votre<br />

présence, l’ingénieur PC SOFT vali<strong>de</strong> l’analyse,<br />

vous montre <strong>de</strong>s nouveautés utiles<br />

dans votre cas <strong>de</strong> figure, vous propose<br />

<strong>de</strong>s optimisations <strong>de</strong> votre co<strong>de</strong>, vali<strong>de</strong><br />

vos mo<strong>de</strong>s d’utilisation, ...<br />

Vous serez ravi <strong>de</strong> l’efficacité <strong>de</strong> son intervention<br />

! Budgétez d’ores et déjà la prochaine<br />

intervention !<br />

Un assistanat vous fait gagner <strong>de</strong>s<br />

journées <strong>de</strong> développement!<br />

Quelques exemples <strong>de</strong> sujets traités :<br />

• Simplification du co<strong>de</strong> et mise en place <strong>de</strong><br />

nouvelles techniques : HyperFileSQL Client/<br />

Serveur, Socket, Web Services, Composants,<br />

Patchs, Configurations, …<br />

• Transformation <strong>de</strong> modules développés<br />

avec WinDev en Services Web.<br />

• Optimisation <strong>de</strong> traitements avant la<br />

recette <strong>de</strong> l’application, validation d’analyse<br />

avant <strong>de</strong> débuter une application.<br />

Formation<br />

Séminaires <strong>de</strong> formation pour<br />

WinDev et WebDev<br />

PC SOFT organise à Paris, chaque semaine,<br />

<strong>de</strong>s séminaires <strong>de</strong> formation à WinDev et<br />

WebDev, <strong>de</strong> différents niveaux : Prise en<br />

main, Perfectionnement, Expert, Client/<br />

Serveur, ...<br />

Ces séminaires, animés par <strong>de</strong>s ingénieurs<br />

PC SOFT expérimentés, permettent <strong>de</strong><br />

découvrir et <strong>de</strong> maîtriser WinDev, WebDev<br />

et WinDev Mobile selon un plan efficace.<br />

Consultez le calendrier <strong>de</strong>s séminaires (le<br />

détail <strong>de</strong>s stages et les contenus pédagogiques<br />

sont disponibles sur notre site<br />

Web : <strong>www</strong>.<strong>pcsoft</strong>.fr), vous trouverez LA<br />

formation adaptée à votre expérience et<br />

à votre besoin.<br />

Suivre une formation organisée par PC SOFT<br />

est toujours rentable : c’est se donner les<br />

moyens <strong>de</strong> maîtriser WinDev et WebDev<br />

dans les meilleurs délais, ou d’en découvrir<br />

la face cachée, encore plus puissante !<br />

Inscrivez-vous vite!<br />

Ces séminaires peuvent également être<br />

organisés dans vos locaux, en France et<br />

à l’étranger.<br />

Le montant <strong>de</strong> ces formations est déductible<br />

du “1,5 % Formation”.<br />

Consulting<br />

Assistance Directe<br />

Un complément efficace du<br />

<strong>Support</strong> <strong>Tech</strong>nique Gratuit<br />

Tout projet important ou stratégique doit<br />

bénéficier d’une “Assistance Directe” !<br />

L’Assistance Directe permet d’une part<br />

<strong>de</strong> bénéficier d’un contact téléphonique<br />

immédiat avec un ingénieur spécialisé, et<br />

d’autre part <strong>de</strong> choisir les sujets à traiter,<br />

et ce pour une durée que vous définissez<br />

vous-même. Cela vous permet <strong>de</strong> résoudre<br />

immédiatement les sujets qui vous posent<br />

problème.<br />

Le contact téléphonique est garanti sous<br />

8 heures ouvrables, ce qui vous permet<br />

une meilleure efficacité.<br />

Ce service est disponible sur abonnement.<br />

Contactez le service commercial pour<br />

plus d’informations (Fabrice CHAMBON<br />

au 04.67.032.032).<br />

16 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

Les graphiques<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 17


Champs Graphe "donuts"<br />

Utilisation du champ graphe <strong>de</strong> WinDev 14 :<br />

Réalisation d'un graphe "donuts"<br />

Type <strong>de</strong> graphe<br />

L'assistant <strong>de</strong> création d'un champ graphe propose<br />

<strong>de</strong> choisir le type <strong>de</strong> graphe à générer :<br />

il est possible <strong>de</strong> réaliser <strong>de</strong>s graphes <strong>de</strong> type<br />

secteurs, donuts, hémicycles, histogrammes,<br />

courbes, aires, radars, boursiers, ...<br />

Il suffit <strong>de</strong> choisir le type "donuts", puis <strong>de</strong><br />

passer au plan suivant.<br />

Paramètres du graphe<br />

Il est ensuite possible <strong>de</strong> modifier les paramètres<br />

généraux du graphe qui sera créé :<br />

• Titre du graphe et sa position (par exemple<br />

"Répartition du chiffre d'affaires par type<br />

<strong>de</strong> séjour"),<br />

• Affichage ou non d'une légen<strong>de</strong> et sa position,<br />

• Apparence générale du graphe.<br />

WinDev propose <strong>de</strong> nouveaux types <strong>de</strong> graphes : les<br />

donuts, les radars, les hémicycles, ...<br />

WinDev met à votre disposition <strong>de</strong> nombreux types <strong>de</strong><br />

graphes, ce qui vous permet <strong>de</strong> toujours représenter<br />

au mieux les données à afficher.<br />

Projet d'illustration<br />

Le projet utilisé pour illustrer ce sujet est "WD Champs" (présent<br />

sur le DVD).<br />

Création d'un graphe "donuts"<br />

Ce sujet présente la création d'un graphe <strong>de</strong> type "donuts" qui<br />

représente la répartition du chiffre d'affaires par type <strong>de</strong> séjour.<br />

Ce graphe se base sur une requête existante <strong>de</strong> l'exemple "WD<br />

Champs" : REQ_CAParTypeDeSéjour.<br />

La création d'un graphe "donuts" s'effectue très simplement, comme<br />

pour tout type <strong>de</strong> graphe, à l'ai<strong>de</strong> <strong>de</strong> l'assistant <strong>de</strong> création <strong>de</strong><br />

graphe. Pour afficher cet assistant, il suffit <strong>de</strong> créer un nouveau<br />

champ <strong>de</strong> type graphe dans une fenêtre :<br />

• soit à partir du menu "Insertion .. Champ .. Graphe",<br />

• soit par le bouton adéquat.<br />

Séries <strong>de</strong> données<br />

Dans un premier temps, il convient <strong>de</strong> définir<br />

la source <strong>de</strong>s étiquettes <strong>de</strong> catégories.<br />

Les étiquettes <strong>de</strong> catégories définissent les<br />

libellés qui seront affichés dans la légen<strong>de</strong><br />

du graphe. Pour ce graphe, les étiquettes <strong>de</strong><br />

catégories correspon<strong>de</strong>nt au type <strong>de</strong> séjour et seront remplies par<br />

une rubrique <strong>de</strong> la requête.<br />

Pour cela, il suffit d'indiquer que :<br />

• la source correspond au "Par<strong>cours</strong> d'un fichier ou d'une<br />

requête".<br />

• les données correspon<strong>de</strong>nt à la rubrique TypeSéjour <strong>de</strong> la requête<br />

REQ_CAParTypeDeSéjour.<br />

Ensuite, il faut indiquer la série <strong>de</strong> données. Les séries <strong>de</strong> données<br />

définissent les valeurs du graphe. Selon le type du graphe, il est<br />

possible <strong>de</strong> définir une ou plusieurs séries :<br />

• pour les graphes <strong>de</strong> type "donuts", hémicycle, secteur : une seule<br />

série <strong>de</strong> données doit être définie.<br />

• pour les autres types <strong>de</strong> graphes, il est possible <strong>de</strong> définir autant<br />

<strong>de</strong> séries que nécessaire.<br />

Pour ce graphe, les données correspon<strong>de</strong>nt au chiffre d'affaires et<br />

seront donc remplies par la rubrique CA <strong>de</strong> la requête.<br />

Pour cela, il suffit <strong>de</strong> :<br />

• ajouter une série en cliquant sur le bouton "+" situé à droite<br />

<strong>de</strong> la table.<br />

• indiquer que la source correspond au "Par<strong>cours</strong> d'un fichier ou<br />

d'une requête".<br />

• indiquer que les données correspon<strong>de</strong>nt à la rubrique CA <strong>de</strong> la<br />

requête REQ_CAParTypeDeSéjour.<br />

18 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Sur les graphes en exécution, les utilisateurs disposent <strong>de</strong><br />

FAA (Fonctionnalités Automatiques <strong>de</strong> l'Application) accessibles<br />

par un simple clic droit sur le graphe.<br />

Il est<br />

possible,<br />

par exemple, <strong>de</strong> modifier :<br />

• le type <strong>de</strong> graphe. Dans notre exemple, il est possible par<br />

exemple d'afficher un graphe <strong>de</strong> type hémicycle ou secteur en<br />

remplacement du "donuts".<br />

• les polices du graphe,<br />

• la légen<strong>de</strong> (visibilité, position),<br />

• le quadrillage,<br />

• la position <strong>de</strong>s axes,<br />

• etc.<br />

Les graphiques<br />

Il suffit enfin <strong>de</strong> donner un nom au champ graphe qui va être créé<br />

et <strong>de</strong> vali<strong>de</strong>r l'assistant. Le graphe est automatiquement ajouté<br />

dans la fenêtre.<br />

Personnalisation du graphe<br />

Bien sûr, le graphe est entièrement personnalisable.<br />

En version 14, il est possible <strong>de</strong> déplacer, directement dans l'éditeur,<br />

la légen<strong>de</strong>, le titre du graphe et le graphe lui-même.<br />

Chaque type <strong>de</strong> graphe dispose <strong>de</strong> paramètres spécifiques qu'il<br />

est possible <strong>de</strong> modifier.<br />

Pour un graphe <strong>de</strong> type donuts par exemple, il est possible <strong>de</strong><br />

modifier :<br />

• la taille du trou.<br />

• l'excentrage <strong>de</strong>s parts du donuts.<br />

Ces paramètres sont accessibles dans la fenêtre <strong>de</strong> <strong>de</strong>scription du<br />

graphe "donuts", onglet "Général".<br />

FAA sur les graphes<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 19


Champs graphes Avancés<br />

Utilisation avancée <strong>de</strong>s champs graphes<br />

Il est ensuite nécessaire <strong>de</strong><br />

paramétrer le mo<strong>de</strong> 9 images<br />

pour l'image indiquée.<br />

Le mo<strong>de</strong> 9 images permet <strong>de</strong><br />

définir la façon dont l'image<br />

va être redimensionnée.<br />

Le principe est simple :<br />

l'image est découpée en 9<br />

zones distinctes. Pour chaque<br />

zone, il suffit <strong>de</strong> choisir<br />

le comportement à adopter<br />

lors du redimensionnement<br />

<strong>de</strong> l'image : la zone peut être<br />

répétée, étirée, laissée tel<br />

qu'elle, rendue invisible.<br />

Dans notre exemple, la tête<br />

du palmier doit rester telle<br />

qu'elle : elle ne doit être ni<br />

répétée, ni étirée. Il suffit<br />

donc <strong>de</strong> la définir comme<br />

marge haute.<br />

Le reste du palmier doit lui<br />

être étiré.<br />

En plus <strong>de</strong> nouveaux types <strong>de</strong> graphes, WinDev propose<br />

également <strong>de</strong>s nouveautés sur <strong>de</strong>s types <strong>de</strong><br />

graphes existants : personnalisation <strong>de</strong>s images d'un<br />

histogramme, zoom sur une courbe, ...<br />

Projet d'illustration<br />

Le projet utilisé pour illustrer ce sujet est "WD Champs" (présent<br />

sur le DVD).<br />

Notre conseil<br />

Pour obtenir une image qui<br />

soit propre, bien détourée, lors <strong>de</strong> l'exécution, il est conseillé<br />

d'utiliser :<br />

• soit une image au format BMP, en indiquant comme couleur <strong>de</strong><br />

transparence la couleur du coin haut gauche.<br />

• soit une image au format PNG, qui inclue directement la transparence<br />

souhaitée.<br />

Personnalisation <strong>de</strong>s images d'un<br />

histogramme<br />

WinDev permet <strong>de</strong> personnaliser les graphes <strong>de</strong> type histogrammes.<br />

Il est possible par exemple <strong>de</strong> remplacer les barres habituelles<br />

par <strong>de</strong>s images différentes.<br />

Pour utiliser une image en guise <strong>de</strong> barre, il suffit <strong>de</strong> :<br />

• ouvrir la fenêtre <strong>de</strong> <strong>de</strong>scription du champ graphe. Cette fenêtre<br />

peut être ouverte soit par le menu contextuel, soit par double-clic<br />

sur le champ graphe, soit par le raccourci "Alt + Entrée",<br />

• afficher l'onglet "Séries",<br />

• saisir le chemin <strong>de</strong> l'image souhaitée dans "images <strong>de</strong>s barres<br />

d'histogrammes".<br />

20 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Les graphiques<br />

Activation du zoom dans un graphe<br />

courbe<br />

L'utilisateur peut maintenant zoomer sur une partie d'un graphe<br />

courbe. Cela permet d'observer <strong>de</strong> façon plus précise les variations<br />

d'une courbe.<br />

Le zoom sur une partie du graphe s'effectue très simplement :<br />

• soit en modifiant les ascenseurs horizontal et vertical pour<br />

réduire la zone d'affichage.<br />

• soit en <strong>de</strong>ssinant un rectangle <strong>de</strong> sélection directement sur le<br />

graphe.<br />

• soit en utilisant une combinaison <strong>de</strong> touche : Ctrl + "+" pour<br />

zoomer, Ctrl + "-" pour dézoomer.<br />

• soit en utilisant la roulette <strong>de</strong> la souris en maintenant le bouton<br />

Ctrl enfoncé.<br />

Graphe dans un Etat<br />

Tous les types <strong>de</strong> graphes disponibles dans les fenêtres sont également<br />

disponibles dans les états.<br />

Pour insérer un champ graphe dans un état, plusieurs choix sont<br />

possibles :<br />

• créer directement un état sur graphe, ou état sur table et<br />

graphe<br />

• insérer un champ graphe par le menu "Insertion .. Nouveau<br />

champ .. Graphe", ou par le bouton adéquat <strong>de</strong> la barre d'outils<br />

contextuelle.<br />

Tout comme les champs graphes d'une fenêtre, les données d'un<br />

graphe dans un état peuvent provenir d'un fichier <strong>de</strong> données,<br />

d'une requête, ou <strong>de</strong> la programmation.<br />

Pour permettre aux utilisateurs <strong>de</strong> zoomer sur une partie du<br />

graphe, il suffit <strong>de</strong> :<br />

• ouvrir la fenêtre <strong>de</strong> <strong>de</strong>scription du graphe, onglet "Détails",<br />

• cocher l'interrupteur "Autoriser le zoom horizontal" et/ou l'interrupteur<br />

"Autoriser le zoom vertical".<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 21


Plus d'informations sur ces sujets ?<br />

En formation<br />

"WinDev Perfectionnement"<br />

Dans WinDev<br />

Exemples didactiques "WD Grapheur Java",<br />

"WD Graphe", "WD Graphe Boursier"<br />

Dans WebDev<br />

Exemples didactiques "WW_WebBourse",<br />

"WW_TraceCourbe", "WW_Camembert"<br />

22 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

Gestionnaire <strong>de</strong> sources<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 23


Gestionnaire <strong>de</strong> sources<br />

Fonctionnement, historique, différences<br />

<strong>de</strong> sources, fusion <strong>de</strong> sources et gestion <strong>de</strong><br />

branches<br />

L'utilisation du GDS (Gestionnaire De <strong>Source</strong>s) offre <strong>de</strong>s<br />

avantages non négligeables pour tout développement<br />

<strong>de</strong> projets WinDev, WebDev ou WinDev Mobile. Et ce,<br />

que le projet soit réalisé par un seul développeur ou<br />

une équipe <strong>de</strong> développement.<br />

Principe <strong>de</strong> fonctionnement<br />

La version <strong>de</strong> référence <strong>de</strong>s projets est située sur un serveur :<br />

c'est la base <strong>de</strong> source. Chaque développeur possè<strong>de</strong> une copie<br />

locale <strong>de</strong>s projets sur lesquels il travaille.<br />

Lorsque le développeur a besoin <strong>de</strong> modifier un élément, il extrait<br />

l'élément, c'est-à-dire qu'il indique à la base <strong>de</strong> source que cet<br />

élément est en <strong>cours</strong> <strong>de</strong> modification.<br />

Le développeur fait ses modifications et lorsqu'il a terminé, il<br />

réintègre l'élément, c’est-à-dire qu'il remet l'élément modifié<br />

dans la base <strong>de</strong> source.Les autres développeurs peuvent alors se<br />

mettre à jour.<br />

Cette fonctionnalité permet aux développeurs <strong>de</strong> voir les différences<br />

<strong>de</strong> sources entre <strong>de</strong>ux versions d'un élément (une fenêtre,<br />

une classe, etc.) et si nécessaire <strong>de</strong> fusionner les co<strong>de</strong>s sources<br />

pour reporter une correction par exemple.<br />

Historique<br />

Pour cela, il suffit d'accé<strong>de</strong>r à l'historique <strong>de</strong> l'élément accessible<br />

via le menu "GDS .. Historique <strong>de</strong> l'élément". Depuis cette fenêtre,<br />

le développeur a accès à toutes les versions <strong>de</strong> l'élément <strong>de</strong>puis sa<br />

création. À côté <strong>de</strong> chaque version se trouve un commentaire. Ces<br />

commentaires, ce sont les commentaires saisis par les développeurs<br />

lors <strong>de</strong> la réintégration <strong>de</strong> l'élément dans le GDS.<br />

Différences et fusion <strong>de</strong> sources<br />

De nombreux outils sont livrés en standard avec le GDS pour<br />

effectuer <strong>de</strong>s opérations avancées. Un <strong>de</strong>s outils indispensables<br />

est la gestion <strong>de</strong>s différences <strong>de</strong> sources.<br />

24 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Note :<br />

Il est possible d'imposer la saisie d'un commentaire en définissant<br />

une "politique <strong>de</strong> réintégration" <strong>de</strong>puis l'explorateur du GDS. Cette<br />

fonctionnalité est décrite plus loin dans cet article.<br />

Récupération et fusion<br />

Depuis l'historique, il est possible <strong>de</strong> récupérer l'élément tel qu'il<br />

était à une date antérieure.<br />

Pour récupérer un élément il y a plusieurs possibilités :<br />

• récupérer tout l'élément. C’est-à-dire l'élément complet (une<br />

fenêtre par exemple).<br />

Pour récupérer l'élément complet, il suffit <strong>de</strong> sélectionner la version<br />

à récupérer et <strong>de</strong> cliquer sur le bouton "Obtenir".<br />

Cette option n'est intéressante que si l'élément n'a pas beaucoup<br />

évolué. En effet, si <strong>de</strong>s évolutions ont été faites, elles sont<br />

écrasées.<br />

• récupérer uniquement le bout <strong>de</strong> co<strong>de</strong> concerné. Il suffit <strong>de</strong><br />

cliquer sur le bouton "Comparer".<br />

Dans ce cas, WinDev calcule les différences entre la version actuelle<br />

<strong>de</strong> l'élément et la version sélectionnée dans l'historique.<br />

Le développeur visualise alors toutes les différences entre les <strong>de</strong>ux<br />

éléments (différences <strong>de</strong> co<strong>de</strong> ou d'interface).<br />

Créer une branche a posteriori<br />

La création d'une branche s'effectue par l'option "Créer une branche"<br />

du menu "GDS .. Branches".<br />

Mais si la branche a été "oubliée", ce n'est pas grave : il n'est<br />

jamais trop tard pour créer une branche, puisqu'il est possible <strong>de</strong><br />

le faire a posteriori via l'historique du projet.<br />

Dans ce cas, il suffit <strong>de</strong> :<br />

• Ouvrir l'historique du projet par le menu "GDS .. Gestion du<br />

projet .. Historique du projet". L'historique du projet permet <strong>de</strong><br />

voir toutes les versions du projet qui ont été réintégrées.<br />

• Sélectionner la version servant pour faire la branche<br />

• Vali<strong>de</strong>r en cliquant sur "Créer une branche".<br />

• Nommer la branche (par exemple "Version Cliente").<br />

• Indiquer le répertoire pour cette branche sur le poste <strong>de</strong> développement.<br />

• Indiquer le répertoire pour cette branche dans la base <strong>de</strong><br />

source.<br />

Gestionnaire <strong>de</strong> sources<br />

Lors d'un clic sur l'icône en forme d'oeil, le développeur visualise<br />

les <strong>de</strong>ux co<strong>de</strong>s en parallèle :<br />

• à gauche le co<strong>de</strong> <strong>de</strong> l'élément actuel,<br />

• à droite le co<strong>de</strong> <strong>de</strong> l'élément dans l'historique.<br />

Il est alors possible <strong>de</strong> récupérer une partie du co<strong>de</strong> grâce aux<br />

flèches situés au niveau <strong>de</strong> chaque différence détectée.<br />

Gestion <strong>de</strong>s branches<br />

Autre fonctionnalité du GDS, la gestion <strong>de</strong>s branches. Une branche<br />

sert à faire évoluer N versions d'un même projet en parallèle.<br />

Par exemple, lorsque vous déployez une version en clientèle, pour<br />

gar<strong>de</strong>r les sources <strong>de</strong> la version déployée au cas où vous <strong>de</strong>vriez<br />

faire <strong>de</strong>s corrections, il est intéressant <strong>de</strong> créer une branche. En<br />

parallèle, sur le tronc commun, les développeurs peuvent continuer<br />

les développements pour la version future.<br />

Mais la gestion <strong>de</strong>s branches permet également <strong>de</strong> gérer <strong>de</strong>s<br />

versions différentes par client.<br />

En effet, l'avantage <strong>de</strong>s branches avec le GDS, c'est que le<br />

développeur bénéficie du report assisté <strong>de</strong>s modifications d'une<br />

branche à une autre.<br />

Cette nouvelle branche peut maintenant évoluer en parallèle<br />

du "tronc commun" ! C’est-à-dire que si <strong>de</strong>s corrections sont<br />

nécessaires dans la version en clientèle, le développeur peut les<br />

effectuer sereinement sur la branche.<br />

Report <strong>de</strong>s évolutions.<br />

Pendant le cycle <strong>de</strong> vie du projet, il restera à récupérer les<br />

corrections et les évolutions développées dans le tronc commun.<br />

Cette opération est réalisée <strong>de</strong>puis le menu "Branches..Récupérer<br />

<strong>de</strong>s modifications <strong>de</strong>puis une branche".<br />

Il est possible <strong>de</strong> récupérer toutes les modifications effectuées<br />

sur un élément ou seulement une partie.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 25


Sécurité et GDS<br />

Définition <strong>de</strong> droits et d'une politique<br />

<strong>de</strong> réintégration dans le Gestionnaire <strong>de</strong><br />

<strong>Source</strong>s<br />

Un gestionnaire <strong>de</strong> sources est un élément sensible :<br />

il contient les sources mais également <strong>de</strong>s comptes,<br />

<strong>de</strong>s mots <strong>de</strong> passe, etc.<br />

Il est donc important que l'accès y soit contrôlé. WinDev<br />

permet <strong>de</strong> sécuriser l'accès aux éléments contenus<br />

dans un projet au travers <strong>de</strong> <strong>de</strong>ux fonctionnalités :<br />

• la gestion <strong>de</strong>s droits.<br />

• la définition <strong>de</strong> politique <strong>de</strong> réintégration.<br />

La gestion <strong>de</strong>s droits<br />

Les droits peuvent se définir sur un répertoire, c’est-à-dire sur un<br />

ou plusieurs projets, ou sur <strong>de</strong>s éléments particuliers : fenêtre,<br />

état, requête, image, etc…<br />

Pour définir les droits sur une base <strong>de</strong> sources, il suffit <strong>de</strong> lancer<br />

l'Administrateur du GDS (disponible <strong>de</strong>puis le menu "GDS" <strong>de</strong><br />

WinDev, WebDev ou WinDev Mobile).<br />

Lors <strong>de</strong> la sélection d'un répertoire <strong>de</strong> l'arborescence du GDS (répertoire<br />

d'un projet ou répertoire autre), il est possible d'accé<strong>de</strong>r à la<br />

gestion <strong>de</strong>s droits pour ce répertoire <strong>de</strong>puis le menu contextuel en<br />

sélectionnant l'option "Propriétés", puis l'onglet "Droits".<br />

En cliquant sur le bouton "Ajouter", il est possible <strong>de</strong> définir les<br />

droits pour ce répertoire et ses sous-répertoires.<br />

Notre Conseil<br />

Pour une sécurité optimale, nous vous conseillons d'utiliser le GDS<br />

en mo<strong>de</strong> Client/Serveur.<br />

Type <strong>de</strong> droits<br />

Les droits sont séparés en trois groupes :<br />

• les droits <strong>de</strong> lecture<br />

• les droits d'écriture<br />

• le droit <strong>de</strong> modifier les droits<br />

Dans les droits d'écriture, un nouveau découpage est disponible<br />

:<br />

• extraire et réintégrer un élément<br />

• ajouter un élément<br />

• renommer un élément<br />

• supprimer un élément<br />

• supprimer définitivement un élément.<br />

La liste <strong>de</strong>s utilisateurs et <strong>de</strong>s groupes d'utilisateurs est automatiquement<br />

gérée par le GDS en fonction <strong>de</strong> son type :<br />

• Pour un GDS utilisant un serveur HyperFileSQL Client/Serveur,<br />

il s'agit <strong>de</strong>s utilisateurs et <strong>de</strong>s groupes d'utilisateurs du serveur<br />

HyperFileSQL.<br />

• Pour un GDS utilisant une base <strong>de</strong> données HyperFileSQL Classic,<br />

il s'agit <strong>de</strong>s utilisateurs et <strong>de</strong>s groupes d'utilisateurs <strong>de</strong>s Centres<br />

<strong>de</strong> Contrôle.<br />

Suppression ou Suppression définitive ?<br />

Lors <strong>de</strong> la suppression d'un élément, le GDS <strong>de</strong>man<strong>de</strong> <strong>de</strong> choisir<br />

entre une suppression et une suppression définitive. En effet, la<br />

suppression "normale" ne fait qu'archiver l'élément.<br />

C’est-à-dire qu'il n'apparaît plus ni dans le projet ni dans le<br />

répertoire du GDS, mais il apparaît encore dans l'onglet “Éléments<br />

supprimés”.<br />

26 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


L'historique <strong>de</strong> l'élément est alors conservé, ce qui permet <strong>de</strong> le<br />

restaurer en cas <strong>de</strong> fausse manipulation.<br />

En revanche, la suppression définitive supprime l'élément et son<br />

historique : l'élément ne pourra pas être restauré et son historique<br />

est perdu. La suppression définitive est donc une opération<br />

spécifique très "dangereuse".<br />

Droits sur un élément<br />

Il est également possible <strong>de</strong> définir <strong>de</strong>s droits spécifiques sur un<br />

élément, une fenêtre par exemple.<br />

Il est ainsi possible <strong>de</strong> donner <strong>de</strong>s droits sur un élément d'un projet<br />

(un élément partagé par exemple), sans pour autant donner<br />

<strong>de</strong>s droits sur un projet complet. Ce type <strong>de</strong> définition <strong>de</strong> droits<br />

peut être notamment utile lors <strong>de</strong> l'intégration <strong>de</strong>s nouveaux<br />

développeurs ou <strong>de</strong> stagiaires.<br />

Pour modifier les droits sur un élément, la définition <strong>de</strong>s droits<br />

s'effectue également <strong>de</strong>puis le menu contextuel en sélectionnant<br />

cette fois l'élément.<br />

Par défaut, un élément hérite <strong>de</strong>s droits du répertoire parent,<br />

mais il est possible <strong>de</strong> définir un droit spécifique à cet élément<br />

en cochant l'option "Droits spécifiques".<br />

La définition <strong>de</strong>s droits se fait alors sur le même principe que la<br />

définition <strong>de</strong>s droits sur un répertoire, les droits "locaux" étant<br />

prioritaires sur les droits <strong>de</strong>s niveaux supérieurs.<br />

Comme pour la définition <strong>de</strong> droits "windows" sur un répertoire,<br />

il est conseillé <strong>de</strong> donner un minimum <strong>de</strong> droits à la racine du<br />

Gestionnaire De <strong>Source</strong> et d'ajouter au cas par cas, les droits en<br />

écriture par groupe d'utilisateurs.<br />

Note : Il est tout à fait possible <strong>de</strong> définir un utilisateur "invité",<br />

membre du groupe "utilisateur du GDS" au niveau du serveur<br />

HyperFileSQL, mais ne disposant que <strong>de</strong> droits en lecture sur<br />

l'ensemble <strong>de</strong>s projets.<br />

Important : Les utilisateurs et les groupes ont <strong>de</strong>s droits sur le<br />

serveur HyperFileSQL lui-même. Il est donc important d'utiliser le<br />

groupe d'utilisateurs "Utilisateurs du GDS" ou <strong>de</strong> limiter les droits<br />

accordés (par exemple, il est inutile et dangereux qu'un utilisateur<br />

du GDS dispose <strong>de</strong> droits pour arrêter le serveur HyperFileSQL).<br />

Politique <strong>de</strong> réintégration<br />

Une politique <strong>de</strong> réintégration est un ensemble <strong>de</strong> règles qui<br />

doivent être respectées pour pouvoir réintégrer un élément dans<br />

le GDS.<br />

Par exemple, il est possible <strong>de</strong> déci<strong>de</strong>r que chaque développeur<br />

doit faire au moins un Go <strong>de</strong> l’élément qu’il a modifié avant <strong>de</strong><br />

le réintégrer dans le GDS.<br />

Une politique <strong>de</strong> réintégration se définit soit :<br />

• dans WinDev par le menu "GDS .. Politique <strong>de</strong> réintégration"<br />

• dans l’administrateur du GDS.<br />

Dans le cas ci-<strong>de</strong>ssus, ce qui a été défini pour ce projet, c’est que<br />

tous les éléments réintégrés ne doivent contenir :<br />

• aucune erreur,<br />

• aucun warning,<br />

• et que le projet ait été lancé au moins 1 fois.<br />

Un peu <strong>de</strong> souplesse...<br />

Il est possible d'utiliser la politique <strong>de</strong> réintégration juste comme<br />

un gar<strong>de</strong>-fou, par exemple pour prévenir le développeur qu’il n’a<br />

pas fait Go, mais sans le bloquer. Dans ce cas, il suffit d'activer la<br />

case "ces règles peuvent être ignorées" .<br />

Cette possibilité doit être utilisée à bon escient car définir une politique<br />

<strong>de</strong> réintégration est un gage <strong>de</strong> qualité <strong>de</strong>s applications.<br />

Notre astuce<br />

Il est possible <strong>de</strong> partager une même politique <strong>de</strong> réintégration<br />

entre plusieurs projets :<br />

• soit en partageant dans le GDS le fichier "PolitiqueDeRéintégration.<br />

gds" .<br />

Ce fichier est situé à la racine du projet dans le GDS.<br />

• soit directement en plaçant ce fichier dans le répertoire parent<br />

<strong>de</strong> vos projets, dans le GDS.<br />

Gestionnaire <strong>de</strong> sources<br />

Dans ce cas, un nouveau projet créé dans ce répertoire héritera<br />

automatiquement <strong>de</strong> cette politique <strong>de</strong> réintégration.<br />

Note :<br />

Pensez à définir <strong>de</strong>s droits sur ce fichier "PolitiqueDeRéintégration.<br />

gds", il ne doit être modifiable que par le chef <strong>de</strong> projet.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 27


Abonnez-vous !<br />

L90119<br />

Tarif modifiable sans préavis<br />

Bulletin d’abonnement à retourner avec<br />

votre règlement à :<br />

PC SOFT<br />

Lettre du <strong>Support</strong> <strong>Tech</strong>nique<br />

BP 44 408<br />

34197 MONTPELLIER Ce<strong>de</strong>x 05<br />

France<br />

En cas <strong>de</strong> paiement par carte bancaire,<br />

vous pouvez nous faxer votre abonnement<br />

au :<br />

+33 (0) 4 67 03 07 87<br />

Vos Nom & Prénom : ...........................................................................<br />

Votre Société : ..................................................................................<br />

Votre Adresse précise : ........................................................................<br />

.....................................................................................................<br />

Co<strong>de</strong> Postal : .............................. Ville : .............................................<br />

Pays : ........................................ Tel : ...............................................<br />

Adresse Email : .................................................................................<br />

Je choisis un abonnement “LST PC SOFT” pour :<br />

FRANCE Métropolitaine<br />

AUTRE (exp. par avion)<br />

□ 1 an - 4 N°+ 4 DVD : 159 euros HT; 190,16 euros TTC<br />

□ 2 ans - 8 N°+ 8 DVD : 279 euros HT ; 333,68 euros TTC<br />

□ 1 an - 4 N°+ 4 DVD : 175 euros HT<br />

□ 2 ans - 8 N°+ 8 DVD : 299 euros HT<br />

À partir du numéro : ..............<br />

Note : une facture acquittée est systématiquement<br />

adressée.<br />

Ci joint mon règlement <strong>de</strong> : ............. Euros TTC<br />

□ Je règle par chèque. J’autorise PC SOFT à débiter sur ma carte VISA/MasterCard<br />

la somme <strong>de</strong> : ..................... Euros<br />

□ Je règle par Carte Bancaire.<br />

Cryptogramme :<br />

□□□<br />

Numéro complet <strong>de</strong> la carte : la carte expire : mois année<br />

□□□□□□□□□□□□□□□□ □□ □□□□<br />

Signature obligatoire du détenteur <strong>de</strong> la carte :<br />

Nom du détenteur <strong>de</strong> la carte :<br />

..........................................................<br />

28 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

Bases <strong>de</strong> données<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 29


hyperfilesql<br />

Comment optimiser les accès à<br />

une base <strong>de</strong> données HyperFileSQL<br />

HyperFileSQL est la base <strong>de</strong> données SQL livrée en<br />

standard avec WinDev, WebDev, et WinDev Mobile.<br />

Cette base est disponible en mo<strong>de</strong> classique et en<br />

mo<strong>de</strong> Client/Serveur.<br />

En version 14, <strong>de</strong>s statistiques avancées sur l'utilisation<br />

<strong>de</strong>s serveurs HyperFileSQL sont disponibles et permettent<br />

d'évaluer les traitements et requêtes à optimiser.<br />

Ce sujet présente les différents moyens d'optimiser les<br />

accès et traitements sur un serveur HyperFileSQL.<br />

Logs et Statistiques<br />

Les statistiques sur l'utilisation <strong>de</strong>s serveurs sont accessibles dans le<br />

Centre <strong>de</strong> Contrôle HyperFileSQL. Il suffit <strong>de</strong> sélectionner la base<br />

<strong>de</strong> données souhaitée et d'accé<strong>de</strong>r à l'onglet "Logs et Statistiques".<br />

Depuis cet onglet, il est possible d'accé<strong>de</strong>r aux logs du serveur et<br />

aux statistiques d'activités.<br />

Logs du serveur<br />

Les logs du serveur contiennent <strong>de</strong>s informations sur les appels<br />

au serveur, c’est-à-dire sur les requêtes envoyées par les applications.<br />

Les logs vont permettre <strong>de</strong> monitorer les applications qui utilisent<br />

un serveur HyperFileSQL. Par exemple, il est possible <strong>de</strong> détecter<br />

<strong>de</strong>s requêtes qui sont exécutées un nombre anormal <strong>de</strong> fois, <strong>de</strong>s<br />

requêtes qui sont longues, ...<br />

Statistiques d'activités<br />

Les statistiques d'activité permettent d'avoir <strong>de</strong>s informations<br />

sur la machine serveur HyperFileSQL. Par exemple la quantité<br />

d'informations envoyée par le réseau, la quantité d'information<br />

lue sur le disque,...<br />

Les statistiques d'activités permettent <strong>de</strong> voir si le serveur est<br />

correctement dimensionné pour supporter les charges qui lui sont<br />

<strong>de</strong>mandées : est-ce que la carte réseau est assez rapi<strong>de</strong>, est-ce<br />

que les disques sont assez rapi<strong>de</strong>s, ...<br />

Activation<br />

L'activation <strong>de</strong>s logs et <strong>de</strong>s statistiques d'activités se paramètre dans<br />

l'onglet "Configuration" du Centre <strong>de</strong> Contrôle HyperFileSQL.<br />

Pour activer les logs, il suffit <strong>de</strong> :<br />

• sélectionner "Logs",<br />

• cocher la case "Activer l'enregistrement <strong>de</strong>s appels au serveur<br />

dans le fichier <strong>de</strong> log". Avec cette option, tous les appels au serveur<br />

sont enregistrés avec la fonction qui a effectué l'appel (par<br />

exemple, un HExécuteRequête ou un HLitRecherche).<br />

Il est également possible d'enregistrer tous les paramètres <strong>de</strong>s<br />

appels pour avoir un log encore plus détaillé. Par exemple,<br />

pour savoir quelle requête a été exécutée, les paramètres <strong>de</strong> la<br />

recherche, ...<br />

Pour activer les statistiques d'activités, il suffit <strong>de</strong> :<br />

• sélectionner "Statistiques d'activités",<br />

• cocher "Activer les statistiques d'activités du serveur".<br />

Remarque :<br />

Pour que les modifications soient prises en compte, il est nécessaire<br />

<strong>de</strong> cliquer sur le bouton "Appliquer".<br />

Une fois les logs d'exécution activés, il est possible d'afficher :<br />

• les requêtes les plus utilisées,<br />

• les requêtes les plus longues,<br />

• les appels <strong>de</strong> fonctions les plus longs,<br />

• les applications les plus consommatrices,<br />

• tous les logs.<br />

Il suffit <strong>de</strong> sélectionner l'information à afficher et la plage <strong>de</strong> date<br />

souhaitée, puis <strong>de</strong> cliquer sur le bouton "Afficher".<br />

Optimisation <strong>de</strong>s requêtes<br />

À l’ai<strong>de</strong> <strong>de</strong>s logs du serveur HyperFileSQL, il est possible <strong>de</strong> détecter<br />

les requêtes qui sont très utilisées et les requêtes qui prennent<br />

du temps. Ces requêtes doivent être optimisées.<br />

Pour optimiser une requête, WinDev dispose <strong>de</strong> l'optimiseur <strong>de</strong><br />

requêtes, accessible via le menu "Projet .. Performances et améliorations<br />

.. Optimiser les requêtes du projet".<br />

30 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


L'optimiseur <strong>de</strong> requêtes permet en quelques clics <strong>de</strong> voir s'il<br />

manque <strong>de</strong>s clés dans les différents fichiers <strong>de</strong> données d'une<br />

base pour optimiser l'exécution <strong>de</strong>s requêtes.<br />

Il suffit <strong>de</strong> sélectionner les requêtes à vérifier, et <strong>de</strong> cliquer sur<br />

le bouton "Lancer l'analyse <strong>de</strong> performance". WinDev affiche<br />

alors les clés à ajouter aux fichiers <strong>de</strong> données pour optimiser<br />

les requêtes.<br />

Si <strong>de</strong>s clés manquantes ont été détectées, il suffit <strong>de</strong> cliquer sur<br />

le bouton "Appliquer toutes les modifications" pour que WinDev<br />

crée automatiquement les clés nécessaires.<br />

Il suffit enfin <strong>de</strong> regénérer l'analyse avec modification automatique<br />

<strong>de</strong>s fichiers.<br />

Remarque :<br />

Lorsqu'une requête est créée, WinDev effectue automatiquement<br />

cette analyse <strong>de</strong> performance. Si une optimisation est possible,<br />

une AAD (Ai<strong>de</strong> Au Développement) sera affichée dans l'éditeur<br />

<strong>de</strong> requêtes.<br />

Optimisation <strong>de</strong>s accès<br />

WinDev, WebDev et WinDev Mobile permettent <strong>de</strong> manipuler <strong>de</strong>s<br />

données HyperFileSQL <strong>de</strong> plusieurs manières :<br />

• par le co<strong>de</strong> WLangage, avec les fonctions Hxxx, les POUR<br />

TOUT, ...<br />

• par <strong>de</strong>s requêtes, qu'elles soient définies sous l'éditeur ou saisies<br />

directement en SQL.<br />

Selon les cas d'utilisation, il est préférable d'utiliser l'une ou<br />

l'autre <strong>de</strong>s manières.<br />

En mo<strong>de</strong> classique avec une base locale ou réseau<br />

:<br />

• Pour une recherche unitaire, par exemple rechercher un enregistrement<br />

précis, il est conseillé d'utiliser les fonctions Hxxx.<br />

• Pour une recherche qui doit récupérer plusieurs enregistrements,<br />

il est possible d'utiliser indifféremment les ordres Hxxx, les POUR<br />

TOUT ou les requêtes.<br />

En mo<strong>de</strong> Client/Serveur :<br />

• Pour une recherche unitaire, il est conseillé d'utiliser les fonctions<br />

Hxxx.<br />

• Pour une recherche multiple, il est conseillé <strong>de</strong> privilégier les<br />

requêtes.<br />

En effet, en mo<strong>de</strong> Client/Serveur, c'est le transit <strong>de</strong>s informations<br />

sur le réseau qui prend du temps.<br />

Avec l'utilisation <strong>de</strong>s requêtes, seul un aller-retour sur le réseau<br />

est effectué : l'envoi <strong>de</strong> la requête à exécuter et la récupération<br />

<strong>de</strong>s résultats.<br />

Les requêtes présentent également l'avantage <strong>de</strong> remplacer <strong>de</strong><br />

nombreuses lignes <strong>de</strong> co<strong>de</strong>. Par exemple, une simple requête<br />

permet <strong>de</strong> remplacer <strong>de</strong>ux boucles imbriquées; le co<strong>de</strong> sera plus<br />

lisible et plus rapi<strong>de</strong>.<br />

Utilisation <strong>de</strong> procédures stockées<br />

Les procédures stockées sont <strong>de</strong>s procédures écrites en WLangage<br />

qui s'exécutent directement sur le serveur <strong>de</strong> base <strong>de</strong> données. Ces<br />

procédures permettent d'optimiser la vitesse <strong>de</strong> traitements. En<br />

effet, comme tous les accès à la base <strong>de</strong> données sont effectués<br />

<strong>de</strong>puis le serveur, aucune information ne transite par le réseau.<br />

Les procédures stockées sont particulièrement adaptées aux<br />

traitements qui ne nécessitent pas l'intervention <strong>de</strong> l'utilisateur,<br />

par exemple <strong>de</strong>s traitements statistiques.<br />

Création <strong>de</strong> procédures stockées<br />

Pour créer une procédure stockée, il suffit <strong>de</strong> faire un clic-droit<br />

dans le treeview <strong>de</strong> l'analyse et <strong>de</strong> choisir l'option "Nouvelle collection<br />

<strong>de</strong> procédure".<br />

Pour créer une nouvelle procédure dans cette collection, il suffit<br />

<strong>de</strong> faire clic droit, option "nouvelle procédure".<br />

Les procédures stockées sont codées en WLangage, dans l'éditeur<br />

<strong>de</strong> co<strong>de</strong> <strong>de</strong> WinDev.<br />

Remarque :<br />

• Si <strong>de</strong>s requêtes sont utilisées dans <strong>de</strong>s procédures stockées, il<br />

est nécessaire <strong>de</strong> les ajouter à l'analyse en tant que "Requêtes<br />

stockées".<br />

• Les contextes (variables globales, contexte HyperFileSQL) ne<br />

sont pas partagés entre l'application et les procédures stockées.<br />

Une procédure stockée n'a pas la moindre information sur le projet<br />

et inversement.<br />

Déploiement <strong>de</strong>s procédures stockées<br />

Pour mettre <strong>de</strong>s procédures stockées sur le serveur, il est possible<br />

:<br />

• soit <strong>de</strong> lancer la modification automatique. En effet, la mise<br />

à jour auto ne fait pas QUE mettre à jour les fichiers. Elle met<br />

également à jour les contraintes d'intégrité, les procédures et<br />

les requêtes stockées.<br />

• soit <strong>de</strong> ne mettre à jour que les procédures stockées. Pour cela,<br />

il suffit <strong>de</strong> faire un clic droit dans le treeview <strong>de</strong> l'analyse, et <strong>de</strong><br />

choisir "Mettre à jour les éléments stockés".<br />

Remarque :<br />

Pour appeler une procédure stockée <strong>de</strong>puis un projet, il suffit<br />

d'utiliser la fonction HExécuteProcédure, avec en paramètre :<br />

• le nom <strong>de</strong> la connexion vers le serveur qui doit exécuter la<br />

procédure,<br />

• le nom <strong>de</strong> la procédure à exécuter,<br />

• les paramètres à passer à la procédure stockée.<br />

Compression <strong>de</strong> trames<br />

En mo<strong>de</strong> Client/Serveur, le transfert réseau prend du temps.<br />

HyperFileSQL Client/Serveur dispose <strong>de</strong> la compression <strong>de</strong> trames :<br />

les paquets <strong>de</strong> données qui circulent entre les applications et le<br />

serveur sont compressés. Le volume <strong>de</strong> données qui transite est<br />

donc moins important et les données circulent plus rapi<strong>de</strong>ment.<br />

Pour activer la compression <strong>de</strong>s trames, il suffit <strong>de</strong> :<br />

• utiliser la propriété ..Compression sur la connexion en<br />

WLangage.<br />

• cocher la case "Compresser les données" dans la <strong>de</strong>scription <strong>de</strong><br />

la connexion <strong>de</strong> l'analyse.<br />

Remarque :<br />

Cette compression <strong>de</strong> trames n'est à utiliser que sur <strong>de</strong>s réseaux<br />

lents : Internet, GPRS, ... Sur un réseau très rapi<strong>de</strong>, le temps passé<br />

à compresser et à décompresser les trames peut être plus important<br />

que le temps <strong>de</strong> transfert <strong>de</strong> la trame non compressée.<br />

Bases <strong>de</strong> données<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 31


HyperFileSql Full-text<br />

Mise en œuvre d'in<strong>de</strong>x full-text dans une<br />

application <strong>de</strong> gestion <strong>de</strong> contenu<br />

La recherche full-text <strong>de</strong> HyperFileSQL permet <strong>de</strong> rechercher<br />

un mot ou une expression contenue dans <strong>de</strong>s<br />

rubriques <strong>de</strong> type texte ou mémo.<br />

Il est ainsi possible <strong>de</strong> mettre en place rapi<strong>de</strong>ment un<br />

"moteur <strong>de</strong> recherche" dans une application WinDev,<br />

WebDev ou WinDev Mobile.<br />

Pour bénéficier <strong>de</strong> cette fonctionnalité, le serveur<br />

HyperFileSQL doit être en version 14.<br />

Cette fonctionnalité est disponible sur les bases <strong>de</strong><br />

données Classic ou Client/Serveur.<br />

Définition d'un in<strong>de</strong>x full-text<br />

Dans l'analyse du projet se trouve un fichier "Document". Ce fichier<br />

contient plusieurs rubriques :<br />

• l'utilisateur qui a créé ce document,<br />

• la date <strong>de</strong> création,<br />

• le format du document,<br />

• le document en lui même (contenu binaire),<br />

• le contenu du document au format texte.<br />

Pour in<strong>de</strong>xer complètement le contenu, et obtenir <strong>de</strong>s résultats<br />

complets, un in<strong>de</strong>x full-text a été défini. Cet in<strong>de</strong>x est basé sur<br />

le titre, le contenu au format texte et le nom du fichier.<br />

Pour créer un in<strong>de</strong>x full-text, il suffit <strong>de</strong> :<br />

• cliquer sur le bouton "Créer un In<strong>de</strong>x Full-text" dans la fenêtre<br />

<strong>de</strong> <strong>de</strong>scription d'un fichier.<br />

• choisir les rubriques qui vont composer cet in<strong>de</strong>x full-text.<br />

Ensuite, il est possible <strong>de</strong> spécifier différentes options d'in<strong>de</strong>xation<br />

:<br />

• la taille minimale <strong>de</strong>s mots qui doivent être in<strong>de</strong>xés,<br />

• la gestion <strong>de</strong>s balises RTF,<br />

• la gestion <strong>de</strong>s balises HTML,<br />

• la gestion <strong>de</strong> la casse et <strong>de</strong> l'accentuation.<br />

Cet in<strong>de</strong>x full-text est automatiquement rempli par HyperFileSQL au<br />

moment <strong>de</strong> l'ajout ou <strong>de</strong> la modification d'un enregistrement.<br />

Projet d'illustration<br />

Le projet utilisé pour illustrer ce sujet est "WD GestionContenu"<br />

(présent sur le DVD). Ce projet est une application <strong>de</strong> gestion <strong>de</strong><br />

contenu : elle permet <strong>de</strong> stocker le contenu <strong>de</strong> documents électroniques<br />

(PDF, Emails, etc.). Le contenu <strong>de</strong> chaque document est<br />

in<strong>de</strong>xé pour ensuite être recherché très simplement.<br />

Ce projet exploite le composant "Extraction", détaillée dans la<br />

LST 75. Ce composant permet d'extraire le contenu texte <strong>de</strong><br />

fichiers classiques (PDF, DocX, XLSX, etc.). Reportez-vous à cette<br />

LST pour plus <strong>de</strong> détail sur le fonctionnement et l'utilisation <strong>de</strong><br />

ce composant.<br />

32 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Recherche par in<strong>de</strong>x full-text<br />

Pour rechercher <strong>de</strong>s enregistrements dans la base <strong>de</strong> données à<br />

partir d'un in<strong>de</strong>x full-text, il suffit d'utiliser une requête. Dans<br />

l'exemple, il s'agit <strong>de</strong> la requête REQ_RECHERCHEDOCUMENT_<br />

FULLTEXT.<br />

Dans la <strong>de</strong>scription <strong>de</strong> la requête, il suffit d'ajouter la rubrique in<strong>de</strong>x<br />

full-text qui a été définie dans l'analyse. Il suffit alors d'indiquer<br />

la valeur <strong>de</strong> recherche, soit une valeur fixe, soit un paramètre<br />

<strong>de</strong> requête. Il est enfin possible <strong>de</strong> trier les résultats par ordre<br />

<strong>de</strong> pertinence. En effet, pour chaque enregistrement trouvé, la<br />

recherche associe un indice <strong>de</strong> pertinence<br />

Il suffit <strong>de</strong> lui donner en paramètre :<br />

• le nom du fichier<br />

• les pages que l'on souhaite extraire<br />

• le mot <strong>de</strong> passe d'ouverture du PDF si besoin.<br />

Pour les autres documents, l'exemple "WD GestionContenu"<br />

utilise un composant livré dans la LST 75 : le composant<br />

"ExtractionTexte".<br />

Ce composant permet d'extraire le texte brut <strong>de</strong>s fichiers DOCX,<br />

OpenOffice Writer, Word, PDF, ...<br />

Bases <strong>de</strong> données<br />

Ensuite, pour effectuer la recherche, il suffit d'exécuter la requête<br />

comme n'importe quelle autre requête.<br />

In<strong>de</strong>xation <strong>de</strong> document.<br />

HyperFileSQL gère automatiquement l'in<strong>de</strong>xation <strong>de</strong>s textes HTML<br />

et RTF, sans in<strong>de</strong>xer les balises.<br />

Pour le format PDF, WinDev dispose en standard <strong>de</strong> la fonction<br />

PDFVersTexte qui permet <strong>de</strong> convertir un fichier PDF en texte<br />

brut.<br />

// Récupération du contenu texte<br />

// d'un fichier PDF<br />

sTexte = PDFVersTexte(…<br />

"C:\Mes documents\MonFichier.pdf")<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 33


Plus d'informations sur ces sujets ?<br />

En formation<br />

"HyperFileSQL Client/Serveur"<br />

Dans la LST 75<br />

p18-19 : Comment le Faire ? Configuration<br />

avancée d'un serveur HyperFileSQL<br />

p12-13 : In<strong>de</strong>xation full-text et composant<br />

"ExtractionTexte"<br />

34 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

WinDev<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 35


CHAMP Calendrier<br />

Personnalisation du champ calendrier<br />

Le calendrier peut également être activé<br />

par programmation avec la propriété<br />

BoutonCalendrier du WLangage.<br />

// Active le bouton calendrier<br />

du champ<br />

SAI_SaisieDate..<br />

BoutonCalendrier = Vrai<br />

Utilisation <strong>de</strong> la<br />

FAA du champ<br />

date<br />

Si le développeur n'a pas pensé à activer<br />

le calendrier sur un champ date, l'utilisateur<br />

peut le faire lui-même. Il suffit,<br />

lorsque l'application est en exécution,<br />

<strong>de</strong> faire un clic droit sur le champ date<br />

et <strong>de</strong> choisir l'option "Calendrier". Cette<br />

fonctionnalité est une <strong>de</strong>s nouvelles<br />

FAA, Fonctionnalité Automatique <strong>de</strong>s<br />

Applications.<br />

La version 14 propose un nouveau type <strong>de</strong> champ<br />

avancé : le champ "Calendrier".<br />

Ce champ est disponible pour WinDev 14, WebDev 14<br />

et WinDev Mobile 14.<br />

Ce sujet présente la mise en place et la personnalisation<br />

d'un calendrier.<br />

Projet d'illustration<br />

Le projet utilisé pour illustrer ce sujet est "WD Champs" (présent<br />

sur le DVD).<br />

Activation du calendrier sur un<br />

champ date<br />

Le calendrier peut être mis en place très simplement sur un champ<br />

<strong>de</strong> type date existant.<br />

Pour activer le calendrier, il suffit <strong>de</strong> cocher l'option "Afficher un<br />

bouton calendrier" dans la <strong>de</strong>scription du champ.<br />

L'utilisateur peut alors sélectionner la date directement dans<br />

le calendrier, par simple clic sur le bouton situé à droite du<br />

champ.<br />

Personnalisation du champ<br />

Calendrier<br />

La personnalisation d'un champ calendrier est simple et s'effectue<br />

comme pour n'importe quel autre champ <strong>de</strong> WinDev : il suffit <strong>de</strong><br />

paramétrer <strong>de</strong>s styles.<br />

Pour personnaliser un calendrier, il suffit <strong>de</strong> cliquer sur le bouton<br />

"Editer le calendrier" dans la fenêtre <strong>de</strong> <strong>de</strong>scription du champ<br />

date souhaité.<br />

Onglet "Détail"<br />

Dans l'onglet "Détail", il est possible <strong>de</strong> paramétrer :<br />

• le premier jour <strong>de</strong> la semaine (par défaut, il s'agit du lundi).<br />

• le format d'affichage du mois. Ce format peut évi<strong>de</strong>mment être<br />

défini pour chaque langue du projet.<br />

• la visibilité et le libellé du bouton "Aujourd'hui".<br />

Onglet "Style"<br />

L'onglet "Style" permet <strong>de</strong> personnaliser le style à proprement<br />

parlé du calendrier : couleurs, images, polices, etc.<br />

La gestion du style d’un calendrier est un peu particulière puisqu’elle<br />

est basée sur le principe d’héritage et <strong>de</strong> surcharge.<br />

36 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


WinDev<br />

Cela signifie que la définition d'un style pour un<br />

élément donné est prioritaire sur le style défini<br />

par défaut.<br />

Pour définir le style global du calendrier, il suffit<br />

<strong>de</strong> modifier les différents styles présents <strong>de</strong> la<br />

fenêtre en modifiant du style par défaut à l'aperçu<br />

final, dans cet ordre.<br />

Par exemple, pour personnaliser le calendrier<br />

avec un fond bleu, le samedi et dimanche en gris<br />

et le jour sélectionné en gras, cela se déroule<br />

en 3 étapes.<br />

Il convient d'abord d'appliquer le fond bleu au<br />

calendrier. Il suffit pour cela <strong>de</strong> :<br />

• sélectionner le "Style par défaut".<br />

• choisir une couleur <strong>de</strong> fond; par exemple pour un fond bleu<br />

clair : D7E7FF.<br />

• choisir la couleur "Transparent" pour les lignes paires et impaires.<br />

Ensuite, pour griser les jours du week-end, il suffit <strong>de</strong> :<br />

• sélectionner le style "Samedi".<br />

• choisir une couleur <strong>de</strong> fond et <strong>de</strong> police <strong>de</strong> couleur grise ("Gris<br />

clair" par exemple).<br />

• appliquer les mêmes couleurs au style "Dimanche".<br />

Enfin, pour mettre en évi<strong>de</strong>nce le jour sélectionné, il suffit <strong>de</strong> :<br />

• sélectionner le style "Sélection".<br />

• indiquer que la police est grasse.<br />

Évi<strong>de</strong>mment, une fois le style défini, il est possible <strong>de</strong> l'enregistrer<br />

pour le réutiliser dans les autres calendriers <strong>de</strong> l'application.<br />

Pour enregistrer le style du calendrier, il suffit <strong>de</strong> cliquer sur le<br />

bouton "Ajouter" <strong>de</strong> l'option "Ajouter ce style au projet".<br />

Manipulation d'un champ<br />

calendrier<br />

Il est également possible <strong>de</strong> créer un champ calendrier directement<br />

dans la fenêtre, indépendamment d’un champ date.<br />

Ce champ calendrier peut également être personnalisé sur le même<br />

principe qu'un calendrier associé à un champ date.<br />

Par exemple, il est possible <strong>de</strong> modifier la bulle d'ai<strong>de</strong> affichée<br />

au survol d'un jour donné :<br />

// Affiche une bulle personnalisée<br />

// pour le 2 mai <strong>2009</strong><br />

CAL_MonCalendrier["<strong>2009</strong>0502"]..Bulle = …<br />

"Anniversaire <strong>de</strong> Melle Cokilyne"<br />

Le champ calendrier dispose <strong>de</strong> différents événements (pco<strong>de</strong>)<br />

pour lesquels un traitement spécifique peut être défini :<br />

• affichage d'un mois,<br />

• sélection d'un jour,<br />

• clic sur le bouton aujourd'hui.<br />

Le WLangage dispose également <strong>de</strong>s familles <strong>de</strong> fonctions<br />

CalendrierXXX et JoursFériéXXX pour manipuler un calendrier<br />

par programmation :<br />

• CalendrierOuvre, CalendrierSelectPlus, etc.<br />

• JourFériéAjoute, JourFériéSupprimeTout, etc.<br />

// Ajoute le jour <strong>de</strong> Pâques comme férié<br />

JourFériéAjoute(jfJourDePâques)<br />

// Ajoute le 16 Mars comme jour férié<br />

JourFériéAjoute("1603")<br />

Les différentes options du calendrier peuvent être paramétrées<br />

par programmation.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 37


Champ Table<br />

Utilisation <strong>de</strong> nouveautés du champ table<br />

<strong>de</strong> la barre d'outils, soit par le menu<br />

"Insertion .. Champ .. Table".<br />

Si la table doit afficher <strong>de</strong>s enregistrements<br />

(table fichier), il est nécessaire<br />

<strong>de</strong> paramétrer cette table comme étant<br />

une table <strong>de</strong> type "fichier mémoire".<br />

En effet, pour que WinDev puisse organiser<br />

les enregistrements selon les<br />

ruptures, les données doivent être<br />

en mémoire.<br />

Rappel sur les tables fichiers<br />

mémoires<br />

Une table fichier mémoire permet <strong>de</strong><br />

bénéficier <strong>de</strong> :<br />

• tous les avantages <strong>de</strong>s tables mémoires<br />

: le tri sur toutes les colonnes, la<br />

recherche avec la loupe, ...<br />

• tous les avantages <strong>de</strong>s tables<br />

fichiers : la modification en casca<strong>de</strong><br />

par exemple.<br />

En version 14, le champ table offre <strong>de</strong> nouvelles possibilités<br />

: ruptures, colonne conteneur, ...<br />

Ces fonctionnalités ajoutent encore plus à l'ergonomie<br />

et donc au confort <strong>de</strong> l'utilisateur.<br />

Ce sujet présente la mise en place <strong>de</strong> rupture et <strong>de</strong><br />

conteneur sur un champ table.<br />

Projet d'illustration<br />

Le projet utilisé pour illustrer ce sujet est "WD Champs" (présent<br />

sur le DVD).<br />

Création d'une table avec rupture<br />

Une rupture permet <strong>de</strong> regrouper <strong>de</strong>s données qui possè<strong>de</strong>nt<br />

un ou plusieurs éléments communs. Par exemple, il est possible<br />

<strong>de</strong> regrouper les clients par pays et par ville ou <strong>de</strong>s comman<strong>de</strong>s<br />

par date.<br />

Les ruptures sont disponibles sur les champs tables, les champs<br />

zones répétées et les états.<br />

Pour créer une table contenant une ou plusieurs ruptures, il suffit<br />

simplement <strong>de</strong> créer une table, soit par le bouton "Champ Table"<br />

Pour utiliser une table fichier mémoire,<br />

il suffit <strong>de</strong> :<br />

• spécifier "Fichier chargé en<br />

mémoire"<br />

• renseigner un nombre maximum d'enregistrement affiché. En<br />

effet, si le fichier contient 10 millions d'enregistrements, tous<br />

ne pourront pas être affichés. Il est conseillé <strong>de</strong> filtrer les enregistrements<br />

qui vont être affichés, dans un souci <strong>de</strong> confort pour<br />

l'utilisateur final.<br />

Définition d'une rupture<br />

La définition d'une rupture sur table est effectuée dans la <strong>de</strong>scription<br />

<strong>de</strong> la table, dans l'onglet "Contenu".<br />

Il suffit <strong>de</strong> cliquer sur le bouton "Éditer les ruptures" : la fenêtre <strong>de</strong><br />

gestion <strong>de</strong>s ruptures s'affiche. Dans cette fenêtre est affiché :<br />

• la liste <strong>de</strong>s ruptures possibles. Cette liste correspond aux différentes<br />

ruptures considérées comme vali<strong>de</strong>s.<br />

• la liste <strong>de</strong>s ruptures définies pour la table.<br />

Pour ajouter une rupture à la table, il suffit :<br />

• soit <strong>de</strong> double cliquer sur la rupture voulue dans la liste <strong>de</strong>s<br />

ruptures possibles.<br />

• soit <strong>de</strong> sélectionner la rupture voulue et <strong>de</strong> cliquer sur le bouton<br />

"Ajouter une rupture".<br />

38 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Pour supprimer une rupture, il suffit :<br />

• soit <strong>de</strong> double cliquer sur la rupture dans la liste <strong>de</strong>s ruptures<br />

définies.<br />

• soit <strong>de</strong> sélectionner la rupture à supprimer et <strong>de</strong> cliquer sur le<br />

bouton "Supprimer la rupture sélectionnée".<br />

Remarque :<br />

Il est important <strong>de</strong> ne jamais supprimer une colonne qui est source<br />

d'une rupture. Si la colonne ne doit pas être affichée, il suffit <strong>de</strong><br />

la rendre invisible.<br />

Personnalisation d'une rupture<br />

Par défaut, les utilisateurs peuvent enrouler/dérouler les ruptures.<br />

Cette fonctionnalité peut être désactivée.<br />

Pour désactiver le bouton enroulé/déroulé, il suffit <strong>de</strong> décocher<br />

l'option "Ruptures avec bouton enroulé/déroulé" dans la <strong>de</strong>scription<br />

<strong>de</strong> la table (onglet "Détails").<br />

Il est possible d'ajouter une image <strong>de</strong> fond à la rupture, pour<br />

la mettre plus en avant par rapport aux lignes <strong>de</strong> la table. Pour<br />

cela il suffit <strong>de</strong> :<br />

• ouvrir la fenêtre <strong>de</strong> <strong>de</strong>scription <strong>de</strong> la rupture, onglet "Style".<br />

• choisir une image comme cadre pour la rupture.<br />

De la même manière, il est possible <strong>de</strong> personnaliser le bas <strong>de</strong><br />

rupture.<br />

Pour ajouter <strong>de</strong>s champs dans une colonne conteneur, il suffit<br />

simplement <strong>de</strong> faire un Drag and Drop d'un champ <strong>de</strong>puis la barre<br />

d'outils ou <strong>de</strong> rubriques <strong>de</strong>puis le treeview <strong>de</strong> l'analyse. Une fois<br />

les champs ajoutés dans la colonne conteneur, il est possible <strong>de</strong><br />

définir un champ principal <strong>de</strong> ce conteneur. C'est sur ce champ<br />

que seront effectuées les recherches, les tris, les filtres, ....<br />

FAA sur les tables<br />

Sur les champs tables (avec ou sans ruptures), les utilisateurs<br />

bénéficient <strong>de</strong>s FAA (Fonctionnalités Automatiques <strong>de</strong> l'Application).<br />

Les utilisateurs peuvent :<br />

• ajouter <strong>de</strong>s calculs <strong>de</strong> somme, <strong>de</strong> moyenne,etc. sur les colonnes<br />

<strong>de</strong> table.<br />

• générer un graphe sur les données.<br />

• exporter les données vers Word, XML, Open Office, Excel.<br />

• effectuer <strong>de</strong>s tris, sur une ou plusieurs colonnes.<br />

• rechercher <strong>de</strong>s éléments.<br />

• choisir les colonnes à afficher.<br />

• mettre en place <strong>de</strong>s filtres.<br />

WinDev<br />

Si une rupture permet <strong>de</strong> regrouper <strong>de</strong>s éléments, il peut être<br />

judicieux d'afficher le critère <strong>de</strong> regroupement au sein même <strong>de</strong><br />

la rupture, par exemple en utilisant un champ libellé.<br />

Pour que ce champ affiche automatiquement le critère <strong>de</strong> la<br />

rupture à chaque itération <strong>de</strong> la rupture, il suffit <strong>de</strong> le lier à la<br />

rubrique qui définit la rupture.<br />

Enrouler / Dérouler par programmation<br />

Si l'utilisateur peut enrouler et dérouler les ruptures grâce au<br />

bouton <strong>de</strong> la rupture, il est également possible d'effectuer ces<br />

opérations par programmation.<br />

Il suffit d'utiliser les fonctions WLangage TableEnroule/<br />

TableEnrouleTout et TableDéroule/TableDérouleTout<br />

// Enroule toutes les ruptures<br />

TableEnrouleTout(TABLE_SEJOURS)<br />

// Enroule la première ligne <strong>de</strong> rupture<br />

TableEnroule(TABLE_SEJOURS, 1)<br />

Colonne <strong>de</strong> type Conteneur<br />

Une colonne <strong>de</strong> type conteneur permet d'inclure, dans une seule et<br />

même colonne, différents champs <strong>de</strong> différents types. Il est ainsi<br />

possible <strong>de</strong> regrouper dans une seule colonne <strong>de</strong>s informations qui<br />

auraient été affichées dans plusieurs colonnes. La lisibilité s'en<br />

retrouve ainsi améliorée.<br />

La création d'une colonne Conteneur s'effectue exactement <strong>de</strong><br />

la même façon que pour une colonne d'un autre type : il suffit<br />

simplement d'indiquer Conteneur en type.<br />

Notre astuce<br />

Par défaut, la loupe <strong>de</strong> recherche présente dans les colonnes <strong>de</strong><br />

table effectue une recherche <strong>de</strong> type "Commence par".<br />

Il est possible <strong>de</strong> spécifier que la loupe doit faire une recherche<br />

<strong>de</strong> type "Contient". Il suffit pour cela d'utiliser la propriété<br />

..Mo<strong>de</strong>Loupe sur la colonne <strong>de</strong> table et d'affecter la constante<br />

filtreContient.<br />

// Définit une recherche <strong>de</strong> type "contient"<br />

TABLE_SEJOURS.COL_Titre..Mo<strong>de</strong>Loupe = …<br />

filtreContient<br />

Remarque :<br />

Tous les types <strong>de</strong> recherche peuvent ainsi être définis par défaut :<br />

filtreCommencePar, filtreTerminePar, filtreContient, filtre-<br />

NeContientPas, etc.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 39


Plus d'informations sur ces sujets ?<br />

En formation<br />

"WinDev Perfectionnement"<br />

Dans WinDev<br />

Exemple didactique "WD Tables Ruptures"<br />

Exemple complet "CRM"<br />

Dans WebDev<br />

Exemple complet "Rewali"<br />

40 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

La réplication<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 41


Réplication assistée<br />

Mise en place d'une réplication assistée<br />

Que ce soit entre un matériel noma<strong>de</strong> avec base<br />

embarquée et une base <strong>de</strong> données au siège,<br />

que l’on veuille répliquer 2 bases HyperFileSQL<br />

ou une base HyperFileSQL avec un autre type<br />

<strong>de</strong> base, il est conseillé d’utiliser la réplication<br />

universelle assistée.<br />

Réplication universelle<br />

assistée<br />

Cette réplication s’effectue via l’éditeur <strong>de</strong> réplication<br />

<strong>de</strong> WinDev. Cet outil est accessible par le<br />

menu "Outils .. Gestionnaire <strong>de</strong> réplication ..<br />

RéplicEdit".<br />

La réplication permet <strong>de</strong> synchroniser plusieurs bases<br />

<strong>de</strong> données qui évoluent en parallèle.<br />

Ces bases doivent bien sûr avoir <strong>de</strong>s structures i<strong>de</strong>ntiques.<br />

WinDev vous permet <strong>de</strong> réaliser facilement <strong>de</strong>s réplications<br />

entre plusieurs bases <strong>de</strong> données.<br />

Exemple associé<br />

Pour tester les différentes manipulations décrites dans ce sujet,<br />

il est possible d'utiliser le projet "CRM" livré en standard avec<br />

WinDev, ou tout autre projet contenant une analyse.<br />

Métho<strong>de</strong>s <strong>de</strong> réplications<br />

Pour définir une réplication avec WinDev, il est possible <strong>de</strong> :<br />

• définir la réplication par programmation avec les fonctions<br />

WLangage ReplicaXXX.<br />

• définir la réplication via l’éditeur <strong>de</strong> réplication <strong>de</strong> WinDev.<br />

Ces 2 types <strong>de</strong> réplication sont <strong>de</strong>s réplications "universelles", ou<br />

"hétérogènes".<br />

C'est-à-dire que la réplication peut s’effectuer entre <strong>de</strong>s bases<br />

HyperFileSQL ou entre <strong>de</strong>s bases HyperFileSQL et <strong>de</strong>s bases tierces :<br />

Oracle, SQL Server, ...<br />

Description <strong>de</strong> la réplication<br />

L'éditeur <strong>de</strong> réplication est pour l'instant vierge,<br />

il faut commencer par créer une nouvelle réplication,<br />

c'est-à-dire indiquer les caractéristiques<br />

<strong>de</strong> la réplication :<br />

• Un nom pour la réplication, par exemple<br />

"Réplication CRM".<br />

• Une <strong>de</strong>scription (facultative).<br />

• L'analyse du projet contenant les fichiers <strong>de</strong> la base <strong>de</strong> données<br />

à répliquer.<br />

• Les options <strong>de</strong> la réplication.<br />

Options <strong>de</strong> la réplication<br />

Il existe <strong>de</strong> nombreux mo<strong>de</strong>s <strong>de</strong> réplication, les options <strong>de</strong> réplication<br />

permettent <strong>de</strong> définir rapi<strong>de</strong>ment celui concerné :<br />

• La réplication est-elle mono-directionnelle (donc une extraction<br />

en lecture <strong>de</strong> la base) ou bi-directionnelle (les modifications sur<br />

le réplica seront reportées dans la base maître) ?<br />

• Comment sont gérés les conflits <strong>de</strong> réplication ? Par défaut,<br />

c'est la modification la plus récente qui est prioritaire, mais il est<br />

possible <strong>de</strong> vouloir un fonctionnement différent.<br />

Fichiers à répliquer<br />

Une fois les options <strong>de</strong> réplication définies, il faut définir les<br />

fichiers à répliquer. Les fichiers peuvent être en HyperFileSQL,<br />

Oracle, MySQL, SQL Server, AS 400, Progress, …<br />

Pour chaque fichier répliqué (par le bouton "Ajouter"), il est<br />

possible d'indiquer si le fichier doit être répliqué entièrement<br />

ou partiellement.<br />

Prenons par exemple, un fichier "Client". Il peut ne pas être nécessaire<br />

d'avoir l'ensemble <strong>de</strong>s clients sur une base répliquée, notamment<br />

s'il s'agit d'une base locale pour un collaborateur itinérant. Il<br />

42 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


La réplication<br />

est alors possible <strong>de</strong> filtrer les enregistrements du fichier "Client"<br />

à répliquer. Par exemple les clients d'un département donné.<br />

Pour définir un filtre, il faut utiliser l'option "Filtrer les enregistrements"<br />

et définir à l'ai<strong>de</strong> <strong>de</strong> l'assistant les conditions <strong>de</strong> sélection<br />

du filtre. Pour reprendre l'exemple <strong>de</strong>s clients d'un département,<br />

le filtre sera alors <strong>de</strong> la forme "Co<strong>de</strong>_Postal commence par '34'".<br />

Note : il est possible d'indiquer les conditions du filtre <strong>de</strong> façon<br />

paramétrée en ne spécifiant pas une valeur mais un paramètre<br />

grâce au bouton "Nouveau paramètre".<br />

Fichiers reliés<br />

Une fois les différents fichiers à répliquer sélectionnés, la liste <strong>de</strong>s<br />

fichiers apparaît dans la table principale <strong>de</strong> l'éditeur <strong>de</strong> réplication<br />

avec une marque "répliqué" (c'est le cas du fichier "Client" dans<br />

notre exemple).<br />

Mais d'autres fichiers sont également apparus, comme le fichier<br />

"Comman<strong>de</strong>" toujours dans notre exemple.<br />

En fait, tous les fichiers reliés aux fichiers sélectionnés dans la<br />

liste <strong>de</strong>s fichiers à répliquer sont apparus.<br />

Et tous les fichiers reliés sont alors marqués en "non répliqués"<br />

(l'icone <strong>de</strong> réplication est en gris).<br />

Bien entendu, pour que l'application fonctionne sur la base répliquée,<br />

certains <strong>de</strong> ces fichiers sont nécessaires : avoir le fichier<br />

"Client" sans les comman<strong>de</strong>s associées peut ne pas être utile ...<br />

Dans ce cas, il est possible d'inclure les fichiers liés dans la réplication<br />

grâce au menu contextuel (clic droit) par l'option "Inclure<br />

dans la réplication".<br />

Et automatiquement l’assistant <strong>de</strong> réplication ne récupérera que<br />

les comman<strong>de</strong>s <strong>de</strong>s clients sélectionnés dans la réplication. Il est<br />

alors possible <strong>de</strong> définir <strong>de</strong>s filtres supplémentaires, pour n'avoir<br />

qu'une partie <strong>de</strong>s comman<strong>de</strong>s du client (par exemple les comman<strong>de</strong>s<br />

<strong>de</strong> l'année en <strong>cours</strong>). Le filtrage s'effectue <strong>de</strong> la même façon que<br />

pour le fichier "Client".<br />

Et ainsi <strong>de</strong> suite<br />

Une fois le fichier "Comman<strong>de</strong>" ajouté à la réplication, le fichier<br />

"LignesC<strong>de</strong>" apparaît automatiquement.<br />

De même, il est alors possible <strong>de</strong> répliquer les lignes <strong>de</strong> comman<strong>de</strong>s<br />

reliées aux comman<strong>de</strong>s.<br />

etc, etc.<br />

Notre astuce<br />

Lors <strong>de</strong> la <strong>de</strong>scription <strong>de</strong> la réplication, il est possible <strong>de</strong> définir<br />

le sens <strong>de</strong> la réplication et la gestion <strong>de</strong>s conflits au niveau global<br />

pour toute la réplication. Il est possible <strong>de</strong> le gérer plus finement<br />

au niveau <strong>de</strong> chaque fichier à répliquer.<br />

Pour cela, il suffit <strong>de</strong> faire clic droit sur le fichier, dans l'option<br />

"Propriétés".<br />

Notre astuce<br />

Il est possible <strong>de</strong> définir pour chaque fichier s’il y a <strong>de</strong>s rubriques<br />

ne <strong>de</strong>vant pas être répliquées. Ce paramétrage s'effectue dans<br />

l'onglet "Rubriques".<br />

Sauvegar<strong>de</strong> <strong>de</strong> la <strong>de</strong>scription<br />

Une fois la <strong>de</strong>scription <strong>de</strong> la réplication terminée, il suffit <strong>de</strong> la<br />

sauvegar<strong>de</strong>r.<br />

L’éditeur <strong>de</strong> réplication génère alors un fichier ".wer" qui contient<br />

la <strong>de</strong>scription <strong>de</strong> la réplication.<br />

Bien sûr à tout moment, il est possible <strong>de</strong> revenir dans cet éditeur<br />

pour consulter ou modifier la <strong>de</strong>scription d'une réplication.<br />

Lancement d'une réplication<br />

Pour exécuter une réplication générée par l'éditeur <strong>de</strong> réplication<br />

:<br />

• soit les utilisateurs lancent eux-mêmes la réplication via l’outil<br />

"Réplic Synchro". Cet outil est librement redistribuable avec les<br />

applications.<br />

• soit l'application possè<strong>de</strong> une option, un bouton, ..., qui permet<br />

<strong>de</strong> déclencher la réplication. Il suffit pour cela d’utiliser les<br />

fonctions WLangage RéplicInitialise et RéplicSynchronise.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 43


Réplication programmée<br />

Mise en place d'une réplication programmée<br />

Pour gérer une réplication <strong>de</strong> façon plus minutieuse,<br />

par exemple, pour gérer les cas <strong>de</strong> conflit particuliers,<br />

gérer le sens <strong>de</strong> votre réplication au niveau <strong>de</strong>s<br />

rubriques <strong>de</strong>s fichiers, ..., il est possible <strong>de</strong> définir une<br />

réplication par programmation sans passer par l’éditeur<br />

<strong>de</strong> réplication.<br />

Principe <strong>de</strong> la réplication par<br />

programmation<br />

Prenons par exemple le cas d’une réplication entre le siège d’une<br />

société et ses agences distantes. Cette réplication permet d’éviter<br />

une connexion en temps réel entre les <strong>de</strong>ux sites.<br />

La base <strong>de</strong> données <strong>de</strong> référence, appelée "Réplica Maître", se<br />

trouve par exemple au siège <strong>de</strong> la société, à San Francisco.<br />

Les bases <strong>de</strong> données secondaires, ou bases distantes, appelées<br />

"Réplica abonné" se trouvent dans <strong>de</strong>s agences à travers le mon<strong>de</strong> :<br />

Paris, Nice, New Delhi, Sydney, ...<br />

Lors <strong>de</strong> chaque modification d’un enregistrement (ajout, suppression,<br />

modification, etc.), HyperFileSQL horodate automatiquement<br />

l’enregistrement dans la base, à l’heure GMT.<br />

Ensuite, lors <strong>de</strong> la <strong>de</strong>man<strong>de</strong> <strong>de</strong> réplication et grâce à cet horodatage<br />

automatique, WinDev va simplement créer un fichier d’extraction,<br />

le réplica transportable. Ce réplica contient tous les enregistrements<br />

qui ont été modifiés <strong>de</strong>puis la <strong>de</strong>rnière réplication.<br />

Ce fichier est alors ensuite envoyé aux abonnés pour mettre à<br />

jour leur base <strong>de</strong> données.<br />

Mise en place d'une réplication<br />

programmée<br />

Côté maître<br />

La mise en place <strong>de</strong> la réplication est l'étape qui définit les rôles<br />

<strong>de</strong> chaque base : maître ou abonnée. La mise en place ne doit<br />

être effectuée qu'une seule et unique fois.<br />

Pour mettre en place la réplication, il suffit <strong>de</strong> :<br />

• indiquer à la base <strong>de</strong> données maître qu'elle va être répliquée<br />

avec la fonction HGèreRéplication.<br />

// Gestion <strong>de</strong> la réplication hétérogène<br />

HGèreRéplication(rplRéplicationHétérogène)<br />

• spécifier à la base <strong>de</strong> données maître qu'elle est maître, par la<br />

fonction HCréeRéplicaMaitre. Cette fonction attend en paramètre<br />

le répertoire dans lequel sera créé le fichier réplica maître<br />

.RPM.<br />

44 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


La réplication<br />

// Création du réplica Maître<br />

HCréeRéplicaMaître(gsRepRéplicaMaître)<br />

• inscrire chaque abonné auprès du maître par la fonction<br />

HCréeRéplicaAbonné. Cette fonction permet <strong>de</strong> créer le fichier<br />

réplica abonné .RPL. Cette fonction définit également un i<strong>de</strong>ntifiant<br />

pour l'abonné, les fichiers à répliquer et la rubrique d'horodatage.<br />

// Inscription <strong>de</strong> l'abonné auprès du maître<br />

HCréeRéplicaAbonné(gsRepRéplicaMaître,"",…<br />

"BASEPARIS",0,"CLIENT"+TAB+"IDDATEHEURE")<br />

L’inscription d’un abonné peut se faire à tout moment, mais il ne<br />

faut bien sûr inscrire un même abonné qu’une seule fois.<br />

Remarque :<br />

Si la base n’est pas une base HyperFileSQL, il est nécessaire<br />

d'ajouter à la main la rubrique d'horodatage dans l’analyse et<br />

dans les fichiers <strong>de</strong> données.<br />

L’avantage d’utiliser HyperFileSQL est que cet horodatage est<br />

géré automatiquement.<br />

• mettre à jour les abonnés à partir <strong>de</strong> la base maître, par la<br />

fonction HCréeRéplicaTransportable. Cette fonction va créer<br />

un fichier réplica transportable .RPA. Il suffit <strong>de</strong> lui indiquer le<br />

répertoire du réplica maître et l'i<strong>de</strong>ntifiant <strong>de</strong> l'abonné.<br />

<strong>de</strong> passer en paramètre le nom d’une procédure callback. Cette<br />

procédure permet <strong>de</strong> gérer par programmation les cas <strong>de</strong> conflits,<br />

filtrer les enregistrements à ne pas répliquer par exemple.<br />

C’est le principal intérêt <strong>de</strong> cette métho<strong>de</strong> <strong>de</strong> réplication par<br />

programmation.<br />

// Création du réplica Transportable<br />

HCréeRéplicaTransportable(gsRepRéplicaMaître,…<br />

"BASEPARIS","")<br />

Côté abonné<br />

Il est nécessaire <strong>de</strong> récupérer :<br />

• le fichier RPL, le réplica abonné. Ce fichier ne doit jamais être<br />

supprimé.<br />

• le fichier RPA , le réplica transportable. Il s'agit du fichier qui<br />

sera reçu à chaque fois qu'une réplication doit être effectuée.<br />

Synchronisation <strong>de</strong>s données<br />

Pour synchroniser <strong>de</strong>s données à partir d'un réplica transportable<br />

(.RPA), il suffit d'utiliser la fonction HSynchroniseRéplica. Cette<br />

fonction attend en paramètre :<br />

• le nom du fichier RPA<br />

• le nom du fichier RPL<br />

• le sens <strong>de</strong> la réplication.<br />

// Synchronise les données reçues du maître<br />

HSynchroniseRéplica("To_BASEPARIS_001.RPA",…<br />

fRepExe()+["\"]+"Replica_BASEPARIS.RPL",…<br />

rplVersAbonné)<br />

Remarque :<br />

La secon<strong>de</strong> syntaxe <strong>de</strong> la fonction HSynchroniseRéplica permet<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 45


Plus d'informations sur ces sujets ?<br />

En formation<br />

"WinDev Avancé"<br />

Dans la LST 74 (p22-23)<br />

Exemple "WD Réplication Universelle"<br />

Dans WinDev<br />

Exemples didactiques "WD Réplica Maître" et<br />

"WD Réplica Abonné"<br />

46 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

Mobilité et Base <strong>de</strong> Données<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 47


Base <strong>de</strong> données<br />

Applications Mobiles : base <strong>de</strong> données<br />

embarquée, distante ou mobile ?<br />

Lors du développement d'une application mobile, la<br />

question du stockage <strong>de</strong> données est une question<br />

récurrente.<br />

Ce sujet met en avant les avantages et inconvénients<br />

<strong>de</strong>s <strong>de</strong>ux solutions principales :<br />

• embarquer les données sur le terminal mobile.<br />

• accé<strong>de</strong>r à distance aux données sur le serveur <strong>de</strong><br />

l'entreprise.<br />

Avec WinDev Mobile, il est possible <strong>de</strong> :<br />

• utiliser une base HyperFileSQL Mobile embarquée sur le terminal<br />

mobile.<br />

• manipuler les données d'une base tierce mobile grâce aux accès<br />

natifs : Oracle Lite, SQLServerCE,etc.<br />

• accé<strong>de</strong>r à une base HyperFileSQL Client/Serveur du serveur <strong>de</strong><br />

l'entreprise.<br />

• accé<strong>de</strong>r à une base tierce sur le serveur <strong>de</strong> l'entreprise : Oracle,<br />

Informix, SQL Server, AS/400, etc.<br />

Données embarquées sur le mobile<br />

Les avantages<br />

Le fait d'embarquer les données sur le terminal mobile propose<br />

plusieurs avantages :<br />

• la performance : il n'y a pas <strong>de</strong> communication distante, donc<br />

aucun temps <strong>de</strong> transfert.<br />

• la disponibilité <strong>de</strong> la base : les données sont toujours accessibles,<br />

que le mobile dispose ou pas d'une connexion.<br />

Les inconvénients<br />

• Il est nécessaire <strong>de</strong> gérer la synchronisation entre les données<br />

du mobile et celle <strong>de</strong> l’entreprise.<br />

Cette synchronisation peut s’effectuer lorsque le mobile est posé sur<br />

son socle et connecté au PC via ActiveSync ou alors à distance grâce<br />

à l’éditeur <strong>de</strong> réplication détaillé dans ce support <strong>de</strong> <strong>cours</strong>.<br />

Pour synchroniser <strong>de</strong>s fichiers HyperFileSQL via ActiveSync, il<br />

suffit d'utiliser l'outil "WDSynchro", accessible via le menu "Outils<br />

.. WDSynchro" <strong>de</strong> WinDev Mobile. Il suffit <strong>de</strong> :<br />

• indiquer le nom <strong>de</strong> l'application.<br />

• indiquer l'emplacement du fichier d'analyse (.WDD) sur le PC<br />

et sur le Pocket PC.<br />

• préciser les fichiers qui doivent être synchronisés et l'ordre <strong>de</strong><br />

leur synchronisation.<br />

• indiquer l'emplacement <strong>de</strong>s fichiers <strong>de</strong> données sur le PC et<br />

sur le Pocket PC.<br />

• En cas <strong>de</strong> perte ou <strong>de</strong> vol du terminal mobile, la confi<strong>de</strong>ntialité<br />

<strong>de</strong>s données doit être protégée. Pour ce point, HyperFileSQL<br />

permet <strong>de</strong> crypter les fichiers <strong>de</strong> données soit <strong>de</strong>puis l'éditeur<br />

d'analyse via l'onglet "Détails" <strong>de</strong> la <strong>de</strong>scription d'un fichier, soit<br />

par programmation avec la propriété ..Cryptage.<br />

48 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Mobilité et Base <strong>de</strong> Données<br />

Accès à distance <strong>de</strong>puis le<br />

mobile aux données centrales <strong>de</strong><br />

l'entreprise<br />

L’accès distant s’effectue à travers une liaison <strong>de</strong> type Wifi ou<br />

3G par exemple.<br />

Les avantages<br />

• Les données manipulées sur les terminaux mobiles sont toujours<br />

à jour puisque les terminaux accè<strong>de</strong>nt en temps réel à la base centrale.<br />

Il n'est donc pas nécessaire <strong>de</strong> gérer <strong>de</strong> synchronisation.<br />

• Les données sont sur le serveur, elles ne peuvent donc être ni<br />

volées ni perdues avec le terminal mobile. Un simple système<br />

d'i<strong>de</strong>ntification ("login-mot <strong>de</strong> passe") dans l’application est alors<br />

suffisant.<br />

Les inconvénients<br />

• Les déconnexions intempestives liées aux micro-coupures <strong>de</strong><br />

réseau peuvent être pénalisantes. Pour palier ce problème, WinDev<br />

Mobile dispose <strong>de</strong> la reconnexion automatique sur HyperFileSQL.<br />

En cas <strong>de</strong> déconnexion, l'application repropose automatiquement<br />

<strong>de</strong> se reconnecter et reprend un comportement standard : nul<br />

besoin <strong>de</strong> redémarrer l'application.<br />

• La performance liée au support <strong>de</strong> communication (Wifi, GPRS,<br />

etc.) peut également être un problème si les données sont nombreuses.<br />

Nos astuces :<br />

• Éviter au maximum les aller/retour inutiles au serveur.<br />

• Limiter au maximum le nombre d’informations à récupérer.<br />

• Utiliser au maximum <strong>de</strong>s requêtes, <strong>de</strong>s vues. Il faut que celles-ci<br />

soient les plus ciblées possibles et qu’elles renvoient le minimum<br />

<strong>de</strong> lignes possible sur le Pocket. De même, il est conseillé <strong>de</strong> ne<br />

rapatrier que les rubriques nécessaires : les requêtes <strong>de</strong> type<br />

"Select *" sont donc à proscrire.<br />

• Désactiver le mécanisme <strong>de</strong> cache <strong>de</strong> HyperFileSQL Client/<br />

Serveur avec la fonction HGèreCache. Ainsi chaque lecture ne va<br />

rapatrier que le nombre d’enregistrements spécifié. Cela permet<br />

<strong>de</strong> limiter le temps <strong>de</strong> transfert. Par défaut pour les Pocket PC,<br />

c’est 10 enregistrements par lecture.<br />

• Désactiver la gestion <strong>de</strong>s mémos avec la fonction HGèreMémo,<br />

encore une fois dans le but <strong>de</strong> minimiser la taille <strong>de</strong>s infos transférées.<br />

En effet, en général sur un Pocket, il n'est pas nécessaire<br />

<strong>de</strong> rapatrier un mémo <strong>de</strong> 10 Méga.<br />

• Activer la compresser <strong>de</strong>s trames, grâce à la propriété ..<br />

Compression. Une trame est un paquet <strong>de</strong> données qui transite<br />

sur le réseau qu’il soit local, Wifi, GPRS. Avec une communication<br />

à distance, la compression <strong>de</strong>s trames est un avantage surtout si<br />

la vitesse <strong>de</strong> connexion est faible.<br />

Pour un accès rapi<strong>de</strong>, <strong>de</strong> bonnes performances, une sécurité<br />

optimale <strong>de</strong>s données, un bon compromis est <strong>de</strong> :<br />

• accé<strong>de</strong>r à distance aux données sensibles,<br />

• avoir en local les données les moins sensibles.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 49


Accès Distant<br />

Accès à une base tierce <strong>de</strong>puis un terminal<br />

mobile<br />

L'accès à une base tierce <strong>de</strong>puis une application<br />

mobile peut être effectué :<br />

• par le serveur RPC fourni en standard avec WinDev<br />

Mobile.<br />

• par une page AWP créée avec WebDev.<br />

• par programmation (utilisation <strong>de</strong> sockets par exemple).<br />

L'accès à une base <strong>de</strong> données HyperFileSQL peut être<br />

effectué <strong>de</strong> façon native.<br />

Les bases tierces ne fournissent pas <strong>de</strong> couches client pour les<br />

terminaux mobiles. Seule exception : l’accès natif AS/400. Il est<br />

donc nécessaire <strong>de</strong> mettre en place une solution pour qu'un terminal<br />

mobile puisse accé<strong>de</strong>r à une base <strong>de</strong> données.<br />

Utilisation d'une page <strong>de</strong> rebond<br />

AWP<br />

La première métho<strong>de</strong> consiste à utiliser une page <strong>de</strong> rebond AWP<br />

créée avec WebDev.<br />

L’avantage <strong>de</strong> cette métho<strong>de</strong> est que la page AWP se comporte<br />

en fait comme un WebService, qui peut être réutilisé par toute<br />

autre application.<br />

Fonctionnement<br />

Le principe est <strong>de</strong> créer une page sans interface (sans champ)<br />

permettant <strong>de</strong> récupérer ou d'effectuer une opération sur la<br />

base <strong>de</strong> données (à l'ai<strong>de</strong> d'un accès OLE DB ou d'un accès natif<br />

par exemple).<br />

En effet, cette page se comporte comme un Service Web :<br />

• elle attend <strong>de</strong>s paramètres en entrée,<br />

• elle renvoie une information en retour (une liste d'informations<br />

extraites <strong>de</strong> la base <strong>de</strong> données par exemple).<br />

Réalisation<br />

Le co<strong>de</strong> d'initialisation du projet contient le co<strong>de</strong> <strong>de</strong> connexion à<br />

la base <strong>de</strong> données souhaitée.<br />

Le co<strong>de</strong> “important” <strong>de</strong> cette page va se trouver dans le co<strong>de</strong><br />

d’ouverture <strong>de</strong> la page. Le co<strong>de</strong> est alors <strong>de</strong> la forme suivante :<br />

• Récupération du paramètre passé à la page avec la fonction<br />

PageParamètre, c’est le nom sur lequel <strong>de</strong>vra se faire la recherche.<br />

// Récupération du paramètre passé à la page<br />

sParamètreNom = PageParamètre("NOM")<br />

• Par<strong>cours</strong> du fichier par une boucle Pour Tout. Les informations<br />

<strong>de</strong> chaque enregistrement sont affectées dans une chaîne à l'ai<strong>de</strong><br />

<strong>de</strong> la fonction HRécupèreEnregistrement.<br />

// Par<strong>cours</strong> <strong>de</strong>s contacts dont le nom<br />

// commence par le paramètre récupéré<br />

POUR TOUT CarnetAD AVEC Nom[=sParamètreNom<br />

// Récupération <strong>de</strong>s informations sur le client<br />

// dans la chaîne qui va être affichée<br />

sChaineRetour += HRécupèreEnregistrement(…<br />

CarnetAD) + RC<br />

FIN<br />

• Le renvoi du résultat par la fonction ChaineAffiche. La fonction<br />

ChaîneAffiche permet d’afficher dans une page HTML le résultat<br />

<strong>de</strong> la recherche?<br />

50 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Affiche la chaîne contenant les informations<br />

ChaîneAffiche(sChaineRetour)<br />

La page affichée dans un navigateur n’est alors pas très lisible,<br />

mais ce n’est pas ce qui est important ici. Ce qui nous intéresse,<br />

c’est le co<strong>de</strong> source HTML <strong>de</strong> cette page qui est <strong>de</strong> la forme :<br />

216BANQUEN1ABBOU622TRIL<br />

OGET2ABONDANCE...<br />

Ce co<strong>de</strong> source est très lisible et facilement accessible par une<br />

application. Il contient un client par ligne, avec les informations<br />

du client séparées par <strong>de</strong>s tabulations. Il suffit alors d'exploiter<br />

cette page <strong>de</strong>puis une application WinDev ou WinDev Mobile.<br />

Exploitation par une application WinDev Mobile<br />

À partir d’une page ainsi conçue, le traitement et l'intégration <strong>de</strong>s<br />

résultats dans une application WinDev Mobile sont très simples.<br />

Nous allons dans cette fenêtre tout simplement remplir la table<br />

avec les données récupérées sur la page AWP.<br />

1. Première étape : Envoi <strong>de</strong> la requête<br />

Il faut tout d’abord envoyer la requête au site avec le paramètre<br />

qui sera la lettre ou la chaîne <strong>de</strong> caractères <strong>de</strong>s clients à<br />

rechercher. Ce paramètre est saisi dans le champ <strong>de</strong> recherche<br />

<strong>de</strong> la fenêtre. Le co<strong>de</strong> <strong>de</strong> cette requête se trouve dans le co<strong>de</strong><br />

du bouton “Rechercher”.<br />

Pour réaliser cette requête, il suffit d’utiliser la fonction<br />

HTTPRequête et <strong>de</strong> construire l’URL qui sera composée <strong>de</strong><br />

l’adresse <strong>de</strong> la page et du paramètre <strong>de</strong> recherche.<br />

Les paramètres sont séparés <strong>de</strong> l’adresse <strong>de</strong> la page par un point<br />

d’interrogation; le co<strong>de</strong> est alors <strong>de</strong> la forme :<br />

// Deman<strong>de</strong> à la page AWP<br />

HTTPRequête("http://localhost/ANNUAIREAWP_WEB/FR/<br />

PAGE_RechercheClient.awp?NOM=T")<br />

Ensuite, il suffit <strong>de</strong> récupérer le résultat grâce à la fonction<br />

HTTPDonneRésultat. La fonction HTTPDonneRésultat permet<br />

<strong>de</strong> récupérer <strong>de</strong>ux choses :<br />

• L’en-tête <strong>de</strong> la page : c’est dans l’entête que sont contenues<br />

les informations concernant la page en elle-même.<br />

Par exemple c’est dans l’en-tête que l’on sait si la page existe<br />

encore ou non.<br />

• Le contenu <strong>de</strong> la page : c’est le co<strong>de</strong> HTML <strong>de</strong> la page.<br />

Bien entendu, l'application doit ici récupérer le co<strong>de</strong> source HTML<br />

<strong>de</strong> la page. Le co<strong>de</strong> <strong>de</strong>vient :<br />

// Récupération du résultat<br />

ListeClient = HTTPDonneRésultat(HTTPRésultat)<br />

2. Deuxième étape : Analyse du résultat<br />

Le co<strong>de</strong> source <strong>de</strong> la page est formaté : un client par ligne avec<br />

un retour chariot (RC).<br />

Il suffit donc <strong>de</strong> parcourir la variable ListeClient pour récupérer<br />

les informations d’un client.<br />

POUR TOUTE CHAINE UnClient DE<br />

ListeClient SEPAREE PAR RC<br />

TableAjoute(TABLE_Table1, UnClient)<br />

FIN<br />

Utilisation du serveur RPC<br />

Un serveur RPC est fourni en standard avec WinDev Mobile.<br />

Ce serveur RPC sert <strong>de</strong> relais entre une application et une base <strong>de</strong><br />

données. Le serveur RPC re-route les comman<strong>de</strong>s qu’il reçoit vers<br />

un serveur <strong>de</strong> base <strong>de</strong> données et renvoie le résultat.<br />

La comman<strong>de</strong> peut être une requête SQL ou un ordre Hxxx<br />

(HLitPremier, HLitSuivant,etc.).<br />

La seule chose qui change dans l’application mobile est l'utilisation<br />

<strong>de</strong> la fonction hConnecteAccesDistant dans le co<strong>de</strong> d'initialisation<br />

du projet. Cette procédure accepte en paramètres :<br />

• l’adresse IP ou le nom <strong>de</strong> la machine où se situe le serveur<br />

RPC,<br />

• le nom et le mot <strong>de</strong> passe qui va permettre à l’application <strong>de</strong><br />

s’i<strong>de</strong>ntifier auprès du serveur RPC.<br />

// Connexion au serveur RPC<br />

HConnecteAccèsDistant("MonServeurHFSQL",…<br />

"Utilisateur","MotDePasse")<br />

WinDev Mobile génère automatiquement l'installation du serveur<br />

RPC pour l'accès à une base tierce <strong>de</strong>puis un Pocket PC. Il suffit <strong>de</strong><br />

cliquer sur le menu "Atelier .. Serveur RPC .. Créer la procédure<br />

d'installation du serveur RPC" et <strong>de</strong> suivre l'assistant pas à pas.<br />

L’avantage <strong>de</strong> la solution du serveur RPC est qu'il s'agit d'une solution<br />

sécurisée. En effet, les applications doivent être déclarées<br />

auprès du serveur RPC. Les applications sont <strong>de</strong>s utilisateurs, au<br />

sens réseau, du serveur RPC.<br />

Il est également possible d’installer le serveur RPC en tant que<br />

service.<br />

Notre astuce<br />

Pour <strong>de</strong>s raisons <strong>de</strong> performance, il est conseillé <strong>de</strong> privilégier<br />

l'utilisation <strong>de</strong> requêtes SQL.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 51


Abonnez-vous !<br />

L90119<br />

Tarif modifiable sans préavis<br />

Bulletin d’abonnement à retourner avec<br />

votre règlement à :<br />

PC SOFT<br />

Lettre du <strong>Support</strong> <strong>Tech</strong>nique<br />

BP 44 408<br />

34197 MONTPELLIER Ce<strong>de</strong>x 05<br />

France<br />

En cas <strong>de</strong> paiement par carte bancaire,<br />

vous pouvez nous faxer votre abonnement<br />

au :<br />

+33 (0) 4 67 03 07 87<br />

Vos Nom & Prénom : ...........................................................................<br />

Votre Société : ..................................................................................<br />

Votre Adresse précise : ........................................................................<br />

.....................................................................................................<br />

Co<strong>de</strong> Postal : .............................. Ville : .............................................<br />

Pays : ........................................ Tel : ...............................................<br />

Adresse Email : .................................................................................<br />

Je choisis un abonnement “LST PC SOFT” pour :<br />

FRANCE Métropolitaine<br />

AUTRE (exp. par avion)<br />

□ 1 an - 4 N°+ 4 DVD : 159 euros HT; 190,16 euros TTC<br />

□ 2 ans - 8 N°+ 8 DVD : 279 euros HT ; 333,68 euros TTC<br />

□ 1 an - 4 N°+ 4 DVD : 175 euros HT<br />

□ 2 ans - 8 N°+ 8 DVD : 299 euros HT<br />

À partir du numéro : ..............<br />

Note : une facture acquittée est systématiquement<br />

adressée.<br />

Ci joint mon règlement <strong>de</strong> : ............. Euros TTC<br />

□ Je règle par chèque. J’autorise PC SOFT à débiter sur ma carte VISA/MasterCard<br />

la somme <strong>de</strong> : ..................... Euros<br />

□ Je règle par Carte Bancaire.<br />

Cryptogramme :<br />

□□□<br />

Numéro complet <strong>de</strong> la carte : la carte expire : mois année<br />

□□□□□□□□□□□□□□□□ □□ □□□□<br />

Signature obligatoire du détenteur <strong>de</strong> la carte :<br />

Nom du détenteur <strong>de</strong> la carte :<br />

..........................................................<br />

52 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

Debug et Optimisation<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 53


Programmation et débogueur<br />

Fonctions <strong>de</strong> mise au point et <strong>de</strong> <strong>de</strong>bogage<br />

WinDev dispose en standard <strong>de</strong> plusieurs outils et<br />

fonctionnalités pour ai<strong>de</strong>r le développeur à mettre au<br />

point et optimiser les applications.<br />

Dans cet article, nous allons étudier les principales<br />

fonctionnalités offertes par WinDev sur ce domaine afin<br />

<strong>de</strong> vous ai<strong>de</strong>r à choisir lesquels sont les plus adaptés<br />

selon vos projets.<br />

Principales fonctionnalités<br />

Les principales fonctionnalités offertes par WinDev en termes <strong>de</strong><br />

mise au point sont les suivantes :<br />

• Les assertions<br />

• Les traces<br />

• Les logs d'exécution<br />

• Le débogueur<br />

Les assertions<br />

Une assertion permet <strong>de</strong> vérifier une condition lors <strong>de</strong> l'exécution<br />

<strong>de</strong> l'application.<br />

• Si la condition n'est pas vérifiée, une boîte d'information s'affiche<br />

avec le détail <strong>de</strong> la vérification.<br />

Pour définir une assertion, il suffit d'utiliser la fonction dbgAssertion<br />

du WLangage avec en paramètre la condition à vérifier,<br />

et le message à afficher si jamais elle ne l'est pas.<br />

Par défaut, les assertions sont actives uniquement en mo<strong>de</strong> test.<br />

Il est possible <strong>de</strong> les activer en déploiement, il suffit d'utiliser la<br />

fonction dbgactiveAssertion, avec le paramètre Vrai.<br />

Différence fondamentale<br />

La condition utilisée dans l'assertion n'est exécutée par le WLangage<br />

que lorsque les assertions sont actives. Le fonctionnement peut<br />

donc être différent en mo<strong>de</strong> test et en mo<strong>de</strong> exécutable.<br />

Il faut être particulièrement vigilant lors <strong>de</strong> l'utilisation <strong>de</strong> fonctions<br />

dans la condition fournie à la fonction dbgAssertion. En effet,<br />

si la fonction utilisée réalise une initialisation ou une connexion,<br />

cette opération ne sera pas réalisée dans l'application utilisée en<br />

mo<strong>de</strong> "exécutable".<br />

En revanche, cela permet <strong>de</strong> mettre "plus <strong>de</strong> tests" sans ralentir<br />

l'application en exploitation et ainsi permet d'accélérer la mise<br />

au point <strong>de</strong>s applications.<br />

Notre conseil<br />

Les assertions peuvent servir pour <strong>de</strong>s cas "spécifiques" ou vérifier<br />

les "pré-requis" d'une fonction. C’est-à-dire le cas qui ne <strong>de</strong>vrait<br />

jamais arriver mais qui arrive toujours un jour : une chaîne vi<strong>de</strong><br />

alors que l'on attend un nom logique, un chemin vers un fichier<br />

inexistant, etc.<br />

Les assertions ne peuvent pas remplacer la gestion classique <strong>de</strong>s<br />

erreurs : il faut gérer le cas, mais mettre une assertion permet<br />

d'être prévenu et <strong>de</strong> retrouver pourquoi c'est arrivé grâce à la<br />

pile d'exécution.<br />

Le développeur a alors accès à la pile d'exécution, c’est-à-dire<br />

tous les appels qui ont abouti à ce résultat.<br />

// Variable CClient<br />

clClient est un CClient<br />

// Création du client<br />

CréerClient(clClient)<br />

// L'objet clClient doit avoir été instancié<br />

dbgAssertion(clClientNull, ...<br />

"L'objet n'a pas été instancié")<br />

L'utilisation <strong>de</strong>s assertions permet également <strong>de</strong> gui<strong>de</strong>r l'utilisation<br />

d'une fonctionnalité lors d'un développement à plusieurs<br />

développeurs : le co<strong>de</strong> "appelant" ne doit pas provoquer d'assertion<br />

dans le co<strong>de</strong> "appelé".<br />

Les traces<br />

La fonction WLangage Trace permet d'afficher <strong>de</strong>s informations<br />

pendant l'exécution <strong>de</strong> l'application. Cette fonction est très<br />

couramment utilisée lors <strong>de</strong>s phases <strong>de</strong> développement d'une<br />

application.<br />

En revanche, beaucoup moins <strong>de</strong> développeurs connaissent la<br />

possibilité <strong>de</strong> personnaliser le fonctionnement <strong>de</strong>s traces. Cette<br />

54 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


personnalisation est effectuée grâce à la fonction TraceDébut<br />

du WLangage.<br />

// La fenêtre <strong>de</strong> trace est affichée<br />

//par-<strong>de</strong>ssus les autres fenêtres<br />

// et un fichier <strong>de</strong> trace est sauvegardé<br />

TraceDébut(trFenêtre+trDessusTout+trFichier,<br />

fRepExe()+["\"]+"TraceExecution.txt")<br />

Il est alors possible <strong>de</strong> :<br />

• Afficher les traces dans une fenêtre, c'est le fonctionnement<br />

par défaut avec la constante trFenêtre<br />

• Enregistrer les traces dans un fichier avec la constante trFichier.<br />

• Désactiver les traces par programmation avec la constante<br />

trDésactivée<br />

• Déboguer directement sur un terminal mobile<br />

• Déboguer un composant, <strong>de</strong>puis le projet hôte, ou <strong>de</strong>puis un<br />

exécutable<br />

• Déboguer <strong>de</strong>s procédures et <strong>de</strong>s triggers stockés<br />

Le débogueur permet alors <strong>de</strong> :<br />

• Faire du débogage multithread<br />

• Évaluer <strong>de</strong>s variables dynamiquement<br />

• Définir l'instruction suivante à exécuter<br />

• Modifier le co<strong>de</strong> à la volée, c'est le Edit and Continue<br />

• Visualiser le contexte HyperFileSQL d'un fichier ou d'une source<br />

<strong>de</strong> données<br />

• Faire <strong>de</strong>s points d'arrêts conditionnels....<br />

Debug et Optimisation<br />

Le volet du débogueur<br />

Il est également possible <strong>de</strong> retrouver les assertions, et les traces<br />

directement dans l'éditeur dans le volet du débogueur.<br />

Ce volet est très pratique, notamment pour le débogage distant<br />

car les traces et les assertions apparaissent aussi sur votre poste<br />

dans WinDev. De plus, un simple double-clic sur une assertion ou<br />

une trace affichée dans ce volet positionne automatiquement le<br />

co<strong>de</strong> sur la ligne ayant provoqué cet affichage.<br />

Le développeur dispose également dans ce volet <strong>de</strong> toutes les<br />

erreurs non fatales rencontrées par l'application ce qui peut<br />

permettre <strong>de</strong> fiabiliser l'application.<br />

Le débogueur<br />

Dans WinDev, le débogueur permet <strong>de</strong> déboguer dans différentes<br />

configurations :<br />

• Déboguer le projet en mo<strong>de</strong> test<br />

• Déboguer un exécutable, en local ou à distance (en lançant<br />

l'application WDDebug sur le poste distant).<br />

• Déboguer un site, en local ou à distance<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 55


Analyseurs<br />

Optimisation d'une application grâce au logs<br />

et à l'analyseur <strong>de</strong> performances<br />

Les logs d'exécution permettent d'enregistrer tous<br />

les traitements qui ont été effectués par l'utilisateur.<br />

Cette fonctionnalité est non seulement pratique pour<br />

l'optimisation d'une application (le développeur sait<br />

ce que l'utilisateur exploite le plus en terme <strong>de</strong> fonctionnalité<br />

<strong>de</strong> l'application), mais aussi pour la mise au<br />

point <strong>de</strong> l'application.<br />

Grâce aux logs d'exécution, le développeur voit le<br />

déroulement complet <strong>de</strong> l'application :<br />

• toutes les fonctions qui ont été appelées,<br />

• tous les paramètres qui ont été passés,<br />

• tous les résultats <strong>de</strong>s fonctions,<br />

et ce dans tous les threads...<br />

Logs et Interactions entre threads<br />

Pour ouvrir un fichier log d'exécution (fichier .wlog), il suffit<br />

d'ouvrir le projet puis d'effectuer un drag & drop du fichier .wlog<br />

dans WinDev.<br />

En effet, les threads ne s'exécutent pas tout à fait en parallèle les<br />

uns <strong>de</strong>s autres. Le processeur ne peut faire qu'une seule chose à la<br />

fois. Dans le log d'exécution, on voit dans l'exemple que pendant<br />

qu'une instruction s'exécute dans un thread, il n'y a rien dans les<br />

autres threads.<br />

Logs et analyse d'utilisation<br />

Le rôle premier <strong>de</strong>s logs n'est pas <strong>de</strong> servir au débogage mais d'en<br />

déduire un certain nombre <strong>de</strong> statistiques…<br />

Notamment sur les actions qui ont été le plus souvent exécutées<br />

par les utilisateurs. Cela permet aux équipes <strong>de</strong> développement <strong>de</strong><br />

concentrer leurs efforts sur les fonctionnalités les plus utilisées.<br />

// Activation <strong>de</strong>s logs<br />

// Le log d'exécution va récupérer :<br />

// - les fonctions WLangage<br />

// - les paramètres <strong>de</strong>s fonctions<br />

// - les traitements<br />

dbgActiveLog("[%RepExe%][%Date%][%Heure%]",<br />

LogTout+LogActif)<br />

En plus <strong>de</strong> leur utilisation classique, les logs d'exécution sont<br />

efficaces pour déboguer <strong>de</strong>s applications multithreads.<br />

Pour cela, il suffit d'activer l'option "Voir les interactions entre<br />

les threads". Il est alors possible <strong>de</strong> sélectionner les threads pour<br />

lesquels on souhaite visualiser les logs.<br />

Le développeur a alors accès à toutes les instructions dans l'ordre<br />

où elles ont été exécutées. Cela permet <strong>de</strong> comprendre plus<br />

facilement les cas <strong>de</strong> conflits entre les threads.<br />

Les logs d'exécution s'activent par la fonction dbgActiveLog du<br />

WLangage en indiquant,en paramètre, le chemin du fichier <strong>de</strong> log<br />

à générer et les options d'enregistrements.<br />

Vous pouvez <strong>de</strong>man<strong>de</strong>r à enregistrer :<br />

• Les traitements.<br />

• Les appels aux fonctions WLangage.<br />

• Les paramètres qui sont passés.<br />

Note : L'activation <strong>de</strong>s logs ralentit un peu l'application, car il faut<br />

enregistrer tous les traitements. Il est donc préférable <strong>de</strong> ne pas<br />

activer les logs d'exécution en permanence. Cette fonctionnalité<br />

est à activer en cas <strong>de</strong> besoin pour déboguer un projet, ou en<br />

phase <strong>de</strong> recettage pour savoir quelles sont les options les plus<br />

utilisées !<br />

56 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Stockage <strong>de</strong>s fichiers logs<br />

Le stockage <strong>de</strong>s logs se fait sur disque, il faut donc prévoir la place<br />

nécessaire. Pour gérer le stockage <strong>de</strong>s logs, un composant est livré<br />

en standard : "WD Gestion Logs". Le composant "WD Gestion Logs"<br />

permet <strong>de</strong> définir la taille maximum d'un log.<br />

Lorsque le fichier <strong>de</strong> log arrive à cette taille, un nouveau log est<br />

recréé. Et bien entendu le développeur peut spécifier le nombre<br />

<strong>de</strong> logs à conserver sur le disque.<br />

Optimisation avec le profiler<br />

Avec WinDev vous disposez <strong>de</strong>s outils pour déboguer efficacement<br />

vos applications. Mais le débogage d'une application ne se limite<br />

pas à la correction <strong>de</strong> dysfonctionnements, c'est aussi l'optimisation<br />

<strong>de</strong> l'application.<br />

Comment détecter les traitements qui prennent du temps dans vos<br />

applications ? La solution la plus rapi<strong>de</strong> est le profiler intégré <strong>de</strong><br />

WinDev. Le profiler liste les traitements effectués, avec le temps<br />

passé dans chaque traitement.<br />

Le profiler peut être utilisé <strong>de</strong> <strong>de</strong>ux façons différentes :<br />

1 - Pour profiler toute l'application, <strong>de</strong>puis son lancement jusqu'à<br />

sa fermeture.<br />

2 – Pour profiler une partie <strong>de</strong> l'application, un traitement long<br />

ou spécifique par exemple.<br />

Performances et améliorations .. Analyser les performances".<br />

Dans ce mo<strong>de</strong> <strong>de</strong> fonctionnement, WinDev lance automatiquement<br />

l'application en activant le profiler. Le développeur peut alors<br />

utiliser "normalement" l'application. Lors <strong>de</strong> la fin <strong>de</strong> l'application<br />

WinDev affiche le compte-rendu du profiler.<br />

Cette utilisation du profiler est très pratique pour vérifier l'existence<br />

<strong>de</strong> traitements qui sont exagérément longs avant <strong>de</strong> livrer<br />

une nouvelle version d'une application.<br />

Profiler et co<strong>de</strong> ciblé<br />

Second cas d'utilisation du profiler : profiler une partie <strong>de</strong> l'application<br />

ou un traitement spécifique.<br />

Pour profiler seulement une partie <strong>de</strong> l'application, il suffit d'utiliser<br />

les fonctions AnalyseurDébut et AnalyseurFin du WLangage.<br />

Ces fonctions permettent <strong>de</strong> démarrer et d'arrêter le profiler.<br />

En général cette fonctionnalité est utilisée suite à une <strong>de</strong>man<strong>de</strong><br />

d'optimisation d'un traitement donné.<br />

Note : Cette fonctionnalité <strong>de</strong> profiler est également disponible<br />

en exécution sur une application déployée. Cependant,il est<br />

déconseillé d'activer cette fonctionnalité tout le temps : la collecte<br />

d'informations réalisée par le profiler prend du temps et ralentit<br />

un peu l’application...<br />

Debug et Optimisation<br />

Profiler et application complète<br />

Premier cas d'utilisation du profiler : profiler l'ensemble d'une application.<br />

Pour cela, il suffit <strong>de</strong> lancer le projet par le menu "Projet..<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 57


Abonnez-vous !<br />

L90119<br />

Tarif modifiable sans préavis<br />

Bulletin d’abonnement à retourner avec<br />

votre règlement à :<br />

PC SOFT<br />

Lettre du <strong>Support</strong> <strong>Tech</strong>nique<br />

BP 44 408<br />

34197 MONTPELLIER Ce<strong>de</strong>x 05<br />

France<br />

En cas <strong>de</strong> paiement par carte bancaire,<br />

vous pouvez nous faxer votre abonnement<br />

au :<br />

+33 (0) 4 67 03 07 87<br />

Vos Nom & Prénom : ...........................................................................<br />

Votre Société : ..................................................................................<br />

Votre Adresse précise : ........................................................................<br />

.....................................................................................................<br />

Co<strong>de</strong> Postal : .............................. Ville : .............................................<br />

Pays : ........................................ Tel : ...............................................<br />

Adresse Email : .................................................................................<br />

Je choisis un abonnement “LST PC SOFT” pour :<br />

FRANCE Métropolitaine<br />

AUTRE (exp. par avion)<br />

□ 1 an - 4 N°+ 4 DVD : 159 euros HT; 190,16 euros TTC<br />

□ 2 ans - 8 N°+ 8 DVD : 279 euros HT ; 333,68 euros TTC<br />

□ 1 an - 4 N°+ 4 DVD : 175 euros HT<br />

□ 2 ans - 8 N°+ 8 DVD : 299 euros HT<br />

À partir du numéro : ..............<br />

Note : une facture acquittée est systématiquement<br />

adressée.<br />

Ci joint mon règlement <strong>de</strong> : ............. Euros TTC<br />

□ Je règle par chèque. J’autorise PC SOFT à débiter sur ma carte VISA/MasterCard<br />

la somme <strong>de</strong> : ..................... Euros<br />

□ Je règle par Carte Bancaire.<br />

Cryptogramme :<br />

□□□<br />

Numéro complet <strong>de</strong> la carte : la carte expire : mois année<br />

□□□□□□□□□□□□□□□□ □□ □□□□<br />

Signature obligatoire du détenteur <strong>de</strong> la carte :<br />

Nom du détenteur <strong>de</strong> la carte :<br />

..........................................................<br />

58 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

Gestion <strong>de</strong> la qualité<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 59


TESTS AUTOMATIQUES<br />

Mise en place <strong>de</strong> tests unitaires lors d'un<br />

"GO" <strong>de</strong> fenêtre<br />

Lorsque la génération du test est validée, il<br />

est possible <strong>de</strong> visualiser le co<strong>de</strong> du test.<br />

WinDev 14 permet <strong>de</strong> mettre en place <strong>de</strong>s tests unitaires<br />

automatisés sur les applications. Pour cela, les équipes<br />

<strong>de</strong> développement disposent en standard d'un éditeur<br />

<strong>de</strong> tests totalement intégré à l'environnement.<br />

Cet éditeur <strong>de</strong> tests est utilisé, dès la phase <strong>de</strong> développement,<br />

par les développeurs, pour enregistrer <strong>de</strong>s<br />

tests autos sur les fenêtres, les procédures..<br />

L’avantage, c’est que les tests sont intégrés le plus tôt<br />

possible dans le cycle <strong>de</strong> vie <strong>de</strong> l’application.<br />

Les bugs éventuels sont donc détectés à la source.<br />

Dans le cycle <strong>de</strong> vie, le temps consacré à la création<br />

<strong>de</strong> test automatisé est cependant souvent sacrifié au<br />

profit <strong>de</strong> nouveaux développements.<br />

L’avantage avec WinDev 14, c’est qu'à chaque test<br />

d'un élément (un simple GO)WinDev enregistre les<br />

manipulations effectuée et permet d’enregistrer le test<br />

unitaire correspondant à ces manipulations.<br />

PiloteSouris(FEN_Contacts.SAI_<br />

Recherche, ...<br />

psClicGauche, 29,18)<br />

PiloteSaisie(FEN_Contacts.SAI_<br />

Recherche, "WE")<br />

PiloteSouris(FEN_Contacts.ZR_<br />

Contacts, ...<br />

psDoubleClicGauche, 101,30)<br />

//Scénario à exécuter lors <strong>de</strong> l'ouverture <strong>de</strong> la<br />

fenêtre FEN_FicheContact<br />

SUR FEN_FicheContact FAIRE<br />

PiloteSouris(FEN_FicheContact.IMG_ZoneI<strong>de</strong>ntitié,<br />

psRelacheBoutonGauche, 274,145)<br />

PiloteSouris(FEN_FicheContact.BTN_Annuler,<br />

psClicGauche, 65,18)<br />

FIN<br />

PiloteSouris(FEN_Contacts.BTN_Quitter,<br />

psClicGauche, 90,17)<br />

Rappel : Le co<strong>de</strong> <strong>de</strong>s tests dans WinDev est directement réalisé<br />

en WLangage, ce qui permet <strong>de</strong> personnaliser simplement le<br />

co<strong>de</strong> généré.<br />

Il est alors possible à tout moment <strong>de</strong> retester la fenêtre en sélectionnant<br />

le test correspondant et en faisant un "GO"<strong>de</strong> ce test.<br />

Création d'un test sur "GO"<br />

Pour illustrer la mise en place d'un test unitaire lors d'un GO, nous<br />

allons utiliser ici le projet "WD Gestion Contacts" :<br />

• Ouvrir le projet "WD Gestion Contacts".<br />

• Ouvrir la fenêtre FEN_Contacts<br />

• Faire un GO <strong>de</strong> la fenêtre<br />

• Rechercher "WE"<br />

• Double cliquer sur " WERENFRID"<br />

• Annuler la modification<br />

• Cliquer sur quitter<br />

Et à partir <strong>de</strong> ce Go, WinDev me propose automatiquement<br />

d’enregistrer le test correspondant aux manipulations réalisées<br />

(un bouton "Générer le test" est apparu).<br />

Bien entendu, dans ce cas, le co<strong>de</strong> vient d'être généré, donc le<br />

test passe avec succès.<br />

60 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Modification <strong>de</strong> la fenêtre<br />

L'intérêt, c'est qu'une fois le test mis en place et validé, en cas<br />

d'erreur ou d'un effet <strong>de</strong> bord lors d'une modification <strong>de</strong> l'application,<br />

le test permettra <strong>de</strong> détecter la régression.<br />

Pour illustrer ce cas, nous allons modifier la fenêtre "FEN_Contacts"<br />

sur laquelle nous venons <strong>de</strong> créer un test :<br />

• Ouvrir la fenêtre "FEN_Contact".<br />

• Ouvrir la fenêtre <strong>de</strong> <strong>de</strong>scription <strong>de</strong> la zone répétée.<br />

• Sélectionner l'onglet "IHM"<br />

• Désactiver l'option <strong>de</strong> double clic automatique<br />

• Vali<strong>de</strong>r<br />

• Sélectionner le test "TESTS_Contacts".<br />

• Démarrer le test (Go du test).<br />

(menu "Tests automatiques") ou <strong>de</strong> l'exécuter en autonome sur une<br />

machine dédiée au test (en copiant l'exécutable "WDAutomate"<br />

<strong>de</strong>puis le répertoire "Programmes" <strong>de</strong> WinDev).<br />

Il suffit alors <strong>de</strong> cocher les tests à exécuter et <strong>de</strong> vali<strong>de</strong>r.Les tests<br />

sélectionnés vont alors automatiquement s’enchaîner.<br />

Gestion <strong>de</strong> la qualité<br />

Désormais, le test ne passe plus avec succès : la régression a été<br />

détectée. En effet, avec la modification réalisée, l'utilisateur ne<br />

peut plus ouvrir la fiche du contact par un double clic.<br />

Automatisation <strong>de</strong>s tests<br />

Un <strong>de</strong>s avantages <strong>de</strong>s tests, est qu'il est ensuite possible <strong>de</strong> faire<br />

rejouer ces tests générés automatiquement sur l’application<br />

finale, sur le ".exe".<br />

Pour passer les tests sur un exécutable, il suffit <strong>de</strong> générer la<br />

bibliothèque <strong>de</strong> tests <strong>de</strong>puis le menu "Test automatiques .. Générer<br />

la bibliothèque <strong>de</strong> tests".<br />

Ensuite, il suffit d'utiliser l’automate <strong>de</strong> tests livré en standard<br />

avec WinDev. Il est possible <strong>de</strong> lancer l'automate <strong>de</strong>puis WinDev<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 61


CENTRES DE Contrôles<br />

Suivi <strong>de</strong> projet et <strong>de</strong>s inci<strong>de</strong>nts ou<br />

suggestions<br />

Comment savoir sur un projet quelles sont les fonctionnalités<br />

validées et livrables en clientèle ?<br />

Comment gar<strong>de</strong>r la traçabilité <strong>de</strong> ce qui a été développé<br />

? par qui ? <strong>de</strong> ce qui a été testé .. par qui ? Où<br />

en est l'avancement du projet ?<br />

Toutes ces problématiques sont communes au développement<br />

logiciel et WinDev répond à ces questions<br />

par ses différents centres <strong>de</strong> contrôle.<br />

Les centres <strong>de</strong> contrôle permettent <strong>de</strong> gérer les fonctionnalités<br />

<strong>de</strong>s projets, les tâches nécessaires pour<br />

réaliser les fonctionnalités, le suivi <strong>de</strong>s plannings, les<br />

inci<strong>de</strong>nts remontés sur les fonctionnalités.<br />

Et tout ça est relié, interconnecté, ce qui permet<br />

d’offrir au chef <strong>de</strong> projet une vision globale <strong>de</strong> l’état<br />

d’avancement et <strong>de</strong> la qualité du projet et <strong>de</strong> chaque<br />

fonctionnalité.<br />

place d’un système <strong>de</strong> promotions".<br />

• Indiquer si l'exigence nécessite une tâche <strong>de</strong> test ou <strong>de</strong> documentation<br />

en plus <strong>de</strong> la tâche <strong>de</strong> développement.<br />

• Compléter les informations décrivant plus précisément l'exigence.<br />

Gestion <strong>de</strong>s fonctionnalités<br />

Premier concept.. c’est la gestion <strong>de</strong>s fonctionnalités.. la gestion<br />

<strong>de</strong>s exigences.<br />

On peut définir les exigences comme le cahier <strong>de</strong>s charges.. les<br />

fonctionnalités à développer.<br />

La gestion <strong>de</strong>s exigences se passe par le centre <strong>de</strong> suivi <strong>de</strong> projets,<br />

<strong>de</strong>puis le menu "Gestion - Gestion <strong>de</strong>s exigences".<br />

Avant même le début du développement, dès la phase <strong>de</strong> conception<br />

<strong>de</strong> l’application,les exigences, les fonctionnalités <strong>de</strong>mandées<br />

sont renseignées, généralement par le chef <strong>de</strong> projet. Lorsqu'il y<br />

a une fonctionnalité à développer, il suffit <strong>de</strong> :<br />

• Créer une nouvelle exigence (création simple) en cliquant sur<br />

le bouton "+".<br />

• Donner un titre explicite à l'exigence, par exemple " Mise en<br />

• Vali<strong>de</strong>r la création <strong>de</strong> l'exigence.<br />

À ce sta<strong>de</strong>, L’exigence n’a pas encore donné lieu à <strong>de</strong>s tâches<br />

pour les collaborateurs.<br />

Elle est donc dans l’état "non débutée" et "non planifiée".<br />

Bien sûr.. chaque exigence donne lieu à <strong>de</strong>s réunions, <strong>de</strong>s étu<strong>de</strong>s<br />

<strong>de</strong> faisabilité, à <strong>de</strong> la recherche. Une fois cette phase d’analyse<br />

terminée, le chef <strong>de</strong> projet est alors en mesure <strong>de</strong> définir les<br />

tâches <strong>de</strong> développement, <strong>de</strong> tests, <strong>de</strong> documentation qui vont<br />

être nécessaires pour la réalisation <strong>de</strong> cette exigence, <strong>de</strong> cette<br />

fonctionnalité. Et bien sûr.. il affecte ces tâches aux collaborateurs<br />

concernés.<br />

Pour créer une nouvelle tâche associée à une exigence donnée,<br />

il suffit <strong>de</strong> :<br />

• Faire un clic droit sur l’exigence – Lier une nouvelle tâche à<br />

l’exigence.<br />

• Donner un titre explicite à la tâche, par exemple " Création <strong>de</strong><br />

la page promotion".<br />

• Définir le type <strong>de</strong> tâche (par exemple du développement) <strong>de</strong>puis<br />

la combo "Type".<br />

• Indiquer le projet concerné.<br />

• Indiquer l'intervenant chargé <strong>de</strong> réaliser cette tâche.<br />

• Indiquer la durée estimée pour la réalisation <strong>de</strong> la tâche.<br />

• Vali<strong>de</strong>r.<br />

62 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Et ainsi <strong>de</strong> suite pour les autres tâches <strong>de</strong> développement mais<br />

aussi les tâches <strong>de</strong> test et <strong>de</strong> documentation.<br />

En effet, lorsqu'un développeur est plongé dans son développement,<br />

il ne pense pas toujours à renseigner la tâche sur laquelle il travaille.<br />

C'est là que l'ai<strong>de</strong> à la gestion du temps intervient puisqu'elle<br />

<strong>de</strong>man<strong>de</strong> quelle tâche activer.. aux moments opportuns : lors <strong>de</strong><br />

l’ouverture d’un nouveau projet, à interval régulier, etc.<br />

Chaque développeur peut alors personnaliser cette gestion du<br />

temps <strong>de</strong>puis le bouton "options" afin <strong>de</strong> la rendre la plus efficace<br />

par rapport à sa métho<strong>de</strong> <strong>de</strong> travail.<br />

Gestion <strong>de</strong> la qualité<br />

Planning <strong>de</strong> développement<br />

À ce sta<strong>de</strong>, le développeur retrouve dans son planning la tâche<br />

créée pour lui par le chef <strong>de</strong> projet. Lorsque le développeur débute<br />

la tâche, il lui suffit <strong>de</strong> l'indiquer dans le centre <strong>de</strong> suivi <strong>de</strong> projet<br />

(ou le volet correspondant intégré à WinDev).<br />

Dès cet instant, la gestion <strong>de</strong>s exigences, le chef <strong>de</strong> projet visualise<br />

à tout moment l’état <strong>de</strong>s tâches dans la gestion <strong>de</strong>s exigences.<br />

WinDev donne alors automatiquement un état à l'exigence en<br />

fonction <strong>de</strong> l'état <strong>de</strong>s différentes tâches la constituant.<br />

Par exemple, si la tâche <strong>de</strong> développement est passée en "En <strong>cours</strong>"<br />

par le développeur, l’exigence passe dans l'état "débutée.<br />

Le chef <strong>de</strong> projet dispose également du taux <strong>de</strong> réalisation <strong>de</strong>s<br />

tâches. Grâce à ces informations, le chef <strong>de</strong> projet peut à tout<br />

moment repenser les plannings au besoin !<br />

Note : En cas d'inactivité prolongée sur le poste (réunion, téléphone,<br />

etc.) une fenêtre apparait pour <strong>de</strong>man<strong>de</strong>r la tâche correspondant<br />

à cette pério<strong>de</strong>. En effet, lorsqu'un développeur part<br />

en réunion par exemple.. il ne pense pas toujours à changer <strong>de</strong><br />

tâche en <strong>cours</strong>.<br />

Gestion du temps<br />

Le développeur bénéficie non seulement <strong>de</strong> la gestion du temps<br />

mais également d'une ai<strong>de</strong> à la gestion du temps.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 63


CENTRES DE Contrôles (SUITE)<br />

Suivi <strong>de</strong> projet et <strong>de</strong>s inci<strong>de</strong>nts ou<br />

suggestions (Suite)<br />

Bien entendu, ces fonctionnalités sont facultatives, vous pouvez<br />

désactiver la gestion du temps <strong>de</strong> WinDev !<br />

Phase <strong>de</strong> test<br />

Une fois le développement du système <strong>de</strong> promotion terminé,<br />

le développeur passe tâche <strong>de</strong> développement dans l'état "terminé".<br />

Bien évi<strong>de</strong>mment .. dans la gestion <strong>de</strong>s exigences.. le chef <strong>de</strong><br />

projet visualise que du point <strong>de</strong> vue développement l’exigence<br />

est "Terminée".<br />

test pour l’exigence <strong>de</strong> mise en place du système <strong>de</strong> promotions,<br />

le centre <strong>de</strong> contrôle qualité lui proposera automatique d’associer<br />

l’inci<strong>de</strong>nt à l’exigence.<br />

• Indiquer le développeur auquel l'inci<strong>de</strong>nt est affecté. Si le<br />

développeur reçoit <strong>de</strong>s fiches d'inci<strong>de</strong>nts qui ne lui sont pas <strong>de</strong>stinés,<br />

il pourra les réaffecter. En attendant, il est "responsable"<br />

<strong>de</strong> cette fiche.<br />

• Décrire les circonstances <strong>de</strong> l'inci<strong>de</strong>nt.<br />

• Indiquer si l'inci<strong>de</strong>nt est prioritaire ou non<br />

• Vali<strong>de</strong>r<br />

Et d’un point <strong>de</strong> vue "Test", l’exigence est planifiée mais le testeur<br />

n’a pas encore commencé le test donc la fonctionnalité est<br />

encore en "non testée".<br />

Pour le chez <strong>de</strong> projet, dans la fenêtre <strong>de</strong> gestion <strong>de</strong>s exigences,<br />

les informations ont été mises à jour :<br />

• le testeur a commencé ses tests.<br />

• <strong>de</strong>s inci<strong>de</strong>nts sont en attente <strong>de</strong> traitement par le<br />

développeur.<br />

Le chef <strong>de</strong> projet peut intervenir auprès du testeur affecté à<br />

cette exigence pour qu’il commence le test. Durant cette phase,<br />

le testeur va renseigner les inci<strong>de</strong>nts qu'ils rencontrent dans le<br />

"Centre <strong>de</strong> contrôles Qualité" :<br />

• Créer un nouvel inci<strong>de</strong>nt en cliquant sur le bouton "+".<br />

• Indiquer l'exigence associée. Si le testeur est sur la tâche <strong>de</strong><br />

L'état <strong>de</strong> développement est bien sûr passé dans l’état "à déboguer".<br />

Le chef <strong>de</strong> projet sait donc exactement où en est une<br />

64 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


exigence, tant au niveau qualité qu’au niveau développement..<br />

et documentation.<br />

Messagerie intégrée<br />

Les centres <strong>de</strong> contrôle sont également reliés à la messagerie<br />

intégrée <strong>de</strong> WinDev.<br />

C'est-à-dire que dès qu’un inci<strong>de</strong>nt est créé pour un développeur<br />

donné, le développeur reçoit automatiquement dans sa messagerie<br />

une notification.<br />

Il est bien sûr possible <strong>de</strong> prévenir également automatiquement<br />

le chef <strong>de</strong> projet par exemple en l'indiquant dans les options du<br />

centre <strong>de</strong> contrôle qualité.<br />

Le développeur et le chef <strong>de</strong> projet sont alors prévenus en temps<br />

réel <strong>de</strong>s inci<strong>de</strong>nts sur les modules qui les concernent.<br />

Analyse d'impact<br />

Les versions 14 intègrent également une puissante gestion <strong>de</strong> la<br />

qualité <strong>de</strong>s applications, et <strong>de</strong>s fonctionnalités , ce qui permet<br />

• aux chefs <strong>de</strong> projet <strong>de</strong> connaître à tout moment l’état d’avancement<br />

<strong>de</strong>s projets tant au niveau temps passé qu’au niveau<br />

validation <strong>de</strong>s fonctionnalités ;<br />

• aux développeurs <strong>de</strong> connaître l’état <strong>de</strong> leurs modules.<br />

Gestion <strong>de</strong> la qualité<br />

Et pour disposer <strong>de</strong> la vision globale <strong>de</strong> l’état <strong>de</strong>s projets, le chef<br />

<strong>de</strong> projet dispose également <strong>de</strong> statistiques sur les projets et sur<br />

chacune <strong>de</strong>s exigences.<br />

Notre astuce<br />

Il est également possible d’enregistrer un nouvel inci<strong>de</strong>nt automatiquement<br />

lors <strong>de</strong> l’envoi d’un message. Le développeur ou le<br />

testeur saisit son message décrivant l'inci<strong>de</strong>nt et coche l'option<br />

"enregistrer en tant qu'inci<strong>de</strong>nt".<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 65


Erreurs d'ihm<br />

Détecter <strong>de</strong>s problèmes d'IHM non visibles<br />

En version 14, WinDev signale, durant le développement<br />

<strong>de</strong>s applications, les erreurs d’IHM : les<br />

images non trouvées sur le disque, les libellés tronqués,<br />

<strong>de</strong>s textes non traduits, le même raccourci<br />

clavier utilisé pour 2 champs différents, etc …<br />

Une erreur <strong>de</strong> compilation d'IHM<br />

Tout comme les erreurs <strong>de</strong> compilation, les erreurs <strong>de</strong> compilation<br />

d'IHM informe le développeur d'un problème au sein du projet.<br />

Ces erreurs concernent les interfaces à proprement parlé <strong>de</strong><br />

l'application.<br />

Il existe différents types d'erreur <strong>de</strong> compilation d'IHM :<br />

• une image utilisée dans un champ image (ou tout autre champ)<br />

dont le chemin est erroné.<br />

• un libellé <strong>de</strong> champ tronqué dans une ou plusieurs langues.<br />

• un libellé <strong>de</strong> champ non renseigné dans une ou plusieurs langues.<br />

• une table ancrée dans la fenêtre/page mais pour laquelle aucune<br />

colonne n'est ancrée.<br />

• un raccourci clavier qui existe plusieurs fois au sein d'une même<br />

fenêtre.<br />

• ...<br />

Exemple <strong>de</strong> détection d'erreurs<br />

d'IHM<br />

Pour corriger ce type d'erreur, il suffit <strong>de</strong> double cliquer sur l'erreur<br />

affichée dans le volet.<br />

WinDev ouvre alors automatiquement la fenêtre sur laquelle<br />

porte l’erreur, ainsi que la fenêtre <strong>de</strong> <strong>de</strong>scription <strong>de</strong> l’élément<br />

qui pose problème.<br />

Dans le cas d'une erreur d'IHM indiquant une image manquante,<br />

la fenêtre <strong>de</strong> <strong>de</strong>scription du champ concerné va être ouverte et<br />

WinDev surligne en rouge le chemin incorrect.<br />

Il suffit alors <strong>de</strong> corriger le chemin <strong>de</strong> l'image et <strong>de</strong> sauvegar<strong>de</strong>r<br />

la modification.<br />

Dans le cas d'une erreur <strong>de</strong> libellé tronqué, la fenêtre contenant<br />

le libellé est ouverte et le libellé concerné est sélectionné.<br />

Il suffit alors <strong>de</strong> corriger la taille du libellé, par l'option "Adapter<br />

la taille" du menu contextuel.<br />

Ces erreurs sont signalées à chaque sauvegar<strong>de</strong> <strong>de</strong> fenêtre ou page,<br />

mais également à chaque recompilation du projet.<br />

Activation <strong>de</strong>s erreurs d'IHM<br />

Pour activer les erreurs d'IHM, il suffit <strong>de</strong> cliquer sur le bouton<br />

"Activer les erreurs d'IHM dans le volet "Erreurs <strong>de</strong> compilation".<br />

WinDev propose alors <strong>de</strong> recompiler le projet afin <strong>de</strong> détecter<br />

directement les erreurs d'IHM présentes dans le projet.<br />

66 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

WebDev<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 67


Référencement<br />

Optimiser le référencement d'un site<br />

WebDev<br />

• L'intégration d'une solution <strong>de</strong> paiement sécurisé (chapitre<br />

suivant <strong>de</strong> ce support <strong>de</strong> <strong>cours</strong>).<br />

• Les spécificités <strong>de</strong> développement du mo<strong>de</strong> AWP.<br />

L'exemple "Galerie" correspondant aux manipulations décrites ici<br />

est fourni sur le DVD.<br />

Rappel sur le mo<strong>de</strong> AWP<br />

Le mo<strong>de</strong> AWP (Active WebDev Page) permet <strong>de</strong> créer <strong>de</strong>s pages<br />

autonomes et adressables directement.<br />

La principale caractéristique technique du mo<strong>de</strong> AWP, c’est qu’il<br />

n’y a pas <strong>de</strong> contexte automatique. L’URL d’une page donnée reste<br />

toujours la même, donc elle est référençable par les moteurs <strong>de</strong><br />

recherche.<br />

Le développement d'un site en mo<strong>de</strong> AWP nécessite une programmation<br />

spécifique du fait qu'il n'y ait pas <strong>de</strong> contextes<br />

automatiques.<br />

WebDev permet <strong>de</strong> créer <strong>de</strong>s sites Internet, Intranet,<br />

et Extranet. Les équipes <strong>de</strong> développement disposent<br />

dans WebDev <strong>de</strong> plusieurs technologies intégrées :<br />

• Le mo<strong>de</strong> standard, avec la gestion <strong>de</strong>s sessions<br />

100% automatiques,<br />

• Le mo<strong>de</strong> AWP, qui gère les pages individuellement,<br />

• La génération PHP, qui permet <strong>de</strong> développer en<br />

WLangage et <strong>de</strong> générer du PHP. Ce mo<strong>de</strong> est détaillé<br />

dans ce même chapitre quelques pages plus loin.<br />

Selon l'objectif et les contraintes du site à réaliser,<br />

il est important <strong>de</strong> choisir la bonne technologie. Or<br />

pour réaliser un site Internet référençable et in<strong>de</strong>xable<br />

efficacement par les moteurs <strong>de</strong> recherche, il est<br />

nécessaire d'utiliser le mo<strong>de</strong> AWP.<br />

Remerciements à Patrice Vermeille. Tous droits réservés sur ses<br />

œuvres.<br />

Mise en œuvre<br />

Dans cet article, nous allons détailler la création pas à pas d'un site<br />

Catalogue en ayant pour objectif qu'il soit référençable à 100%.<br />

Tout au long du développement <strong>de</strong> ce site, les points suivants<br />

seront mis en avant :<br />

• <strong>de</strong>s points importants pour optimiser le référencement.<br />

• <strong>de</strong>s menus créés dynamiquement à partir <strong>de</strong> la base <strong>de</strong> données.<br />

Rappel sur le référencement<br />

Le référencement d'un site c'est l'in<strong>de</strong>xation <strong>de</strong> ce site par les<br />

différents moteurs <strong>de</strong> recherche.<br />

Il ne faut pas confondre le référencement avec le positionnement<br />

d'un site qui est le fait <strong>de</strong> retrouver ce site dans les premiers<br />

résultats du moteur <strong>de</strong> recherche.<br />

Pour référencer un site, les moteurs <strong>de</strong> recherche utilisent un<br />

principe simple. L'administrateur du site donne l'URL <strong>de</strong> la page<br />

d'accueil au moteur <strong>de</strong> recherche.<br />

Le moteur <strong>de</strong> recherche va appeler cette page régulièrement et<br />

la parcourir pour en in<strong>de</strong>xer le contenu. Toujours à partir <strong>de</strong> cette<br />

page, le moteur <strong>de</strong> recherche va ressortir tous les liens présents<br />

dans la page.<br />

Pour chaque lien, il va ensuite appeler la page qui est pointée par<br />

le lien et en in<strong>de</strong>xer le contenu. Et ainsi <strong>de</strong> suite.<br />

Normalement, si toutes vos pages sont liées entre elles et que vous<br />

n'avez pas <strong>de</strong> pages orphelines, toutes les pages <strong>de</strong> votre site sont<br />

référencées rien qu'en donnant l'adresse <strong>de</strong> la page d'accueil.<br />

Développement pas à pas<br />

Création du projet<br />

Tout commence par la création du projet en lui donnant un nom,<br />

ici "Galerie".<br />

Avec WebDev, il est possible <strong>de</strong> créer <strong>de</strong>s sites dynamiques avec<br />

contextes automatiques, <strong>de</strong>s sites AWP, <strong>de</strong>s sites PHP, on le verra<br />

en détail tout à l'heure, et également <strong>de</strong>s sites statiques et semidynamique.<br />

68 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Pour cet exemple, il s'agit d'un "Site dynamique AWP".<br />

Note : un point important pour le référencement : il faut nommer<br />

la page <strong>de</strong> manière intelligible car le nom <strong>de</strong> la page est généralement<br />

référencé. Dans notre exemple, nous avons utilisé <strong>de</strong>s<br />

caractères un<strong>de</strong>rscores ("_") entre les mots pour que le moteur<br />

<strong>de</strong> recherche sépare "Familles" et "Produits" et référence chacun<br />

<strong>de</strong>s mots.<br />

WebDev<br />

Il est également important <strong>de</strong> définir un titre, car cette information<br />

est aussi utilisée par les moteurs <strong>de</strong> recherche. Dans notre<br />

exemple, nous avons indiqué "Bienvenue sur le site <strong>de</strong> vente <strong>de</strong><br />

la Galerie d'art Tagnan".<br />

Les autres étapes <strong>de</strong> l'assistant permettent <strong>de</strong> configurer le projet :<br />

travail en équipe, charte <strong>de</strong> programmation, etc.<br />

Au niveau <strong>de</strong> la base <strong>de</strong> données, nous allons utiliser ici une base<br />

<strong>de</strong> données existante (au format HyperFileSQL) correspondant à<br />

l'analyse <strong>de</strong> l'exemple "Galerie".<br />

Modèle <strong>de</strong> page<br />

Une fois le projet créé, il est intéressant d'en définir rapi<strong>de</strong>ment<br />

l'aspect. La solution la plus simple est d'utiliser un modèle <strong>de</strong><br />

page (importer d'un site précé<strong>de</strong>nt ou créer à cette étape). Dans<br />

l'exemple "Galerie", c'est le modèle PAGEMOD_Charte.<br />

Page principale<br />

Une fois le modèle principal défini, il est possible <strong>de</strong> créer la page<br />

principale du site à partir <strong>de</strong> ce modèle. Cette page "page_familles_<br />

produits" contiendra le menu principal du site et présenteras les<br />

produits classés par catégorie.<br />

Page AWP<br />

Notez dans la <strong>de</strong>scription <strong>de</strong> la page, en bas, que pour spécifier<br />

qu'une page va être générée en mo<strong>de</strong> AWP, il suffit <strong>de</strong> cocher la<br />

case : "Génération en mo<strong>de</strong> AWP".<br />

Dans le cas <strong>de</strong> notre exemple, l'option est cochée par défaut, car<br />

le projet est défini comme un site AWP.<br />

Bien entendu, il est possible <strong>de</strong> mixer les <strong>de</strong>ux dans un même site,<br />

c'est à dire <strong>de</strong>s pages en mo<strong>de</strong> classique, avec gestion automatique<br />

du contexte, et <strong>de</strong>s pages en mo<strong>de</strong> AWP.<br />

Menu Principal<br />

Le menu principal va donner l'accès à toutes les pages <strong>de</strong> mon<br />

site. Dans l'exemple "Galerie", nous allons créer <strong>de</strong>ux entrées <strong>de</strong><br />

menu :<br />

• une entrée <strong>de</strong> menu "Familles" : cette entrée va contenir toutes<br />

les catégories d'oeuvres d'art.<br />

• une entrée <strong>de</strong> menu "Contactez-nous" : pour permettre aux<br />

internautes <strong>de</strong> contacter, par email, le service commercial <strong>de</strong><br />

la galerie d'art.<br />

Page <strong>de</strong> contact<br />

Commençons par créer la page <strong>de</strong> contact. Cette nouvelle page<br />

"page_contact" sera également basée sur le modèle MDL_Catalogue<br />

et aura également un titre explicite "Contactez-Nous".<br />

Cette page va contenir :<br />

• Un champ <strong>de</strong> saisie simple avec le libellé " Sujet : " afin que<br />

l'internaute puisse indiquer un titre à sa <strong>de</strong>man<strong>de</strong> <strong>de</strong> contact<br />

• un champ <strong>de</strong> saisie HTML qui va contenir le message <strong>de</strong> l'inter-<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 69


Référencement (suite)<br />

Optimiser le référencement d'un site<br />

WebDev (SUITE)<br />

naute. Afin <strong>de</strong> le rendre plus lisible, je veux offrir la possibilité<br />

aux internautes <strong>de</strong> saisir du texte mis en forme.<br />

Pour que l'internaute voit immédiatement qu'il pourra mettre en<br />

forme sa <strong>de</strong>man<strong>de</strong>, nous allons <strong>de</strong>man<strong>de</strong>r à "toujours afficher la<br />

barre <strong>de</strong> mise en forme".<br />

Une fois les champs <strong>de</strong> saisie mis en place,il faut ajouter <strong>de</strong>ux<br />

liens :<br />

• Un lien "Envoyer" pour envoyer effectivement la <strong>de</strong>man<strong>de</strong> <strong>de</strong><br />

contact.<br />

• Un lien "Retour" (optionnel) pour retourner à la page d'accueil.<br />

Le lien "envoyer" sert ici à envoyer le mail correspondant. Le<br />

co<strong>de</strong> est alors très simple puisqu'il suffit d'utiliser les fonctions<br />

EmailXXX du WLangage.<br />

// Préparation <strong>de</strong> l'email<br />

EmailRAZ()<br />

Email.Expéditeur = "pagecontact@magallerie.com"<br />

Email.Destinataire = "contact@magallerie.com"<br />

Email.Sujet = SAI_Sujet<br />

Email.HTML = SAI_SaisieTexteHTML<br />

// Envoi du message<br />

SI EmailEnvoieMessage(gsUtilisateur)= Faux ALORS<br />

// Affichage d'un message d'erreur<br />

Erreur("Le message n'a pas pu être envoyé",...<br />

"Merci <strong>de</strong> réessayer ultérieurement.")<br />

RETOUR<br />

FIN<br />

Lien référençable<br />

Pour qu’un lien soit référençable par les moteurs <strong>de</strong> recherche,<br />

il faut que l’adresse du lien soit connue et définie au moment <strong>de</strong><br />

l'affichage <strong>de</strong> la page dans le navigateur.<br />

Pour définir un lien ainsi référençable :<br />

• Soit la page à appeler n'attend pas <strong>de</strong> paramètres, auquel cas,<br />

dans la <strong>de</strong>scription du lien ou du bouton, il suffit <strong>de</strong> sélectionner<br />

l'action "Afficher la page" et <strong>de</strong> choisir la page à afficher.<br />

// Accès aux détails d'un produit<br />

LIEN_Envoyer..URL = ...<br />

"<strong>de</strong>tails.awp?idproduit="+gnIdProduit<br />

Dans notre cas, sur le lien retour, on veut simplement retourner<br />

à la page d'accueil. La page d'accueil n'attend pas <strong>de</strong> paramètres,<br />

il suffit donc <strong>de</strong> définir la page <strong>de</strong>stination dans la <strong>de</strong>scription<br />

du lien.<br />

Notre conseil : essayer d'avoir le maximum <strong>de</strong> liens "référençables"<br />

dans vos sites Internet. Vérifiez également que chaque page est<br />

accessible par au moins un lien référençable.<br />

Ajout <strong>de</strong> la page <strong>de</strong> contact dans le menu<br />

Dans le menu, nous allons <strong>de</strong>man<strong>de</strong>r à afficher la page <strong>de</strong> contact.<br />

Comme précé<strong>de</strong>mment, la page <strong>de</strong> contact n'attend pas <strong>de</strong> paramètres,<br />

nous allons donc simplement définir la page à afficher<br />

dans la <strong>de</strong>scription <strong>de</strong> l'option <strong>de</strong> menu.<br />

Page principale<br />

Une fois la page <strong>de</strong> contact terminée, nous allons maintenant<br />

définir la page principale du site.<br />

Cette page va contenir la liste <strong>de</strong> toutes les oeuvres classées par<br />

famille. Et pour que l'internaute puisse filtrer par famille, nous<br />

allons créer le menu dynamiquement à partir <strong>de</strong>s familles stockées<br />

dans la base <strong>de</strong> données.<br />

1. Recherche <strong>de</strong>s produits<br />

Les produits seront affichés dans une zone répétée, et pour<br />

pouvoir filtrer simplement par famille <strong>de</strong> produits, nous allons<br />

utiliser une requête :<br />

1. Créer une nouvelle requête <strong>de</strong> sélection avec l'éditeur <strong>de</strong><br />

requête.<br />

2. Sélectionner tout le fichier "Produit".<br />

3. Donner un nom à la requête : REQ_ProduitParCatégorie.<br />

4. Ajouter le libellé <strong>de</strong> la catégorie dans le fichier famille (pouri<br />

afficher la famille du produit).<br />

5. Ajouter un tri sur le libellé <strong>de</strong> la famille.<br />

Pour que l'internaute puisse filtrer sur la famille, nous allons<br />

ajouter une condition sur l'i<strong>de</strong>ntifiant <strong>de</strong> la famille.<br />

• Soit la page à appeler attend <strong>de</strong>s paramètres, auquel cas, il est<br />

nécessaire <strong>de</strong> donner la cible du lien par programmation avec la<br />

propriété ..URL.<br />

70 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


WebDev<br />

La requête est définie, il suffit maintenant <strong>de</strong> créer la zone répétée<br />

qui va afficher les produits issus <strong>de</strong> cette requête.<br />

2. Définition <strong>de</strong> la zone répétée<br />

Il faut maintenant créer la zone répétée basée sur la requête<br />

créée précé<strong>de</strong>mment. Cette zone répétée va afficher les rubriques<br />

suivantes :<br />

• le libellé du produit,<br />

• la <strong>de</strong>scription,<br />

• la photo,<br />

• le prix,<br />

• et le libellé <strong>de</strong> la famille.<br />

Cette zone répétée n'aura pas d'interaction Ajax avec le reste<br />

<strong>de</strong> la page, nous allons décocher le mo<strong>de</strong> Ajax et profiter <strong>de</strong> la<br />

possibilité d'afficher les données sur plusieurs colonnes : ici 3<br />

colonnes sur 3 lignes.<br />

Une fois la rupture définie, il suffit <strong>de</strong> personnaliser le haut <strong>de</strong><br />

rupture (style, couleur) et d'ajouter le libellé <strong>de</strong> la famille dans<br />

le haut <strong>de</strong> rupture.<br />

Dans cet exemple, nous n'avons pas besoin du bas <strong>de</strong> rupture, il<br />

suffit donc <strong>de</strong> le rendre invisible.<br />

4. Filtrage <strong>de</strong>s produits<br />

À cette étape, il faut que le menu <strong>de</strong>s familles <strong>de</strong> produits permette<br />

à l'internaute <strong>de</strong> filtrer les produits sur les familles.<br />

Pour cela, la famille <strong>de</strong> produits à afficher va être donnée en<br />

paramètre à la page :<br />

1. Déclarer un paramètre à la page<br />

2. Donner en paramètre l'i<strong>de</strong>ntifiant <strong>de</strong> la famille.<br />

PROCEDURE PAGE_Familles_Produits(...<br />

gnIDFamille = PageParamètre("famille"))<br />

Nous utilisons ici la fonction PageParamètre du WLangage pour<br />

récupérer l'i<strong>de</strong>ntifiant <strong>de</strong> la famille.<br />

C'est simplement pour mieux référencer le site puisque les paramètres<br />

sur les urls sont également in<strong>de</strong>xés. Donc ici, le mot "famille"<br />

sera in<strong>de</strong>xé pour ma page.<br />

3. Activer le filtre en spécifiant en paramètre la famille à la<br />

requête. Ce co<strong>de</strong> est à placer, par exemple, dans le co<strong>de</strong> la zone<br />

répétée.<br />

Une fois la zone répétée créée, il suffit d'organiser un peu les<br />

champs, définir la couleur <strong>de</strong>s lignes, etc.<br />

3. Mise en place d'une rupture<br />

Pour avoir les produits séparés par famille, nous allons ajouter une<br />

rupture sur la zone répétée. L'ajout d'une rupture s'effectue <strong>de</strong>puis<br />

la <strong>de</strong>scription <strong>de</strong> la zone répétée : il suffit d'indiquer l'attribut<br />

servant <strong>de</strong> rupture. Dans notre exemple, il s'agit bien entendu <strong>de</strong><br />

l'attribut contenant le libellé <strong>de</strong> la famille <strong>de</strong> produits.<br />

//Paramètres <strong>de</strong> la requête REQ_ProduitParFamille<br />

SI gnIDFamille = "" ALORS<br />

Ma<strong>Source</strong>.pIDRecherche = Null<br />

SINON<br />

Ma<strong>Source</strong>.pIDRecherche = gnIDFamille<br />

FIN<br />

Rappel : Lorsqu'on passe un paramètre null à une requête, toutes<br />

les conditions définies sur ce paramètre sont ignorées. Donc si le<br />

paramètre passé à la page est vi<strong>de</strong>, toutes les familles <strong>de</strong> produits<br />

seront affichées.<br />

4. Filtrage <strong>de</strong>s produits <strong>de</strong>puis le menu<br />

La page accepte maintenant un paramètre pour filtrer le contenu<br />

par famille. Il faut maintenant créer les options <strong>de</strong> menu correspondantes.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 71


Référencement (suite)<br />

Optimiser le référencement d'un site<br />

WebDev (SUITE)<br />

Première étape : l'affichage <strong>de</strong> tous les produits.<br />

• Créer une option <strong>de</strong> menu avec pour libellé "Toutes les<br />

familles".<br />

• Indiquer l'action à effectuer : afficher la page sans paramètres,<br />

donc directement dans la fenêtre <strong>de</strong> <strong>de</strong>scription.<br />

Secon<strong>de</strong> étape : la création d'une option <strong>de</strong> menu pour toutes les<br />

familles <strong>de</strong> produits.<br />

Toutes ces familles sont stockées dans la base <strong>de</strong> données, il est<br />

donc intéressant d'utiliser la création dynamique <strong>de</strong> menu (nouveauté<br />

<strong>de</strong>s versions 14).<br />

5. Remplissage dynamique du menu<br />

Pour définir un menu dynamiquement, il suffit d'utiliser les fonctions<br />

MenuXXX. Dans le co<strong>de</strong> <strong>de</strong> déclaration global <strong>de</strong> la fenêtre, nous<br />

allons appeler une procédure AjouterCatégories qui va ajouter<br />

les options <strong>de</strong> menu correspondant aux familles <strong>de</strong> produits.<br />

Le principe est simple : parcourir les familles <strong>de</strong> la base <strong>de</strong> données,<br />

et pour chaque famille, ajouter une option <strong>de</strong> menu.<br />

Ici, point important, le site doit être référencable. Il faut donc<br />

utiliser la fonction MenuAjouteOptionURL du WLangage et non<br />

MenuAjouteOption.<br />

En effet, la fonction MenuAjouteOptionURL permet <strong>de</strong> définir un<br />

lien statique pour l'option <strong>de</strong> menu, donc un lien que les moteurs<br />

<strong>de</strong> recherche pourront suivre.<br />

La fonction MenuAjouteOptionURL prend en paramètre :<br />

• le menu parent dans lequel il doit ajouter l'option; ici, c'est<br />

"familles".<br />

• le nom <strong>de</strong> l'option qu'il doit créer, c'est le nom logique <strong>de</strong> l'option<br />

<strong>de</strong> menu.<br />

• le libellé <strong>de</strong> l'option <strong>de</strong> menu<br />

• et l'URL qui doit être appelée lors du clic sur l'option <strong>de</strong><br />

menu.<br />

Dans notre cas, cela ne va pas être la même adresse pour chaque<br />

catégorie, il faut donc construire l'URL dynamiquement.<br />

L'URL, c'est l'URL <strong>de</strong> la page actuelle, que l'on récupère avec<br />

la fonction PageAdresse du WLangage, à laquelle on ajoute le<br />

paramètre indiquant l'i<strong>de</strong>ntifiant <strong>de</strong> la famille.<br />

// Par<strong>cours</strong> <strong>de</strong>s familles<br />

POUR TOUT FAMILLE<br />

// URL pour cette famille<br />

sURL = PageAdresse() + ["/"] + ...<br />

"?famille=" + FAMILLE.IDFamille<br />

// Ajoute une option <strong>de</strong> menu<br />

MenuAjouteOptionURL(OPT_Famille, ...<br />

"FAMILLE" + FAMILLE.IDFamille, ...<br />

FAMILLE.LibelleFamille, ...<br />

sURL)<br />

FIN<br />

Le caractère "?" dans une URL indique au serveur que ce qui suit<br />

sont <strong>de</strong>s paramètres.<br />

Astuce : l'opérateur crochet permet <strong>de</strong> faire <strong>de</strong> la concaténation<br />

optionnelle <strong>de</strong> chaîne. Dans notre exemple, le caractère "/" sera<br />

ajouté uniquement si l'adresse renvoyée par la fonction PageAdresse<br />

ne se termine pas le caractère "/".<br />

À cette étape, le menu est défini et les liens sont définis.<br />

Définition <strong>de</strong> mots-clés par page<br />

Afin d'améliorer le référencement, il est possible <strong>de</strong> définir les<br />

mots-clés <strong>de</strong>s pages. Les moteurs <strong>de</strong> recherche in<strong>de</strong>xent les motsclés<br />

d'une page en plus du contenu même <strong>de</strong> la page. Il est donc<br />

important <strong>de</strong> les spécifier.<br />

Dans notre exemple, ce que nous allons faire, c'est ajouter les<br />

libellés <strong>de</strong>s familles en mots-clés dans la page.<br />

En version 14, il est possible d'ajouter dynamiquement <strong>de</strong>s mots-clés<br />

dans une page grâce à la propriété ..MotsClé du WLangage.<br />

// Ajoute le libellé <strong>de</strong> la famille<br />

// en mot-clé <strong>de</strong> la page<br />

MaPage..MotsClés += [","] +<br />

FAMILLE.LibelleFamille<br />

L'opérateur "+=" permet d'ajouter les mots-clés dynamiques à ceux<br />

déjà définis en statique dans l'éditeur.<br />

Rappel : la définition <strong>de</strong>s mots-clés statiques s'effectue dans<br />

l'onglet "Détail" <strong>de</strong> la fenêtre <strong>de</strong> <strong>de</strong>scription <strong>de</strong> la page (bouton "<br />

Éditer les expressions et les mots-clés").<br />

Fichier SiteMaps<br />

La fréquence <strong>de</strong> mise à jour d'une page et sa priorité permettent<br />

également d'améliorer le référencement d'un site. Certains moteurs<br />

<strong>de</strong> recherche, dont Google, recherchent et analysent un fichier<br />

associé au site, un fichier "SiteMaps".<br />

Ce fichier “SiteMaps” sert principalement à indiquer la fréquence<br />

<strong>de</strong> mise à jour <strong>de</strong> chaque page et l'importance <strong>de</strong> chaque page<br />

d'un site.<br />

Ce fichier "SiteMaps" sera généré automatiquement par WebDev<br />

à partir <strong>de</strong>s informations indiquées dans la zone "Référencement"<br />

<strong>de</strong> la fenêtre <strong>de</strong> <strong>de</strong>scription <strong>de</strong> la page (onglet "Détail").<br />

72 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Par<strong>cours</strong> <strong>de</strong>s familles<br />

POUR TOUT FAMILLE<br />

// Ajoute une page pour la famille<br />

CMOD_Plan.LienAjoute("Familles", ...<br />

FAMILLE.LibelleFamille, ...<br />

"./page_familles_produits.awp?famille="+...<br />

FAMILLE.IDFamille)<br />

FIN<br />

WebDev<br />

Pour cela, il suffit <strong>de</strong> parcourir toutes les catégories et pour chaque<br />

catégorie, d'ajouter un lien dans le modèle <strong>de</strong> champs.<br />

C'est le même principe que précé<strong>de</strong>mment, avec l'adresse <strong>de</strong> la<br />

page et le paramètre à passer à la page.<br />

Ici, c'est l'i<strong>de</strong>ntifiant <strong>de</strong> la famille.<br />

Plan du site<br />

Autre point important pour le référencement : disposer d'une page<br />

contenant le plan du site.<br />

Le plan du site est pratique pour <strong>de</strong>ux raisons :<br />

1. Il permet aux internautes <strong>de</strong> trouver les informations simplement<br />

sur le site.<br />

2. Il permet d'améliorer le référencement : toutes les pages sont<br />

présentées dans le plan du site et sont donc référençables.<br />

Pour mettre en place ce plan du site, nous allons donc créer une<br />

nouvelle page "PAGE_plan" avec "Plan du site <strong>de</strong> la galerie d'art<br />

Tagnan" comme titre.<br />

WebDev dispose d'un champ spécifique : le champ "plan du site".<br />

Le champ plan du site <strong>de</strong> WebDev est extrêmement pratique pour<br />

les sites statiques et semi-dynamique.<br />

Il permet <strong>de</strong> créer automatiquement le plan du site sans co<strong>de</strong> à<br />

partir <strong>de</strong>s pages décrites sous l'éditeur.<br />

Notre exemple, lui, a seulement <strong>de</strong>ux pages sous l'éditeur, mais<br />

a potentiellement autant <strong>de</strong> pages que <strong>de</strong> familles plus la page<br />

contacts.<br />

Afin <strong>de</strong> pouvoir référencer toutes ces pages, nous allons utiliser<br />

un modèle <strong>de</strong> champs permettant <strong>de</strong> faire un plan du site complètement<br />

dynamique :<br />

• Importer le modèle <strong>de</strong> champs MDLC_PLANDESITE dans le<br />

projet<br />

• Ajouter un champ "modèle <strong>de</strong> champs" dans la page "page_<br />

plan".<br />

• Initialiser le modèle <strong>de</strong> champs avec la page "page_contacts"<br />

dans le co<strong>de</strong> d'initialisation <strong>de</strong> la page "page_plan".<br />

// Ajoute la page <strong>de</strong>s contacts<br />

CMOD_Plan.NiveauAjoute("Contactez-nous",...<br />

"./page_contact.awp")<br />

• Ajouter la page <strong>de</strong>s familles (toujours dans le co<strong>de</strong> d'initialisation<br />

<strong>de</strong> la page "page_plan".<br />

// Ajoute la page <strong>de</strong> familles<br />

CMOD_Plan.NiveauAjoute("Familles",...<br />

"./page_familles_produits.awp")<br />

• Ajouter toutes les familles <strong>de</strong> produit sprésentes dans la base<br />

<strong>de</strong> données<br />

Plan du site <strong>de</strong>puis la page principale<br />

Il ne reste plus qu'à ajouter un lien dans la page principale pour<br />

avoir accès au plan du site. Pour cela, il suffit d'ajouter une option<br />

<strong>de</strong> menu "plan" et d'indiquer dans la fenêtre <strong>de</strong> <strong>de</strong>scription <strong>de</strong><br />

l'option qu'il faut afficher la page "page_plan".<br />

Le site dispose désormais d'un plan du site complètement dynamique<br />

qui sera donc automatiquement "à jour", et ce même lors d'ajout,<br />

modification ou suppression <strong>de</strong> familles <strong>de</strong> produits.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 73


paiement sécurisé<br />

Mise en place d'un système <strong>de</strong><br />

paiement sécurisé<br />

Composant PaiementSécurisé<br />

Pour gérer le paiement sécurisé, le composant PaiementSécurisé<br />

livré sur le DVD du support <strong>de</strong> <strong>cours</strong> est utilisé.<br />

Ce composant permet <strong>de</strong> gérer le paiement sur différentes plateformes<br />

bancaires :<br />

• Paybox,<br />

• CyberMut (CIC, Crédit mutuel, OBC),<br />

D'autres plateformes <strong>de</strong> paiement seront disponibles dans les<br />

prochaines versions <strong>de</strong> ce composant.<br />

Pour plus d'informations sur la solution <strong>de</strong> paiement sécurisé<br />

CYBERMUT, consultez le site http://<strong>www</strong>.cmcicpaiement.fr<br />

Paiement externalisé : principes<br />

Il existe différents types <strong>de</strong> paiement sur Internet. Un type <strong>de</strong><br />

paiement sécurisé particulièrement intéressant est le paiement<br />

externalisé : le paiement est géré par un prestataire <strong>de</strong> confiance<br />

qui s’occupe <strong>de</strong> tout.<br />

L’avantage <strong>de</strong> ce principe <strong>de</strong> paiement rési<strong>de</strong> dans le fait que les<br />

aspects <strong>de</strong> sécurité, cryptage, certificat,etc. ne sont pas gérés<br />

par le développeur <strong>de</strong> l'application.<br />

Lors du développement d'un site <strong>de</strong> vente en ligne, la<br />

partie concernant le paiement est souvent délicate à<br />

mettre en œuvre. Il est nécessaire <strong>de</strong> s'interfacer avec<br />

la solution proposée par un prestataire bancaire et<br />

chaque prestataire propose une solution différente.<br />

Le composant "PaiementSécurisé", disponible sur le<br />

DVD <strong>de</strong> ce support <strong>de</strong> <strong>cours</strong>, permet d'intégrer rapi<strong>de</strong>ment<br />

et simplement les solutions <strong>de</strong> paiement <strong>de</strong><br />

différents prestataires.<br />

Note : Le composant "PaiementSécurisé "est un exemple d'intégration<br />

<strong>de</strong> différentes solutions <strong>de</strong> paiement sécurisé dans un site<br />

WebDev. Il ne s'agit pas d'une préconisation <strong>de</strong> ces systèmes <strong>de</strong><br />

paiement par la société PC SOFT.<br />

Il est rappelé que l'utilisation d'un système <strong>de</strong> paiement nécessite<br />

la souscription d'un contrat auprès du prestataire bancaire.<br />

Le principe <strong>de</strong> ce paiement est très simple :<br />

• le client remplit son panier et vali<strong>de</strong> sa comman<strong>de</strong>.<br />

• le site va envoyer la <strong>de</strong>man<strong>de</strong> <strong>de</strong> paiement au serveur du prestataire<br />

spécialisé.<br />

• le prestataire sécurisé affiche à l’internaute une page contenant<br />

le formulaire <strong>de</strong> saisie <strong>de</strong>s informations bancaires.<br />

• l’internaute saisit son n° <strong>de</strong> carte bleue.<br />

• le prestataire fait une <strong>de</strong>man<strong>de</strong> d’autorisation auprès du groupement<br />

carte bancaire.<br />

• le prestataire renvoie le n° <strong>de</strong> l’accord au site marchand.<br />

• le site marchand est payé et peut vali<strong>de</strong>r la comman<strong>de</strong> <strong>de</strong><br />

l’internaute.<br />

Utilisation du composant<br />

Pour utiliser le composant PaiementSécurisé, il est nécessaire <strong>de</strong><br />

l'importer dans l'application WebDev souhaitée.<br />

Pour importer un composant, il suffit d'utiliser le menu "Atelier ..<br />

Composant .. Importer un composant dans le projet".<br />

À la fin <strong>de</strong> l'import, WebDev affiche la fenêtre <strong>de</strong> documentation<br />

du composant. Cette documentation fournit les différentes<br />

fonctions, variables et constantes disponibles pour effectuer un<br />

paiement en ligne.<br />

74 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


WebDev<br />

Définition d'un paiement<br />

Dans un premier temps, il est nécessaire <strong>de</strong> déclarer un paiement.<br />

Pour l'exemple, le paiement s'effectuera auprès <strong>de</strong> CyberMut<br />

Crédit Mutuel.<br />

// Crée un objet <strong>de</strong> paiement sécurisé<br />

// dédié à Cybertmut Crédit Mutuel<br />

MonPaiement est un …<br />

PaiementSécurisé(CréditMutuel)<br />

Exemples <strong>de</strong> gestion <strong>de</strong> panier<br />

WebDev propose, en standard :<br />

• un composant "Composant Panier". Ce composant permet <strong>de</strong><br />

gérer <strong>de</strong> "A à Z" un panier <strong>de</strong> site <strong>de</strong> vente.<br />

• <strong>de</strong>ux exemples <strong>de</strong> site vitrine qui gèrent un panier : "WW_<br />

VitrineAWP" et "Catalogue Internet".<br />

Lors <strong>de</strong> l'utilisation du composant <strong>de</strong> paiement, il est nécessaire<br />

<strong>de</strong> spécifier les paramètres du contrat défini avec le prestataire<br />

bancaire. Ces paramètres sont fournis par le prestataire lors <strong>de</strong><br />

la souscription d'un contrat auprès <strong>de</strong> leurs services. Dans le cas<br />

d'un paiement CyberMut, les paramètres sont :<br />

• le numéro du contrat,<br />

• le co<strong>de</strong> <strong>de</strong> la société,<br />

• une phrase clé,<br />

• une clé calculée.<br />

• le numéro <strong>de</strong> comman<strong>de</strong>. Ce numéro <strong>de</strong> comman<strong>de</strong> doit absolument<br />

être unique (par exemple, la dateheure courante).<br />

• l'adresse <strong>de</strong>s pages à appeler lorsque le paiement est validé,<br />

refusé ou abandonné.<br />

// Données du contrat (test)<br />

MonPaiement:Contrat = 1234567<br />

MonPaiement:Co<strong>de</strong>Société = "TESTSOC"<br />

MonPaiement:PhraseClé = "Phrase clé"<br />

MonPaiement:CléCalculée = "abc<strong>de</strong>f1234"<br />

// Définit le numéro <strong>de</strong> comman<strong>de</strong> (unique)<br />

MonPaiement:NuméroComman<strong>de</strong> = …<br />

DateDuJour + Maintenant<br />

// Page à appeler lors <strong>de</strong> la validation<br />

MonPaiement:SurValidationPaiement = …<br />

"./ValidationPaiement.awp"<br />

Le paiement se lance ensuite par la procédure Paiement du<br />

composant. Cette fonction attend en paramètres :<br />

• les informations du paiement rempli précé<strong>de</strong>mment,<br />

• le montant à payer,<br />

• l'adresse email à laquelle le site <strong>de</strong> paiement doit envoyer la<br />

confirmation <strong>de</strong> paiement. Il s'agit donc <strong>de</strong> l'adresse du client.<br />

// Lance la procédure <strong>de</strong> paiement<br />

Paiement(MonPaiement, ATT_PrixHT, …<br />

"celine.dalmosso@gmail.com")<br />

Remarque :<br />

Pour tester le composant, il est possible d'utiliser <strong>de</strong>s informations<br />

<strong>de</strong> test (numéro <strong>de</strong> carte, numéro <strong>de</strong> contrat, etc.). Cela permet<br />

<strong>de</strong> vali<strong>de</strong>r le fonctionnement sans effectuer <strong>de</strong> transaction<br />

bancaires en réel.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 75


MASHUP<br />

Mixer <strong>de</strong>s données HyperFileSQL et <strong>de</strong>s<br />

données Google<br />

Le Mashup est un concept qui consiste à mettre en<br />

commun <strong>de</strong>s informations provenant <strong>de</strong> sources différentes.<br />

Cela permet <strong>de</strong> créer une véritable liaison entre <strong>de</strong>s<br />

logiciels différents.<br />

WinDev et WebDev disposent <strong>de</strong> fonctionnalités pour<br />

simplifier le mashup : le databinding, mais également<br />

les différentes fonctions en lien avec Google.<br />

Projet d'illustration<br />

Les projets utilisés pour illustrer ce sujet sont :<br />

• "WW Mashup". Pour utiliser cet exemple, il est nécessaire <strong>de</strong><br />

renseigner les informations <strong>de</strong> connexion (compte et mot <strong>de</strong> passe)<br />

dans le co<strong>de</strong> d'initialisation <strong>de</strong> projet.<br />

• "WD Google".<br />

Manipulation d'agendas Google en<br />

WinDev<br />

L'exemple "WD Google" est une application qui permet <strong>de</strong> visualiser<br />

les ren<strong>de</strong>z-vous <strong>de</strong> la journée d'un commercial donné, et d'ajouter<br />

<strong>de</strong> nouveaux ren<strong>de</strong>z-vous.<br />

Connexion au compte Google<br />

Dans un premier temps, il est nécessaire <strong>de</strong> se connecter au compte<br />

Google du commercial.<br />

Pour établir une connexion à un compte Google, le WLangage<br />

dispose d'un type <strong>de</strong> variable spécifique : gglConnexion. Ce type<br />

<strong>de</strong> variable permet <strong>de</strong> paramétrer la connexion à un compte très<br />

simplement.<br />

// Objet <strong>de</strong> connexion au compte Google<br />

MaConnexion est un gglConnexion<br />

Il suffit ensuite <strong>de</strong> spécifier les informations <strong>de</strong> connexion à cette<br />

variable : adresse email, mot <strong>de</strong> passe.<br />

// Spécifie les informations <strong>de</strong> connexion<br />

MaConnexion.Email = "email@societe.fr"<br />

MaConnexion.MotDePasse = "mot<strong>de</strong>passe"<br />

Il suffit enfin d'établir la connexion à proprement parlé, à l'ai<strong>de</strong> <strong>de</strong><br />

la fonction gglConnecte, en lui passant en paramètre la variable<br />

contenant les informations <strong>de</strong> connexion.<br />

// Etablit la connexion<br />

GglConnecte(MaConnexion)<br />

Remarque :<br />

La connexion est nécessaire pour utiliser différentes familles <strong>de</strong><br />

fonctions Google : les agendas, les cartes, les contacts, picasa,<br />

les documents.<br />

Récupération d'un agenda<br />

Pour afficher les ren<strong>de</strong>z-vous d'un agenda donné, il est nécessaire<br />

<strong>de</strong> récupérer l'agenda. Pour récupérer un agenda, il suffit d'utiliser<br />

la fonction WLangage gglRécupèreAgenda. Cette fonction prend<br />

en paramètres :<br />

• la connexion google à utiliser.<br />

• le nom <strong>de</strong> l'agenda à récupérer. En effet, il est possible qu'un<br />

même compte Google dispose <strong>de</strong> plusieurs agendas différents.<br />

Cette fonction renvoie une variable <strong>de</strong> type gglAgenda. Cette<br />

variable est en fait une structure contenant <strong>de</strong>s informations sur<br />

les ren<strong>de</strong>z-vous.<br />

// Objet Agenda<br />

MonAgenda est un gglAgenda<br />

// Récupère l'agenda "Agenda professionnel"<br />

MonAgenda = GglRécupèreAgenda(…<br />

MaConnexion, …<br />

"Agenda Professionnel")<br />

Affichage <strong>de</strong>s ren<strong>de</strong>z-vous dans une table<br />

Une fois l'agenda récupéré, les ren<strong>de</strong>z-vous sont affichés dans<br />

une table.<br />

Cette table utilise le databinding : les informations affichées sont<br />

directement issues <strong>de</strong> la variable MonAgenda, et plus précisément<br />

du tableau Evénement <strong>de</strong> cette variable.<br />

Les colonnes sont reliées aux différentes variables :<br />

• le titre du ren<strong>de</strong>z-vous,<br />

76 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


• la date <strong>de</strong> début,<br />

• la date <strong>de</strong> fin,<br />

• le contenu <strong>de</strong>scriptif.<br />

Remarque :<br />

Il est possible <strong>de</strong> remplir la table par programmation, en parcourant<br />

le tableau Evénement <strong>de</strong> la variable MonAgenda.<br />

// Objet Evénement<br />

MonRen<strong>de</strong>zVous est un gglEvénement<br />

// Par<strong>cours</strong> <strong>de</strong>s ren<strong>de</strong>z-vous <strong>de</strong> l'agenda<br />

POUR TOUT ELEMENT MonRen<strong>de</strong>zVous DE …<br />

MonAgenda.Evénement<br />

// Ajoute le ren<strong>de</strong>z-vous dans la table<br />

TableAjouteLigne(TABLE_Evénement, …<br />

MonRen<strong>de</strong>zVous.Titre,<br />

MonRen<strong>de</strong>zVous.DateDébut,<br />

MonRen<strong>de</strong>zVous.DateFin,<br />

MonRen<strong>de</strong>zVous.Contenu)<br />

FIN<br />

Ajout d'événements dans un agenda<br />

Pour ajouter un événement dans un agenda, il est requis d’avoir<br />

préalablement établi la connexion et récupéré l'agenda dans une<br />

variable gglAgenda.<br />

Un événement peut être manipulé par une variable gglEvénement.<br />

Pour ajouter un événement à un agenda, il suffit donc <strong>de</strong> :<br />

• déclarer un objet gglEvénement.<br />

// Objet Evénement<br />

MonRen<strong>de</strong>zVous est un gglEvénement<br />

• remplir les informations qui définissent cet événement. Pour<br />

faciliter le remplissage, l'exemple "WD Google" dispose d'une<br />

fenêtre "FEN_AjoutRDV". Cette fenêtre utilise le databinding :<br />

les champs <strong>de</strong> cette fenêtre sont liés directement aux membres<br />

<strong>de</strong> la variable MonRen<strong>de</strong>zVous. Il suffit alors d'utiliser la fonction<br />

EcranVers<strong>Source</strong> qui permet <strong>de</strong> récupérer les valeurs <strong>de</strong>s champs<br />

directement dans la variable.<br />

// Récupération <strong>de</strong>s informations<br />

EcranVers<strong>Source</strong>()<br />

• ajouter l'événement défini dans le tableau <strong>de</strong>s événements <strong>de</strong><br />

l'agenda. Cet ajout est réalisé par la fonction Ajoute.<br />

// Ajout du ren<strong>de</strong>z-vous à l'agenda<br />

Ajoute(MonAgenda.Evénement, MonRen<strong>de</strong>zVous)<br />

• mettre à jour l'agenda chez Google par la fonction gglEcrit.<br />

Cette fonction permet <strong>de</strong> mémoriser les informations <strong>de</strong>s variables<br />

gglXXX sur le serveur. Cette fonction prend en paramètres<br />

un objet gglConnexion et l'objet à mettre à jour (gglAgenda,<br />

gglContact, etc.).<br />

// Mémorise l'agenda<br />

GglEcrit(MaConnexion,MonAgenda)<br />

simplifiée.<br />

Fonctionnement<br />

La page WebDev va chercher les informations <strong>de</strong> ren<strong>de</strong>z-vous dans<br />

l’agenda Google, grâce aux fonctions WLangage. Chaque ren<strong>de</strong>zvous<br />

est associé à une adresse email d'un contact.<br />

// Récupère l'agenda professionnel<br />

Agenda = GglRécupèreAgenda(MaConnexion,…<br />

"Agenda Professionnel")<br />

// Définit les dateheures <strong>de</strong> récupération<br />

DateDébut..PartieHeure = "080000"<br />

DateFin..PartieHeure = "230000"<br />

// Récupération <strong>de</strong>s événements qui composent<br />

l'agenda pour le jour courant<br />

GglRemplitAgenda(MaConnexion,MonAgenda, …<br />

DateDébut, DateFin)<br />

Pour chaque ren<strong>de</strong>z-vous, les informations du contact sont récupérées<br />

directement dans une base <strong>de</strong> données HyperFileSQL, à l'ai<strong>de</strong><br />

<strong>de</strong> l'adresse email du contact, et affichées dans une table.<br />

// Objet Evénement<br />

MonEvenement est un gglEvénement<br />

// Par<strong>cours</strong> <strong>de</strong>s événements <strong>de</strong> l'agenda<br />

POUR TOUT MonEvenement DE Agenda.Evénement<br />

// Mémorise l'email <strong>de</strong> l'invité<br />

EmailInvite = MonEvenement.Invité[1].Email<br />

// Recherche ce contact dans la base<br />

HLitRecherchePremier(Client,EMail, EmailInvite)<br />

// Ajoute une ligne pour ce ren<strong>de</strong>z-vous<br />

TableAjouteLigne(TABLE_RDV, …<br />

MonEvenement.DateDébut,…<br />

EmailInvite,<br />

Client.NumClient,<br />

Client.NomContact +" "+ Client.PrénomContact,<br />

Client.Latitu<strong>de</strong>, Client.Longitu<strong>de</strong>,<br />

Client.Ville,<br />

MonEvenement.Titre)<br />

FIN<br />

Enfin, le trajet à effectuer pour voir tous les contacts est affiché<br />

dans la carte. Lors la sélection d'une ligne <strong>de</strong> ren<strong>de</strong>z-vous dans<br />

la table, un marqueur est ajouté sur la carte pour localiser le<br />

lieu du ren<strong>de</strong>z-vous.<br />

WebDev<br />

Exemple <strong>de</strong> MashUp en WebDev<br />

L'exemple "WW Mashup" est un exemple <strong>de</strong> mashup sur une page<br />

web. La page "PAGE_Mashup" contient :<br />

• une table WebDev qui affiche les ren<strong>de</strong>z-vous <strong>de</strong> la journée,<br />

• une carte "Google Map" qui affiche l'itinéraire <strong>de</strong> la journée.<br />

Cette page permet à une secrétaire <strong>de</strong> gérer les ren<strong>de</strong>z-vous<br />

d’une équipe <strong>de</strong> commerciaux. Il s'agit d'une gestion <strong>de</strong> planning<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 77


WebDev PHP<br />

Création et déploiement d'un site PHP<br />

dépend <strong>de</strong> la version fournie par l'hébergeur.<br />

• Une base <strong>de</strong> données MySQL et si nécessaire la<br />

couche cliente MySQL. De même que pour PHP, il est<br />

conseillé d'utiliser la même version <strong>de</strong> MySQL que<br />

celle fournie avec l'hébergement.<br />

Configuration du projet<br />

Pour spécifier qu’un site WebDev est un site PHP, il<br />

suffit <strong>de</strong> l'indiquer dans l’assistant <strong>de</strong> création <strong>de</strong><br />

projet. Nous vous conseillons d'indiquer le plus tôt<br />

possible la nature du projet afin <strong>de</strong> permettre au<br />

compilateur d'indiquer les éventuelles indisponibilités<br />

d'un champ ou d'une fonction en PHP.<br />

WebDev permet <strong>de</strong> générer <strong>de</strong>s sites dynamiques PHP<br />

avec ou sans session accédant à une base MySQL. Il est<br />

alors possible <strong>de</strong> réaliser un site PHP et <strong>de</strong> l'héberger<br />

sur un site mutualisé "classique" à moindre coût (par<br />

exemple OVH ou même un hébergement personnel<br />

chez Free).<br />

Mise en œuvre<br />

Pour illustrer le développement et le déploiement d'un site WebDev<br />

PHP, cet article utilise le projet "Extranet_Precilia". Les paramètres<br />

<strong>de</strong> connexion à la base <strong>de</strong> données doivent être renseignés dans<br />

le "co<strong>de</strong> d'initialisation <strong>de</strong> session PHP".<br />

Configuration du poste <strong>de</strong><br />

développement<br />

Lors d'un développement <strong>de</strong> site PHP, il est nécessaire d'installer<br />

quelques modules spécifiques sur le poste <strong>de</strong> développement :<br />

• Un serveur web : Apache ou IIS par exemple. Normalement, un<br />

développeur WebDev dispose déjà ce type <strong>de</strong> logiciel. En revanche,<br />

lors <strong>de</strong> la réalisation d'un site PHP, il peut être intéressant d'utiliser<br />

un serveur Web sensible à la casse (un hébergement mutualisé<br />

sous linux sera sensible à la casse).<br />

• Un moteur PHP en version 4 ou 5. La version minimale supportée<br />

par WebDev est la version 4.3.2. La version <strong>de</strong> PHP à utiliser<br />

Configuration <strong>de</strong> l'analyse<br />

Lors <strong>de</strong> la réalisation d'un site PHP, l'éditeur d'analyses<br />

propose une connexion spécifique "Accès Natif PHP<br />

MySQL" qui est la connexion entre le site PHP et la<br />

base MySQL.<br />

Pour bénéficier du mo<strong>de</strong> test "en simulation" et ainsi<br />

disposer du débogueur <strong>de</strong> WebDev, il est également<br />

nécessaire d'installer l'accès natif MySQL pour WebDev. Cet accès<br />

natif permet au moteur WebDev d'accé<strong>de</strong>r à la base <strong>de</strong> données<br />

MySQL. Cette secon<strong>de</strong> connexion peut être décrite <strong>de</strong>puis l'analyse<br />

ou par programmation.<br />

Note : Avec WebDev 14 et l’accès natif AS/400, il est possible<br />

d'accé<strong>de</strong>r directement à <strong>de</strong>s bases AS/400 <strong>de</strong>puis <strong>de</strong>s sites PHP.<br />

Grâce à ces accès natifs, la manipulation <strong>de</strong> la base <strong>de</strong> données<br />

(MySQL ou AS/400) s'effectue par les fonctions Hxxx :<br />

HLitRecherche, HAjoute, etc.<br />

Dans les autres cas (bases tierces ou HyperFileSQL), l'accès aux bases<br />

<strong>de</strong> données <strong>de</strong>puis PHP s'effectue grâce aux fonctions SQLxxx.<br />

Le projet exemple<br />

La création <strong>de</strong>s pages se fait <strong>de</strong> façon classique, comme avec<br />

un projet WebDev classique. Le projet "Extranet_Precilia" est<br />

constitué <strong>de</strong> :<br />

• Un modèle <strong>de</strong> page principale correspondant à la charte graphique<br />

du site : PAGEMOD_IHM.<br />

• Un modèle <strong>de</strong> page correspondant à la gestion <strong>de</strong> la popup <strong>de</strong><br />

détail d'un produit : PAGEMOD_POPUP. Cette popup est gérée<br />

par programmation Ajax.<br />

• Un modèle <strong>de</strong> champ correspondant à la gestion du panier :<br />

MDLC_Mo<strong>de</strong>lePanier. Le panier est ici affiché sous la forme d'une<br />

zone répétée Ajax.<br />

78 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Ensuite, les différentes pages sont <strong>de</strong>s pages "PHP" avec contexte.<br />

Cela signifie que les variables et les positions dans la base <strong>de</strong> données<br />

sont automatiquement gérées par WebDev, ce qui simplifie<br />

la programmation.<br />

Connexion à la base <strong>de</strong> données<br />

La connexion à la base <strong>de</strong> données peut être décrite :<br />

• soit dans l'analyse,<br />

• soit par programmation grâce aux fonctions hDécritConnexion<br />

et hChangeConnexion du WLangage.<br />

Dans la majorité <strong>de</strong>s hébergements PHP (hors serveur dédié), la<br />

base <strong>de</strong> données MySQL n'est accessible que <strong>de</strong>puis le site et non<br />

<strong>de</strong>puis Internet. Il est donc nécessaire <strong>de</strong> disposer d'une base <strong>de</strong><br />

données "locale" et d'une connexion spécifique vers cette base <strong>de</strong><br />

données locale lors du mo<strong>de</strong> test.<br />

Note : pour remplir la base <strong>de</strong> données locale avec les mêmes<br />

données que la base en production, il est généralement possible<br />

<strong>de</strong> récupérer le contenu <strong>de</strong> la base MySQL <strong>de</strong> production par<br />

PhpMyAdmin.<br />

// Définition <strong>de</strong> la connexion<br />

SI EnMo<strong>de</strong>Test() ALORS<br />

// Connexion en mo<strong>de</strong> test<br />

HDécritConnexion("MaConnexion",<br />

UTILISATEUR_BASE_TEST,<br />

MOTDEPASSE_BASE_TEST,<br />

SERVEUR_BASE_TEST,<br />

BASE_DONNEES,<br />

hAccèsNatifMySQL)<br />

SINON<br />

// Connexion sur le serveur <strong>de</strong> production<br />

HDécritConnexion("MaConnexion",<br />

UTILISATEUR_DISTANT,<br />

MOTDEPASSE_DISTANT,<br />

SERVEUR_DISTANT,<br />

BASE_DONNEES,<br />

hAccèsNatifMySQL)<br />

FIN<br />

// Changement <strong>de</strong> la connexion<br />

HChangeConnexion("*","MaConnexion")<br />

// Ouverture et/ou création <strong>de</strong> la base<br />

HCréationSiInexistant("*")<br />

La fonction WLangage HCréationSiInexistant créera les fichiers<br />

dans la base <strong>de</strong> données s'ils n’existent pas déjà.<br />

Lors du premier lancement, il suffit d'indiquer les paramètres FTP<br />

fournis par l'hébergeur :<br />

• l'adresse du serveur FTP (et éventuellement le port),<br />

• le nom d'utilisateur et le mot <strong>de</strong> passe,<br />

• le nom <strong>de</strong> répertoire correspondant au site visible (par exemple<br />

"<strong>www</strong>" chez OVH).<br />

Ensuite, le déploiement s'effectue en <strong>de</strong>ux étapes :<br />

• une phase <strong>de</strong> préparation où "WDDéploie" analyse le répertoire<br />

local du site et le compare au site déployé. A la fin <strong>de</strong> cette phase,<br />

l'outil "WDDéploie" affiche au développeur les éléments à déployer<br />

pour mettre à jour le site.<br />

• une phase <strong>de</strong> déploiement pendant lequel "WDDéploie" réalise<br />

le transfert effectif <strong>de</strong>s fichiers sur l'hébergement.<br />

Note : La première page du site chez OVH, ou même sur un hébergement<br />

personnel comme Free, doit obligatoirement s’appeler<br />

"in<strong>de</strong>x.html" ou "in<strong>de</strong>x.php".<br />

WebDev crée automatiquement ces pages à partir <strong>de</strong> la page<br />

d’accueil définie dans le projet.<br />

WebDev<br />

Déployer un site PHP<br />

Une fois le site créé et testé, l’étape suivante est le déploiement<br />

du site chez un hébergeur.<br />

Le déploiement peut s'effectuer <strong>de</strong> <strong>de</strong>ux manières :<br />

• manuellement à l'ai<strong>de</strong> d'un client FTP (FileZilla par exemple).<br />

• automatiquement grâce à l'outil "WDDéploie" livré en standard<br />

avec WebDev.<br />

L'avantage <strong>de</strong> cette secon<strong>de</strong> solution, c'est que l'outil "WDDéploie"<br />

"connait" l'architecture du site et peut donc ai<strong>de</strong>r lors <strong>de</strong> sa mise<br />

à jour en :<br />

• vérifiant les fichiers modifiés.<br />

• filtrant les projets par langue.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 79


Abonnez-vous !<br />

L90119<br />

Tarif modifiable sans préavis<br />

Bulletin d’abonnement à retourner avec<br />

votre règlement à :<br />

PC SOFT<br />

Lettre du <strong>Support</strong> <strong>Tech</strong>nique<br />

BP 44 408<br />

34197 MONTPELLIER Ce<strong>de</strong>x 05<br />

France<br />

En cas <strong>de</strong> paiement par carte bancaire,<br />

vous pouvez nous faxer votre abonnement<br />

au :<br />

+33 (0) 4 67 03 07 87<br />

Vos Nom & Prénom : ...........................................................................<br />

Votre Société : ..................................................................................<br />

Votre Adresse précise : ........................................................................<br />

.....................................................................................................<br />

Co<strong>de</strong> Postal : .............................. Ville : .............................................<br />

Pays : ........................................ Tel : ...............................................<br />

Adresse Email : .................................................................................<br />

Je choisis un abonnement “LST PC SOFT” pour :<br />

FRANCE Métropolitaine<br />

AUTRE (exp. par avion)<br />

□ 1 an - 4 N°+ 4 DVD : 159 euros HT; 190,16 euros TTC<br />

□ 2 ans - 8 N°+ 8 DVD : 279 euros HT ; 333,68 euros TTC<br />

□ 1 an - 4 N°+ 4 DVD : 175 euros HT<br />

□ 2 ans - 8 N°+ 8 DVD : 299 euros HT<br />

À partir du numéro : ..............<br />

Note : une facture acquittée est systématiquement<br />

adressée.<br />

Ci joint mon règlement <strong>de</strong> : ............. Euros TTC<br />

□ Je règle par chèque. J’autorise PC SOFT à débiter sur ma carte VISA/MasterCard<br />

la somme <strong>de</strong> : ..................... Euros<br />

□ Je règle par Carte Bancaire.<br />

Cryptogramme :<br />

□□□<br />

Numéro complet <strong>de</strong> la carte : la carte expire : mois année<br />

□□□□□□□□□□□□□□□□ □□ □□□□<br />

Signature obligatoire du détenteur <strong>de</strong> la carte :<br />

Nom du détenteur <strong>de</strong> la carte :<br />

..........................................................<br />

80 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

Services Web<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 81


SOA<br />

Réalisation d'une application "SOA" (Services<br />

Oriented Architecture)<br />

SOA est l'acronyme <strong>de</strong> Services Oriented Architecture<br />

(Architecture orientée services).<br />

Une application est dite <strong>de</strong> type SOA lorsqu'elle utilise<br />

<strong>de</strong>s services externes pour offrir <strong>de</strong>s fonctionnalités<br />

aux utilisateurs. Ces services peuvent être <strong>de</strong>s web<br />

services, <strong>de</strong>s composants, <strong>de</strong>s pages AWP, …<br />

Ce sujet présente comment importer et utiliser un web<br />

service dans une application existante.<br />

Projet d'illustration<br />

Le projet utilisé pour illustrer ce sujet est "WD CRMServices"<br />

(présent sur le DVD).<br />

Le web service présenté dans ce sujet est disponible à cette<br />

adresse : http://ec.europa.eu/taxation_customs/vies/api/<br />

checkVatPort?wsdl.<br />

WinDev permet <strong>de</strong> :<br />

• générer <strong>de</strong>s web services<br />

• utiliser <strong>de</strong>s web services, générés avec WinDev ou non.<br />

Utilisation d'un web service<br />

L'application exemple "WD CRMServices" permet <strong>de</strong> gérer <strong>de</strong>s<br />

clients. Dans cette application, la TVA Intracommunautaire doit être<br />

vérifiée. Il existe un web service, mis à disposition gratuitement<br />

par l'Union Européenne, qui permet <strong>de</strong> vérifier si un numéro <strong>de</strong><br />

TVA intracommunautaire est vali<strong>de</strong> ou non.<br />

Ce web service est disponible à cette adresse : http://ec.europa.<br />

eu/taxation_customs/vies/api/checkVatPort?wsdl.<br />

Importation du web service<br />

Pour importer un web service, il suffit <strong>de</strong> cliquer sur le menu<br />

"Atelier .. Services Web .. Importer et utiliser un service dans ce<br />

projet" et <strong>de</strong> se laisser gui<strong>de</strong>r par l'assistant :<br />

• Adresse du fichier WSDL.<br />

Le fichier WSDL est le fichier <strong>de</strong> <strong>de</strong>scription du service web. Dans<br />

ce fichier sont décrites les différentes procédures que le web<br />

service exporte avec leurs différents paramètres. Il s'agit donc<br />

<strong>de</strong>s points d'entrées et <strong>de</strong> sorties du web service.<br />

• Type <strong>de</strong> web service.<br />

Le web service peut en effet possé<strong>de</strong>r <strong>de</strong>s spécificités J2EE ou<br />

dotNet. Si aucune information n'est connue quand à la plateforme<br />

<strong>de</strong> génération du web service, il est conseillé <strong>de</strong> choisir "SOAP<br />

Générique".<br />

• Type <strong>de</strong> génération et nom<br />

Les accès au web service qui va être utilisé peuvent être définis soit<br />

sous forme <strong>de</strong> classe, soit sous forme <strong>de</strong> collections <strong>de</strong> procédures.<br />

Le nom <strong>de</strong> l'objet généré peut ensuite être modifié.<br />

Une fois le web service importé, les éléments générés (classes ou<br />

collections) sont ajoutés au projet, avec toutes les procédures qui<br />

permettent d'appeler le web service.<br />

Remarque :<br />

Dans la collection <strong>de</strong> procédures (ou classe) générée, il existe<br />

<strong>de</strong>s procédures publiques (picto vert) et privées (picto rouge).<br />

Pour utiliser le web service dans un projet, il suffit d'utiliser les<br />

procédures publiques.<br />

Utilisation du web service<br />

Dans l'application exemple "WD CRMServices", le web service importé<br />

va permettre <strong>de</strong> contrôler le numéro <strong>de</strong> TVA d'une société.<br />

L'appel se fera sur le bouton "Vérifier le numéro <strong>de</strong> TVA<br />

Intracommunautaire" <strong>de</strong> la fenêtre FEN_FicheSociete.<br />

Notre conseil :<br />

Il est conseillé d'appeler les web services sur <strong>de</strong>s actions utilisateurs;<br />

par exemple dans "WD CRMServices", sur le clic d'un bouton<br />

"Vérifier le numéro <strong>de</strong> TVA".<br />

Tout simplement parce qu'un web service peut être indisponible.<br />

La fonction à utiliser pour ce web service est la fonction checkVAT.<br />

Cette fonction attend le co<strong>de</strong> ISO du pays et le numéro <strong>de</strong> TVA à<br />

vérifier et renvoie une variable <strong>de</strong> type checkVATResponse.<br />

// Variable <strong>de</strong> résultats <strong>de</strong> contrôle <strong>de</strong> TVA<br />

stMonRésultat est un STcheckVatResponse<br />

Pour accé<strong>de</strong>r aux détails <strong>de</strong> la structure (les variables qui la<br />

composent), il suffit <strong>de</strong> faire F2 sur la déclaration. La structure<br />

checkVATResponse contient :<br />

• le co<strong>de</strong> du pays,<br />

• le numéro <strong>de</strong> TVA,<br />

• la date <strong>de</strong> la requête,<br />

• un booléen qui indique si le numéro est vali<strong>de</strong> ou pas,<br />

• le nom <strong>de</strong> la société à laquelle correspond ce numéro,<br />

• l'adresse <strong>de</strong> la société.<br />

Pour contrôler le numéro <strong>de</strong> TVA la société courante affichée dans la<br />

fiche, il suffit d'appeler la fonction checkVAT du web service.<br />

82 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Services Web<br />

// Contrôle le numéro <strong>de</strong> TVA pour le pays<br />

stMonRésultat = checkVat(...<br />

COMBO_Pays, ...<br />

SAI_TVAIntraCommunautaire)<br />

La variable booléen m_valid indique maintenant si le numéro <strong>de</strong><br />

TVA est vali<strong>de</strong> ou non. Il est donc possible d'afficher un message<br />

à l'utilisateur, ou <strong>de</strong> changer la couleur <strong>de</strong> fond du champ selon<br />

la validité du numéro <strong>de</strong> TVA par exemple.<br />

// Si le numéro <strong>de</strong> TVA est vali<strong>de</strong><br />

SI stMonRésultat.m_Valid = Vrai ALORS<br />

// Colorise le fond du champ en vert<br />

SAI_TVAIntraCommunautaire..CouleurFond = …<br />

VertPastel<br />

SINON<br />

// Colorise le fond du champ en rouge<br />

SAI_TVAIntraCommunautaire..CouleurFond = …<br />

RougePastel<br />

FIN<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 83


SAAS<br />

Réalisation d'une application "SAAS"<br />

(Software As A Service)<br />

SaaS est l’acronyme <strong>de</strong> "Software as a Service". Il<br />

s'agit d'une manière <strong>de</strong> commercialiser, <strong>de</strong> distribuer<br />

un logiciel.<br />

Le logiciel se vend non plus sous la forme d'un produit<br />

que le client installe en interne, mais sous forme<br />

d'une application accessible à distance par le biais<br />

d'Internet.<br />

WebDev dispose <strong>de</strong> nombreux avantages qui permettent<br />

<strong>de</strong> mettre en place simplement et rapi<strong>de</strong>ment <strong>de</strong>s<br />

applications sur le modèle SaaS.<br />

SaaS : principes<br />

Le SaaS est un mo<strong>de</strong> <strong>de</strong> livraison <strong>de</strong>s applications où le fournisseur<br />

héberge le service.<br />

Les clients accè<strong>de</strong>nt à ce service via Internet : on parle alors<br />

d'application <strong>de</strong> type "client léger".<br />

La facturation d'un tel service se fait en général par abonnement,<br />

par exemple par nombre d’utilisateurs et par mois.<br />

Le groupware utilisateur<br />

Le groupware utilisateur <strong>de</strong> WebDev permet, par exemple, <strong>de</strong><br />

maîtriser la facturation grâce à l’i<strong>de</strong>ntification <strong>de</strong>s utilisateurs<br />

et à l'historique <strong>de</strong>s connexions.<br />

Pour activer le groupware utilisateur, il suffit d'ouvrir la fenêtre<br />

<strong>de</strong> paramètres du groupware accessible via le menu "Atelier ..<br />

Paramètres du groupware" et <strong>de</strong> cocher l'option "Activer".<br />

La base HyperFileSQL gratuite<br />

En général, avec un contrat SaaS, chaque société cliente a sa base <strong>de</strong><br />

données dédiée sur les serveurs du fournisseur <strong>de</strong> l’application.<br />

Mais il est également possible <strong>de</strong> mettre en place un Saas avec<br />

une seule base <strong>de</strong> données pour tous les clients; il faut juste le<br />

gérer dans la structure <strong>de</strong> l'analyse.<br />

Comme la base <strong>de</strong> données HyperFileSQL est entièrement gratuite,<br />

quel que soit le nombre <strong>de</strong> serveurs, <strong>de</strong> connexions, <strong>de</strong><br />

sites, d’utilisateurs, aucun frais <strong>de</strong> déploiement supplémentaire<br />

n'est à craindre.<br />

La duplication <strong>de</strong> base<br />

La duplication automatique <strong>de</strong> base HyperFileSQL, disponible<br />

à partir <strong>de</strong>s versions 14, facilite a mise en place d'une base par<br />

société cliente, à partir d'une base générique.<br />

Pour dupliquer une base, il suffit <strong>de</strong> :<br />

• ouvrir le Centre <strong>de</strong> Contrôle HyperFileSQL.<br />

• faire un clic-droit sur la base <strong>de</strong> données à dupliquer.<br />

• choisir l'option "Dupliquer la Base <strong>de</strong> Données sélectionnée".<br />

Les fichiers, liaisons, triggers, procédures stockées et droits sont<br />

automatiquementdupliqués, en un clic.<br />

Il suffit alors <strong>de</strong> spécifier le nom <strong>de</strong> la nouvelle base à créer.<br />

Pour une application en mo<strong>de</strong> SaaS, c’est une fonctionnalité très<br />

pratique.<br />

La sécurité <strong>de</strong>s données<br />

WebDev permet <strong>de</strong> gérer facilement le mo<strong>de</strong> sécurisé "HTTPS" et<br />

"SSL", indispensable à toutes transactions sécurisées.<br />

Il suffit d'utiliser la fonction SSLActive du WLangage dans les<br />

pages du projet.<br />

// Active le mo<strong>de</strong> sécurisé SSL<br />

SSLActive(Vrai)<br />

Le cryptage et la protection par mot <strong>de</strong> passe <strong>de</strong>s fichiers <strong>de</strong><br />

données HyperFileSQL assurent également un niveau <strong>de</strong> sécurité<br />

supplémentaire pour les clients.<br />

L'installation multiple <strong>de</strong> sites<br />

i<strong>de</strong>ntiques<br />

L'intérêt <strong>de</strong> l'installation multiple est d'avoir un projet unique et<br />

donc une maintenance unique pour tous les clients.<br />

Autrement, il faudrait dupliquer le co<strong>de</strong> source autant <strong>de</strong> fois<br />

qu'il existe <strong>de</strong> clients.<br />

L'installation multiple <strong>de</strong> sites i<strong>de</strong>ntiques sur un même serveur<br />

facilite donc la mise en place en mo<strong>de</strong> SaaS.<br />

Pour déployer un site plusieurs fois sur un même serveur, il suffit<br />

<strong>de</strong> lancer l'assistant <strong>de</strong> création <strong>de</strong> la procédure d'installation.<br />

Cet assistant est accessible via le menu "Atelier .. Créer la procédure<br />

d'installation".<br />

WebDev génère dans un premier temps la bibliothèque du site.<br />

La bibliothèque contient tous les éléments nécessaires au bon<br />

84 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Services Web<br />

fonctionnement du site.<br />

Il suffit ensuite <strong>de</strong> sélectionner le type <strong>de</strong> déploiement, par<br />

exemple FTP, et <strong>de</strong> renseigner les informations <strong>de</strong> connexions<br />

<strong>de</strong> ce serveur.<br />

Il est ensuite possible <strong>de</strong> spécifier le nom du site qui sera utilisé sur<br />

le serveur. Il suffit alors d'indiquer un nom spécifique au client.<br />

Pour chaque site, le paramétrage du nombre <strong>de</strong> connexions<br />

simultanées et du nombre <strong>de</strong> connexions maximum par utilisateur<br />

est disponible.<br />

Il est conseillé d'autoriser plus d'une connexion par internaute.<br />

En effet, l'i<strong>de</strong>ntification d'une connexion est faite par l'adresse<br />

IP. Si un client utilise un proxy, tous les collaborateurs <strong>de</strong> cette<br />

entreprise auront la même adresse IP.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 85


Plus d'informations sur ces sujets ?<br />

En formation<br />

"WinDev Expert"<br />

Dans la LST 73<br />

Exemple "WW_SOA" et "WW_SOA_DEMO"<br />

Dans la LST 62<br />

Exemple "WWServiceWeb"<br />

86 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

Déploiement d'applications<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 87


Déploiement<br />

Choisir le type <strong>de</strong> déploiement adapté à une<br />

application<br />

Une fois l'application WinDev développée, les tests<br />

passés et l'exécutable créé : comment gérer simplement<br />

et efficacement le déploiement d'une application<br />

WinDev et les mises à jour futures ?<br />

WinDev propose la création <strong>de</strong> différents types d'installation.<br />

WinDev offre toutes les fonctionnalités nécessaires à<br />

un déploiement facilité et une exploitation simplifiée<br />

<strong>de</strong>s applications !<br />

Que ce soit une installation autonome, réseau ou<br />

internet, avec WinDev vous créez une procédure<br />

d'installation complètement adaptée à votre type <strong>de</strong><br />

déploiement.<br />

Création <strong>de</strong> la procédure<br />

d'installation<br />

La création <strong>de</strong> la procédure d'installation s'effectue très simplement<br />

à l'ai<strong>de</strong> d'un assistant. Cet assistant est accessible via le menu<br />

"Atelier .. Créer la procédure d'installation".<br />

Les étapes <strong>de</strong> l'assistant se découpent en <strong>de</strong>ux parties :<br />

• la création <strong>de</strong> l'exécutable. Cette partie reprend les plans <strong>de</strong><br />

l'assistant <strong>de</strong> création <strong>de</strong> l'exécutable. Si l'exécutable à déployer<br />

a déjà été généré, il est possible d'accé<strong>de</strong>r directement aux<br />

options d'installations. Il suffit <strong>de</strong> cliquer sur le lien "Installation"<br />

à gauche <strong>de</strong> l'assistant.<br />

• le paramétrage <strong>de</strong> l'installation. Cette partie permet <strong>de</strong> choisir le<br />

type d'installation à utiliser et <strong>de</strong> choisir les options souhaitées.<br />

Installation autonome<br />

Le premier type d'installation est l'installation autonome.<br />

La particularité <strong>de</strong> l'installation autonome est qu'il n'y a pas <strong>de</strong><br />

mises à jour automatiques, pas <strong>de</strong> live update. Dans ce cas, il<br />

est nécessaire <strong>de</strong> réinstaller totalement l'application dès que<br />

nécessaire.<br />

Dans quel cas utiliser cette installation ?<br />

Ce type d'installation est recommandé pour les applications qui<br />

sont diffusées sur un nombre <strong>de</strong> postes restreint ou pour lesquelles<br />

peu <strong>de</strong> mises à jour sont prévues.<br />

Installation réseau<br />

WinDev permet également <strong>de</strong> créer une installation réseau, c’està-dire<br />

une installation avec un live update automatique.<br />

Lors du déploiement <strong>de</strong> l'application, une installation "serveur"<br />

est réalisée : il s'agit <strong>de</strong> l'installation <strong>de</strong> référence.<br />

Ensuite tous les postes clients installent l'application <strong>de</strong>puis cette<br />

installation <strong>de</strong> référence. Lors <strong>de</strong>s prochains lancements <strong>de</strong> l'application,<br />

celle-ci va automatiquement vérifier si une mise à jour<br />

est disponible sur le serveur. Si une mise à jour est disponible,<br />

l'application va se mettre à jour automatiquement.<br />

L'installation avec live update automatique peut être faite :<br />

• par réseau local. Dans ce cas, l'installation <strong>de</strong> référence sera<br />

réalisée dans un répertoire partagé.<br />

• par Internet. Dans ce cas, il suffit <strong>de</strong> copier l'installation référence<br />

et la page HTML générée sur un serveur HTTP, un serveur<br />

Web. Les utilisateurs installent et mettent à jour l'application<br />

<strong>de</strong>puis ce serveur Web.<br />

Pour ces installations, plusieurs paramétrages sont possibles.<br />

Dans quel cas utiliser cette installation ?<br />

Ce type d'installation est recommandé pour les applications qui<br />

sont largement diffusées et pour lesquelles les mises à jour sont<br />

régulières.<br />

Contrôle <strong>de</strong>s versions<br />

Le contrôle <strong>de</strong> version permet <strong>de</strong> spécifier :<br />

• l'exécutable <strong>de</strong> référence pour l'installation. En effet, si le projet<br />

génère plusieurs exécutables différents, il est nécessaire d'indiquer<br />

quel exécutable servira <strong>de</strong> référence pour la mise à jour.<br />

• la version minimale autorisée. Cette option permet notamment<br />

<strong>de</strong> force une mise à jour. Par exemple, si une mise à jour automatique<br />

<strong>de</strong>s fichiers a été effectuée, il faut que les applications<br />

clientes se mettent à jour pour bénéficier <strong>de</strong> la nouvelle structure<br />

88 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>de</strong>s fichiers. Pour forcer cette mise à jour, il suffit <strong>de</strong> définir la<br />

version en <strong>cours</strong> <strong>de</strong> déploiement comme étant la version minimale<br />

autorisée à fonctionner. Lors du lancement <strong>de</strong> l'application client,<br />

l'utilisateur sera forcé <strong>de</strong> se mettre à jour.<br />

Gestion <strong>de</strong>s utilisateurs connectés<br />

La gestion <strong>de</strong>s utilisateurs connectés permet d'administrer les applications<br />

très simplement. Lors du déploiement <strong>de</strong> l'installation <strong>de</strong><br />

référence, une application spécifique est déployée : WDAdminExe.<br />

Cette application est présente dans le sous-répertoire INSTALL du<br />

répertoire d'installation référence.<br />

Cette application permet <strong>de</strong> :<br />

• afficher les utilisateurs qui utilisent actuellement l'application.<br />

Pour chaque utilisateur, différentes informations sont disponibles :<br />

machine, adresse IP, date et heure <strong>de</strong> connexion, version utilisée.<br />

Ces informations sont disponibles dans l'onglet "Utilisateurs" <strong>de</strong><br />

WDAdminExe.<br />

• contrôler l'application à distance. Le contrôle distant <strong>de</strong> l'application<br />

permet d'interdire la connexion, d'avertir d'un arrêt<br />

imminent <strong>de</strong> l'application ou <strong>de</strong> forcer l'arrêt. L'utilisateur est<br />

ainsi averti, par un message personnalisable, qu'il doit sauver ses<br />

modifications avant arrêt. Le contrôle à distance est particulièrement<br />

utile lors d'une mise à jour critique <strong>de</strong> l'application ou <strong>de</strong><br />

la base <strong>de</strong> données attenante.<br />

Fichiers installés<br />

Le paramétrage <strong>de</strong>s fichiers installés permet <strong>de</strong> définir les fichiers<br />

qui seront ajoutés à l'installation et surtout où ils seront installés.<br />

Le répertoire <strong>de</strong>s différents fichiers peut être défini en utilisant<br />

<strong>de</strong>s constantes prédéfinies :<br />

• : chemin d'installation <strong>de</strong> l'application,<br />

• : lecteur d'installation,<br />

• : chemin <strong>de</strong> Windows,<br />

• : chemin d'installation <strong>de</strong>s fichiers <strong>de</strong> données,<br />

• : répertoire "Program Files".<br />

Par défaut, WinDev liste et intègre les fichiers nécessaires pour<br />

l'application : exécutables, fichiers <strong>de</strong> configuration (.ini), dépendances,<br />

etc.<br />

Il est possible d'ajouter d'autres fichiers dans la liste <strong>de</strong>s fichiers<br />

installés : par exemple, si l'application utilise une dll particulière,<br />

il est possible d'inclure ce fichier pour qu'il soit automatiquement<br />

installé avec l'application.<br />

Pour chaque fichier, il est possible <strong>de</strong> définir si :<br />

• un raccourci doit être créé lors <strong>de</strong> l'installation. Les options<br />

<strong>de</strong> création <strong>de</strong> raccourci sont disponibles dans la fenêtre <strong>de</strong><br />

propriétés d'un fichier.<br />

• le fichier doit être installé sur le poste client.<br />

• le fichier doit être installé sur le poste serveur.<br />

Déploiement d'applications<br />

Répertoire d'installation<br />

Le répertoire d'installation définit le répertoire par défaut dans<br />

lequel l'application sera installée.<br />

Différentes options d'utilisation plus avancées sont également<br />

proposées. Il est par exemple possible d'écrire <strong>de</strong>s informations<br />

dans un fichier .INI, dans la base <strong>de</strong> registre, etc.<br />

Paramètres <strong>de</strong>s bases <strong>de</strong> données<br />

Ces options permettent d'intégrer <strong>de</strong>s éléments optionnels pour<br />

paramétrer les bases <strong>de</strong> données.<br />

Il est possible <strong>de</strong> paramétrer la modification automatique <strong>de</strong>s<br />

fichiers. Cela permet <strong>de</strong> modifier les fichiers <strong>de</strong> données directement<br />

chez le client. Lors <strong>de</strong> l'installation ou <strong>de</strong> la mise à jour <strong>de</strong><br />

l'application, l'installation va vérifier si la structure <strong>de</strong>s fichiers<br />

en exploitation est la même que celle définie dans l'analyse. Si<br />

la structure diffère, la modification automatique <strong>de</strong>s fichiers est<br />

lancée.<br />

Il est également possible <strong>de</strong> choisir d'in<strong>de</strong>xer les fichiers HyperFileSQL<br />

présents dans l'installateur uniquement lors <strong>de</strong> l'installation. Cela<br />

permet d'offrir une installation moins volumineuse.<br />

L'accès à la base <strong>de</strong> données peut être configuré directement<br />

<strong>de</strong>puis l'installateur, en cochant l'option "Configurer l'accès à la<br />

base <strong>de</strong> données <strong>de</strong> l'application".<br />

L'assistant affiche alors toutes les connexions qui ont été définies<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 89


Déploiement (SUITE)<br />

Choisir le type <strong>de</strong> déploiement adapté à une<br />

application (SUITE)<br />

dans l'analyse. Pour chacune <strong>de</strong> ces connexions, il est possible<br />

<strong>de</strong> :<br />

• conserver les paramètres tels qu'ils ont été définis dans l'analyse.<br />

• utiliser les paramètres donnés dans le fichier .wer. Le fichier<br />

.wer est le fichier <strong>de</strong> <strong>de</strong>scription d'une réplication. Tous les paramètres<br />

<strong>de</strong> connexion à la base <strong>de</strong> données sont donc spécifiés<br />

dans ce fichier.<br />

• définir les paramètres <strong>de</strong> connexion.<br />

• proposer la saisie <strong>de</strong>s paramètres lors <strong>de</strong> l'installation. Dans ce<br />

cas, c'est l'utilisateur ou l'administrateur qui spécifiera la localisation<br />

<strong>de</strong>s données pendant l'installation <strong>de</strong> l'application. Il est<br />

possible <strong>de</strong> spécifier <strong>de</strong>s valeurs par défaut.<br />

• indiquer que les paramètres correspon<strong>de</strong>nt aux paramètres du<br />

serveur HyperFileSQL installé, si l'installation d'un serveur a été<br />

autorisée dans l'installateur.<br />

Look <strong>de</strong> l'installateur<br />

Pour que l'installateur soit un peu plus personnalisé, il est possible<br />

d'y inclure une image, un logo. Pour cela, il suffit, sur le plan<br />

"Titre et Décor", <strong>de</strong> cliquer sur le bouton "Décor" et <strong>de</strong> renseigner<br />

l'image souhaitée.<br />

Si l'installation doit effectuer <strong>de</strong>s opérations vraiment spécifiques,<br />

il est possible d'adapter et <strong>de</strong> personnaliser totalement<br />

l'installation. Les sources <strong>de</strong> l'installateur sont disponibles dans le<br />

répertoire "Exemples" <strong>de</strong> WinDev. Ce projet est bien évi<strong>de</strong>mment<br />

en WLangage.<br />

Live update par programmation<br />

La mise à jour d'une application par le live update s'effectue lors<br />

du relancement <strong>de</strong> l'application. Mais il est possible qu'une application<br />

s'exécute en permanence et ne soit jamais relancée. Dans<br />

ce cas, le WLangage dispose <strong>de</strong>s fonctions AppliXXX permettant<br />

<strong>de</strong> savoir si une mise à jour est disponible et d'appliquer cette<br />

mise à jour :<br />

• la fonction AppliMajDisponible indique si une mise à jour est<br />

disponible pour l'application.<br />

• la fonction AppliDéclencheMAJ lance la mise à jour <strong>de</strong> l'application.<br />

// Une mise à jour est-elle disponible ?<br />

SI AppliMAJDisponible() ALORS<br />

// Lancement <strong>de</strong> la mise à jour<br />

AppliDéclencheMAJ()<br />

FIN<br />

Astuce :<br />

La fonction AppliChangeParamètre permet <strong>de</strong> changer les paramètres<br />

<strong>de</strong> l'installation automatique : par exemple le chemin <strong>de</strong><br />

l'installation <strong>de</strong> référence.<br />

WDInst<br />

Pour paramétrer plus précisément encore une installation, il est<br />

possible d'utiliser l'outils WDInt. Cet outil est accessible via le<br />

menu "Outils .. WDInst".<br />

Il est possible <strong>de</strong> proposer à l'utilisateur une installation complète,<br />

minimale ou personnalisée avec certaines fonctionnalités obligatoires<br />

et <strong>de</strong>s fonctionnalités optionnelles.<br />

90 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Déploiement WebDev<br />

Personnalisation <strong>de</strong> la page indiquant la<br />

mise à jour du serveur<br />

Un site internet évolue, tant au niveau du contenu<br />

que <strong>de</strong> l'interface. La mise à jour est donc un élément<br />

fréquent et récurrent <strong>de</strong> la vie d'un site.<br />

Ce sujet montre <strong>de</strong>ux aspects <strong>de</strong> la mise à jour que<br />

WebDev simplifie :<br />

• la mise à jour <strong>de</strong> pages à chaud.<br />

• la personnalisation <strong>de</strong> la page indiquant une mise<br />

à jour.<br />

Mise à jour <strong>de</strong> pages à chaud<br />

La mise à jour à chaud <strong>de</strong> pages d'un site WebDev permet <strong>de</strong> modifier<br />

une page ou plusieurs pages alors que le site reste accessible<br />

pour les internautes.<br />

Par exemple, une page affichant la promotion du jour se doit<br />

d'être mise à jour <strong>de</strong> façon quotidienne, sans pour autant mettre<br />

le site en maintenance à chaque fois.<br />

Personnalisation <strong>de</strong> la page<br />

<strong>de</strong> mise à jour<br />

La page affichée lors <strong>de</strong> la mise à jour d'un site WebDev<br />

est entièrement personnalisable. Il est donc possible <strong>de</strong><br />

la mettre au gabarit du site, d'afficher un logo <strong>de</strong> société<br />

ou encore d'afficher un message personnalisé.<br />

Pour personnaliser ce message, il suffit d’utiliser l’administrateur<br />

WebDev <strong>de</strong>puis le serveur. Cet administrateur<br />

est installé par défaut avec le serveur d'applications<br />

WebDev.<br />

Dans l'onglet "Administration", un clic sur le bouton "Erreurs" permet<br />

d'afficher la fenêtre <strong>de</strong> personnalisation <strong>de</strong>s messages d'erreurs.<br />

La personnalisation <strong>de</strong>s messages d’erreurs peut se faire pour<br />

tous les sites ou site par site. Il est également possible <strong>de</strong> choisir<br />

d'afficher toujours la même page d’erreur quelle que soit l’erreur<br />

ou alors <strong>de</strong> gérer indépendamment chaque erreur.<br />

Pour personnaliser un message d’erreur, il est possible <strong>de</strong> :<br />

• afficher un message personnalisé,<br />

• indiquer une page HTML à afficher en cas d’erreur.<br />

Pour personnaliser le message indiquant que le serveur est en<br />

<strong>cours</strong> <strong>de</strong> mise à jour, il suffit <strong>de</strong> :<br />

• sélectionner l'erreur "ERR_UPDATING_SERVER",<br />

• indiquer la page qui <strong>de</strong>vra être affichée en cas <strong>de</strong> mise à jour<br />

du site,<br />

• appliquer les modifications.<br />

Déploiement d'applications<br />

Pour mettre à jour à chaud une page d'un site WebDev, il suffit<br />

<strong>de</strong> :<br />

• sélectionner les pages souhaitées dans le treeview,<br />

• sélectionner l'option "Déployer" du menu contextuel, accessible<br />

via le clic droit.<br />

Remarque :<br />

Si une modification intervient dans un co<strong>de</strong> global (projet, collection<br />

<strong>de</strong> procédures, ...) il est nécessaire <strong>de</strong> redéployer l'intégralité<br />

du site.<br />

Le site est alors obligatoirement rendu momentanément indisponible<br />

pour les internautes.<br />

Dans ce cas, WebDev affiche automatiquement une page aux<br />

internautes qui tente d’accé<strong>de</strong>r au site indiquant que le serveur<br />

est en <strong>cours</strong> <strong>de</strong> mise à jour.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 91


Déploiement mobile<br />

Mise à jour d'une flotte <strong>de</strong> terminaux<br />

mobiles<br />

l'application par Internet". Plusieurs paramètres doivent ensuite<br />

être renseignés :<br />

• la fréquence <strong>de</strong> vérification <strong>de</strong>s mises à jour. Pour que l'application<br />

contrôle la présence <strong>de</strong> mise à jour à chaque lancement,<br />

il suffit d'indiquer 0 en nombre <strong>de</strong> jours.<br />

• l'adresse à laquelle la mise à jour est disponible.<br />

Ce sujet présente la mise en place d'une solution <strong>de</strong><br />

mise à jour automatique <strong>de</strong> terminaux mobiles.<br />

Déploiements mobiles<br />

Le déploiement d'applications mobiles est accessible via le menu<br />

"Atelier .. Créer la procédure d'installation".<br />

WinDev Mobile propose 3 types <strong>de</strong> déploiement :<br />

• copie <strong>de</strong> l'exécutable et <strong>de</strong> ses dépendances directement sur<br />

le Pocket PC. Cette option est surtout utile en phase <strong>de</strong> tests en<br />

réel, pour tester l'exécutable sur le terminal.<br />

• création <strong>de</strong> l'installation MSI pour PC. L'installation s'effectue<br />

<strong>de</strong>puis un PC et installe l'application mobile sur le terminal via<br />

ActiveSync ou via le gestionnaire d'appareil mobile si le PC est<br />

sous Vista. Le Pocket PC doit donc être relié au PC pendant l'installation<br />

<strong>de</strong> l'application.<br />

• génération d'une installation pour appareil mobile au format<br />

CAB.Il est nécessaire <strong>de</strong> copier l'install sur le Pocket PC, soit par<br />

une SDCard, soit via le câble USB, soit par téléchargement direct<br />

<strong>de</strong>puis Internet par exemple.<br />

L'installation au format .cab apporte <strong>de</strong>ux avantages :<br />

• il est possible d'installer l'application sans que le terminal mobile<br />

ne soit relié au PC. Il est par exemple possible <strong>de</strong> télécharger un<br />

fichier .cab sur un SmartPhone.<br />

• si le matériel a une connexion Internet, il est possible <strong>de</strong><br />

mettre en place le live update dans les applications mobiles. Ce<br />

live update sera alors géré automatiquement comme pour une<br />

application WinDev.<br />

Mise en place du live update<br />

Dans un premier temps, il convient <strong>de</strong> générer l'installation <strong>de</strong><br />

l'application mobile au format .cab. Pour activer le live update, il<br />

suffit simplement <strong>de</strong> cocher l'option "permettre la mise à jour <strong>de</strong><br />

Serveur <strong>de</strong> mise à jour<br />

Le serveur qui héberge la mise à jour doit bien sûr disposer <strong>de</strong> :<br />

• un accès FTP pour transférer <strong>de</strong>puis WinDev Mobile la mise à<br />

jour générée.<br />

• un accès HTTP pour que les applications mobiles puissent récupérer<br />

leur mise à jour.<br />

Pour cela il faut définir le répertoire dans lequel est copiée la<br />

mise à jour comme étant un répertoire virtuel. La définition d'un<br />

répertoire virtuel se définit au niveau du paramétrage du serveur<br />

Web (IIS, Apache, ...).<br />

À la fin <strong>de</strong> la création <strong>de</strong> l'installation au format CAB, WinDev<br />

Mobile propose automatiquement <strong>de</strong> mettre à jour l'installation<br />

sur le serveur <strong>de</strong> référence.<br />

WinDev Mobile génère 3 fichiers :<br />

• un fichier .cab qui contient l'installation <strong>de</strong> l'application<br />

mobile.<br />

• un fichier .cab qui contient le framework <strong>de</strong> WinDev Mobile.<br />

• un fichier .wx qui gère les versions.<br />

Remarque :<br />

Il est nécessaire que l'extension .wx soit reconnue dans les types<br />

MIME sur le serveur Web. L'ajout d'une extension comme type MIME<br />

se définit dans le paramétrage du serveur Web.<br />

Ces fichiers doivent être mis à jour sur le serveur. Il suffit d'indiquer<br />

les paramètres du serveur FTP sur lequel la mise à jour<br />

sera copiée.<br />

Mise à jour sur le terminal<br />

Au lancement <strong>de</strong> l'application mobile sur le terminal, l'application<br />

propose <strong>de</strong> vérifier si une mise à jour est disponible : le centre <strong>de</strong><br />

contrôle <strong>de</strong>s applications est alors automatiquement lancé.<br />

Ce centre <strong>de</strong> contrôle vérifie si une mise à jour est disponible et<br />

propose <strong>de</strong> l'installer. L’application est ainsi automatiquement<br />

mise à jour.<br />

Le centre <strong>de</strong> contrôle <strong>de</strong>s applications est installé automatiquement<br />

sur le mobile en même temps que le framework WinDev Mobile.<br />

Remarque :<br />

En cas <strong>de</strong> modification <strong>de</strong> la structure <strong>de</strong> l’analyse, la modification<br />

automatique est automatiquement exécutée sur les fichiers <strong>de</strong><br />

données <strong>de</strong>s terminaux mobiles.<br />

92 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

Fonctionnalités spécifiques<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 93


Robot <strong>de</strong> surveillance<br />

Configurer la surveillance d'une<br />

application critique<br />

Pour mettre en place la surveillance d'une application WinDev, 2<br />

étapes sont nécessaires :<br />

• dans l’application, il faut signaler au robot que l’application<br />

est active.<br />

• dans le robot, il faut paramétrer un contrôle qui surveille régulièrement<br />

que l’application soit active.<br />

Paramétrage <strong>de</strong> l'application<br />

Pour signaler au robot que l'application est active,<br />

il suffit d'utiliser le composant RobotScheduler, livré<br />

en standard dans WinDev.<br />

Ce composant dispose <strong>de</strong> <strong>de</strong>ux procédures permettant<br />

<strong>de</strong> signaler l'activité <strong>de</strong> l'application :<br />

• SignalerActivite : cette procédure permet <strong>de</strong><br />

gérer <strong>de</strong> façon manuelle le signalement <strong>de</strong> l'activité<br />

<strong>de</strong> l'application.<br />

Il est conseillé d'utiliser cette procédure si un gros<br />

traitement doit être surveillé sur une application qui<br />

n'est pas forcément exécutée en permanence.<br />

Il suffit d'appeler une fois la procédure avant le<br />

traitement, pour marquer le début du signalement,<br />

puis une secon<strong>de</strong> fois en fin <strong>de</strong> traitement, en indiquant<br />

au robot <strong>de</strong> ne plus surveiller l'application<br />

pour l'instant.<br />

Le robot <strong>de</strong> surveillance est une application qui surveille<br />

en permanence <strong>de</strong>s éléments <strong>de</strong>mandés : applications<br />

WinDev, serveurs Web, serveurs HyperFileSQL, ...<br />

Si une défaillance est détectée, le robot <strong>de</strong> surveillance<br />

déclenche alors automatiquement une alerte :<br />

• dans la messagerie <strong>de</strong> WinDev,<br />

• par email.<br />

Il est également possible <strong>de</strong> déclencher un exécutable<br />

spécifique lorsqu'un contrôle est en erreur. Cela permet<br />

par exemple d’envoyer un SMS, <strong>de</strong> prévenir par<br />

téléphone, voire même <strong>de</strong> relancer un serveur.<br />

Mise en place d'un contrôle<br />

d'application<br />

// Début <strong>de</strong> la surveillance par le<br />

robot<br />

// Si le traitement est trop long,<br />

// le robot le signalera<br />

SignalerActivite(…<br />

fRepExe()+["\"]+"Activite.ini",…<br />

"Activite", "JeFonctionne")<br />

// Traitement critique à surveiller<br />

// ...<br />

// Fin <strong>de</strong> la surveillance par le robot<br />

SignalerActivite(…<br />

fRepExe()+["\"]+"Activite.ini",…<br />

"Activite", "JeFonctionne", Faux)<br />

La procédure SignalerActivite accepte en paramètre :<br />

• le chemin du fichier .ini. En effet, le robot, pour contrôler que<br />

l'application est toujours en activité, lit un fichier .ini. L'application<br />

doit simplement écrire régulièrement dans ce fichier .ini.<br />

• la section du fichier .ini.<br />

• le mot-clé du fichier .inI.<br />

• l'indicateur <strong>de</strong> début ou fin <strong>de</strong> surveillance : il suffit d'indiquer<br />

Vrai pour que le robot active la surveillance <strong>de</strong> l'application, Faux<br />

pour que le robot stoppe la surveillance.<br />

• SignalerActivite_Automatique : cette procédure permet <strong>de</strong><br />

signaler <strong>de</strong> façon automatique que l'application est toujours<br />

active.<br />

94 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Il est conseillé d'utiliser cette procédure pour surveiller qu'une<br />

application qui tourne en permanence soit toujours active.<br />

// Signalement <strong>de</strong> l'activité<br />

// toutes les 2 minutes<br />

SignalerActivite_Automatique(…<br />

fRepExe()+["\"]+"Activite.ini",…<br />

"Activité","JeFonctionne", 120)<br />

La procédure SignalerActivite_Automatique accepte en paramètre<br />

:<br />

• le chemin du fichier .ini.<br />

• la section du fichier .ini.<br />

• le mot-clé du fichier .inI.<br />

• la temporisation entre <strong>de</strong>ux signalements d'activité. Par exemple,<br />

pour que l'application signale son activité toutes les 2 minutes, il<br />

suffit d'indiquer 120 secon<strong>de</strong>s.<br />

Le fichier .ini doit bien sûr être accessible aussi bien par l'application<br />

que par le robot <strong>de</strong> surveillance.<br />

Il est donc conseillé d'utiliser un répertoire partagé, <strong>de</strong> préférence<br />

sur le poste où tourne l'application. L'écriture dans un fichier .ini<br />

est en effet beaucoup plus rapi<strong>de</strong> en local qu'en réseau.<br />

Paramétrage du contrôle du robot<br />

Pour paramétrer un contrôle dans le robot, il suffit d'utiliser le<br />

moniteur <strong>de</strong> surveillance. Ce moniteur est livré en standard avec<br />

WinDev.<br />

La création d'un contrôle est accessible via le menu contextuel<br />

<strong>de</strong> la table (clic-droit) ou par l'icone "Ajouter un contrôle" <strong>de</strong> la<br />

barre d'outils.<br />

Paramètres généraux<br />

Pour contrôler une application WinDev, il suffit <strong>de</strong> sélectionner<br />

comme type <strong>de</strong> contrôle "Activité d'une application WinDev".<br />

Il est possible <strong>de</strong> paramétrer les tranches horaires d’exécution, les<br />

jours d’exécution. Cela permet par exemple <strong>de</strong> mettre en place<br />

la surveillance d'application uniquement lorsque personne n'est<br />

sur le site (week-end, nuit).<br />

Enfin, il est possible <strong>de</strong> paramétrer le message d'erreur :<br />

• la gravité <strong>de</strong> l'erreur<br />

• les messages personnalisés.<br />

• les <strong>de</strong>stinataires <strong>de</strong>s messages.<br />

Notre astuce :<br />

Pensez à renseigner une "Solution/Ai<strong>de</strong>" sur les contrôles critiques,<br />

en indiquant par exemple où se situe le serveur ou comment redémarrer<br />

l'application. Ces informations seront fournies à tous les<br />

<strong>de</strong>stinataires dans le message d'erreur envoyé par le robot.<br />

Il est également possible <strong>de</strong> définir un programme à lancer pour<br />

solutionner le problème. Par exemple, dans le cas d'une surveillance<br />

d'une machine serveur, il est possible <strong>de</strong> lancer un exécutable<br />

charger <strong>de</strong> redémarrer le serveur.<br />

Paramètres spécifiques<br />

Dans les paramètres spécifiques, il convient d'indiquer les informations<br />

sur l'application. Ces informations permettent au robot<br />

d'envoyer un message clair en cas <strong>de</strong> problème : quelle application<br />

est en erreur ? sur quelle machine ? ...<br />

Ensuite, il est nécessaire d'indiquer les informations sur le fichier<br />

d'activité .ini où l'application écrit. Il suffit <strong>de</strong> renseigner les<br />

paramètres indiqués dans l'appel à la procédure SignalerActivite_<br />

Automatique.<br />

Notre astuce :<br />

Il est possible <strong>de</strong> désactiver temporairement un contrôle. Il suffit<br />

<strong>de</strong> décocher l'option "Contrôle activé" : cela peut servir en phase<br />

<strong>de</strong> maintenance du serveur, ou <strong>de</strong> <strong>de</strong>bug d'application.<br />

Fonctionnalités spécifiques<br />

Remarque :<br />

Le robot <strong>de</strong> surveillance permet <strong>de</strong> contrôler différents éléments<br />

:<br />

• serveur d'application WebDev,<br />

• serveur <strong>de</strong> base <strong>de</strong> données,<br />

• serveur NNTP,<br />

• serveur SMTP,<br />

• sites,<br />

• espace disque,<br />

• ...<br />

Le "délai entre <strong>de</strong>ux contrôles" doit correspondre au délai passé<br />

en paramètre <strong>de</strong> la fonction SignalerActivite_Automatique dans<br />

l'application à surveiller.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 95


databinding<br />

Deux exemples concrets d'utilisation du<br />

DataBinding<br />

En version 14, WinDev propose le DataBinding entre<br />

les champs et les variables du co<strong>de</strong>.<br />

Chaque champ peut être relié à une rubrique <strong>de</strong> fichier<br />

ou bien à une variable : une structure, un objet, …<br />

Le DataBinding permet d’éliminer simplement <strong>de</strong>s<br />

centaines <strong>de</strong> lignes <strong>de</strong> co<strong>de</strong>.<br />

Projet d'illustration<br />

Le projet utilisé pour illustrer ce sujet est "WD Databinding" , livré<br />

en standard dans WinDev.<br />

Remplissage <strong>de</strong> champs <strong>de</strong>puis<br />

une structure<br />

Liaison <strong>de</strong>s champs<br />

Ensuite, il faut réaliser la fenêtre qui va afficher les informations<br />

<strong>de</strong> la structure. Pour qu'un champ donné affiche le contenu d'une<br />

variable <strong>de</strong> la structure, il est nécessaire <strong>de</strong> lier ce champ à cette<br />

variable. Cette opération doit être effectuée pour chaque champ<br />

correspondant à une variable <strong>de</strong> la strucutre.<br />

Pour lier un champ à une variable <strong>de</strong> structure, il suffit <strong>de</strong> :<br />

• ouvrir la fenêtre <strong>de</strong> <strong>de</strong>scription du champ sur l'onglet "Liaison";<br />

par exemple, sur le champ "SAI_PRENOM".<br />

• sélectionner "Variables" parmis les types <strong>de</strong> liaison disponibles<br />

(fichier, requête, ...),<br />

• sélectionner la structure souhaitée. Dans l'exemple, il s'agit <strong>de</strong><br />

gcvMaStructure,<br />

• sélectionner la variable à lier au champ; par exemple, sPrénom.<br />

Déclaration d'une structure<br />

Dans un premier temps, il convient <strong>de</strong> déclarer une structure<br />

permettant <strong>de</strong> stocker les informations souhaitées; dans la fenêtre<br />

<strong>de</strong> 'FEN_PRINCIPALE" <strong>de</strong> l'exemple, il s'agit <strong>de</strong>s informations<br />

d'un contact.<br />

// Déclaration <strong>de</strong> la structure<br />

STCONTACT est une structure<br />

sNom est une chaîne<br />

sPrénom est une chaîne<br />

sDateNaissance est une chaîne<br />

sCommentaires est une chaîne<br />

FIN<br />

Il suffit alors <strong>de</strong> déclarer une variable globale <strong>de</strong> cette structure.<br />

C'est cette variable globale qui sera utilisée comme source du<br />

DataBinding.<br />

// Contact en <strong>cours</strong><br />

gvcMaStructure est un STCONTACT<br />

Remarque :<br />

Dans l'exemple "WD Databinding", la déclaration <strong>de</strong> la structure<br />

et <strong>de</strong> la variable est faite en une seule fois. Cette syntaxe peut<br />

être utilisée uniquement si la structure est utilisée par une seule<br />

variable.<br />

gvcMaStructure est composée <strong>de</strong><br />

sNom est une chaîne<br />

sPrénom est une chaîne<br />

sDateNaissance est une chaîne<br />

sCommentaires est une chaîne<br />

FIN<br />

Notre astuce :<br />

Il est possible <strong>de</strong> créer automatiquement tous les champs d'une<br />

variable structure en une seule fois. Pour cela, il suffit <strong>de</strong> :<br />

• ouvrir l'explorateur <strong>de</strong> projet si nécessaire par le menu "Affichage<br />

.. Barre d'outils .. Explorateur <strong>de</strong> projet".<br />

• dérouler les informations <strong>de</strong> la fenêtre souhaitée.<br />

• sélectionner "Variables".<br />

• faire un Drag and Drop <strong>de</strong> la variable globale <strong>de</strong>puis l'explorateur<br />

directement dans la fenêtre.<br />

Remplissage <strong>de</strong>s champs <strong>de</strong>puis la structure<br />

Une fois les champs liés à la variable structure, il suffit d'appeler<br />

la fonction WLangage <strong>Source</strong>VersEcran (ou <strong>Source</strong>VersPage s'il<br />

s'agit d'un projet WebDev).<br />

96 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Cette procédure attend en paramètre :<br />

• le nom <strong>de</strong> la fenêtre contenant les champs à remplir,<br />

• le nom <strong>de</strong> la source pour laquelle les champs liés seront mis<br />

à jour.<br />

// Mise à jour <strong>de</strong>s champs liés à gcvMaStructure<br />

<strong>Source</strong>VersEcran(FEN_PRINCIPALE, …<br />

"gcvMaStructure")<br />

Remarque :<br />

Si <strong>de</strong> nouveaux membres apparaissent dans la structure, il suffit<br />

d'ajouter un champ dans la fenêtre et <strong>de</strong> le lier au nouveau membre.<br />

Aucune modification <strong>de</strong> co<strong>de</strong> n'est nécessaire.<br />

Liaison <strong>de</strong> la table<br />

Ensuite, il faut lier la table à la variable tableau contenant les<br />

informations à afficher.<br />

Pour créer une table basée sur une variable <strong>de</strong> type tableau, il<br />

suffit <strong>de</strong> :<br />

• insérer un nouveau champ table (via le menu "Insertion .. Champ<br />

.. Table" par exemple).<br />

• indiquer que la table doit "Afficher <strong>de</strong>s données d'une variable<br />

existante".<br />

• choisir la variable <strong>de</strong> type tableau qui contient les informations<br />

à afficher.<br />

• sélectionner les colonnes qui seront visibles dans la table.<br />

Fonctionnalités spécifiques<br />

Remplissage <strong>de</strong> la structure <strong>de</strong>puis les champs<br />

La récupération dans la structure <strong>de</strong>s informations contenues dans<br />

les champs s'effectue aussi simplement que le remplissage <strong>de</strong> ces<br />

champs. Il suffit d'appeler la fonction WLangage EcranVers<strong>Source</strong><br />

(ou PageVersSouce s'il s'agit d'un projet WebDev). Cette procédure<br />

attend en paramètres :<br />

• le nom <strong>de</strong> la fenêtre contenant les champs à remplir,<br />

• le nom <strong>de</strong> la source pour laquelle les variables seront mises à<br />

jour.<br />

// Mise à jour <strong>de</strong> la structure gcvMaStructure<br />

EcranVers<strong>Source</strong>(FEN_PRINCIPALE, …<br />

"gcvMaStructure")<br />

Remplissage d'une table <strong>de</strong>puis<br />

une classe<br />

L'exemple <strong>de</strong> remplissage <strong>de</strong> table <strong>de</strong>puis une classe s'appuie<br />

sur la fenêtre "FEN_DATABINDING_CLASSES" <strong>de</strong> l'exemple "WD<br />

DataBinding". Le remplissage d'une zone répétée, d'une liste, etc.<br />

<strong>de</strong>puis une classe ou une structure s'effectue <strong>de</strong> la même façon<br />

que pour une table.<br />

Déclaration d'un tableau <strong>de</strong> classes<br />

Dans un premier temps, il convient <strong>de</strong> déclarer le tableau <strong>de</strong><br />

classe qui servira <strong>de</strong> source à la table. Dans l'exemple, il s'agit du<br />

membre ListeContact <strong>de</strong> la classe CListeContact.<br />

// Tableau <strong>de</strong> CContact<br />

gclMaListeDeContacts est un tableau <strong>de</strong> …<br />

CContact dynamique<br />

Remarque :<br />

Pour lier une table existante à une variable tableau, il suffit<br />

<strong>de</strong> :<br />

• modifier, dans l'onglet "Contenu", la combo "<strong>Source</strong> parcourue"<br />

en indiquant la variable <strong>de</strong> type tableau à afficher.<br />

• modifier la combo "Valeur mémorisée" qui indique la variable<br />

mémorisée pour la ligne courante.<br />

• modifier la liaison <strong>de</strong> chaque colonne.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 97


Développement spécifique<br />

Développer une application WinDev pour<br />

une utilisation sur Asus EEE-Top<br />

L'EEE-Top ("Easy to learn, work and play") est un PC<br />

tout-en-un tactile commercialisé par Asus.<br />

Ce PC possè<strong>de</strong> un écran 16/9 pour une résolution<br />

<strong>de</strong> 1377x768. L'ordinateur complet tient dans l'écran<br />

LCD.<br />

WinDev permet <strong>de</strong> développer facilement <strong>de</strong>s applications<br />

pour ce périphérique.<br />

Projet d'illustration<br />

Le projet "WD Voyages CE", fourni avec ce support <strong>de</strong> <strong>cours</strong>, est<br />

un exemple d'application dédiée à une utilisation sur EEE-Top. Il<br />

est cependant possible <strong>de</strong> l'utiliser sur toute machine Windows.<br />

Conseils <strong>de</strong> développement<br />

L'EEE-Top est une plateforme spécifique qui nécessite <strong>de</strong> porter une<br />

attention particulière lors du développement et particulièrement<br />

au niveau <strong>de</strong> l'IHM.<br />

En effet, même si cette plateforme est fournie avec clavier et<br />

souris, l'utilisation principale qui en est faite est une utilisation<br />

tactile. Les conseils donnés ci-après sont donc essentiellement<br />

<strong>de</strong>stinés aux applications 100% tactiles.<br />

Taille <strong>de</strong> la fenêtre<br />

Premier point à prendre en compte, la taille <strong>de</strong> l'écran. L'EEE-Top<br />

dispose d'un écran format 16/9 d'une résolution <strong>de</strong> 1366x768 pixels.<br />

Pour gérer cette taille d'écran dans un projet, <strong>de</strong>ux possibilités<br />

sont offertes :<br />

1- soit le projet est <strong>de</strong>stiné uniquement à générer une application<br />

pour EEE-Top. Dans ce cas, il est préférable <strong>de</strong> spécifier la taille<br />

préférentielle <strong>de</strong>s fenêtres directement pour<br />

le projet. Pour cela, il suffit <strong>de</strong> :<br />

• ouvrir la fenêtre <strong>de</strong> <strong>de</strong>scription du projet,<br />

par le menu "Projet .. Description du<br />

projet".<br />

• cliquer sur le bouton "Taille <strong>de</strong>s écrans"<br />

<strong>de</strong> l'onglet "Style".<br />

• saisir une taille d'écran personnalisée;<br />

dans notre cas 1366x768.<br />

• vali<strong>de</strong>r les modifications.<br />

De cette façon, chaque nouvelle fenêtre<br />

créée aura automatiquement les dimensions<br />

requises pour une application EEE-Top.<br />

2- soit le projet est <strong>de</strong>stiné à générer différentes<br />

applications pour différentes plateformes.<br />

Dans ce cas, il est préférable <strong>de</strong><br />

créer un modèle <strong>de</strong> fenêtres aux dimensions<br />

<strong>de</strong> l'EEE-TOP. Il suffit alors, à la création<br />

d'une nouvelle fenêtre, d'indiquer qu'elle<br />

est basée sur le modèle.<br />

Taille <strong>de</strong> la police<br />

L'affichage par défaut d'un EEE-Top est en<br />

gran<strong>de</strong> police (120ppp, soit environ 125 %<br />

<strong>de</strong> la taille normale). Cela signifie que les<br />

polices peuvent paraître "légèrement plus<br />

grosses" sur l'EEE-Top par rapport aux polices<br />

du poste <strong>de</strong> développement.<br />

Il faut donc toujours gar<strong>de</strong>r à l'esprit ce<br />

"grossissement" lors <strong>de</strong> la définition <strong>de</strong>s<br />

styles dans WinDev.<br />

98 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


Taille <strong>de</strong>s boutons<br />

Lors d'une utilisation tactile, la précision du clic est largement<br />

moindre que lors d'une utilisation avec une souris ou un stylet.<br />

Les boutons <strong>de</strong> taille standard (80x24) et inférieurs sont donc à<br />

proscrire au maximum.<br />

L'utilisation <strong>de</strong> "gros" bouton est largement préférable.<br />

Saisie <strong>de</strong> texte<br />

Dans une utilisation 100% tactile, l'utilisateur ne dispose d'aucun<br />

clavier pour saisir <strong>de</strong>s informations, effectuer <strong>de</strong>s recherches,<br />

etc.<br />

Pour palier ce problème, WinDev dispose d'un composant livré en<br />

standard : le composant "WD Ecran Tactile".<br />

Le texte indicatif est disponible dans l'onglet "Ai<strong>de</strong>" <strong>de</strong> la fenêtre<br />

<strong>de</strong> <strong>de</strong>scription du champ <strong>de</strong> saisie.<br />

Et pour le reste ...<br />

Hormis ces conseils pratiques pour "bien démarrer", le développement<br />

d'applications pour EEE-Top est tout à fait semblable à<br />

un développement classique :<br />

• toutes les fonctionnalités du WLangage sont disponibles.<br />

• l'utilisation d'une base HyperFileSQL Classic est possible.<br />

• ...<br />

Fonctionnalités spécifiques<br />

Ce composant permet d'afficher différents types <strong>de</strong> clavier (alphabétique,<br />

numérique, complet) pour permettre la saisie sur écran<br />

tactile.<br />

Dans l'exemple "WD Voyages CE", le clavier est activé lors <strong>de</strong> l'entrée<br />

dans le champ <strong>de</strong> saisie <strong>de</strong> recherche. Il suffit alors <strong>de</strong> taper<br />

les premières lettres <strong>de</strong> la recherche : à chaque lettre tapée,<br />

l'affichage est filtré par rapport à la recherche en <strong>cours</strong>.<br />

Dans tous les cas, il est conseillé d'éviter au maximum la saisie<br />

par l'utilisateur dans ce type d'application:<br />

• la saisie par clavier virtuel est adaptée pour quelques caractères,<br />

mais reste non pratique pour saisir <strong>de</strong> longs textes.<br />

• le clavier virtuel (qui nécessite lui aussi <strong>de</strong> gros boutons) occupe<br />

une place non négligeable dans l'interface (environs 40% <strong>de</strong> l'écran<br />

en hauteur et toute la largeur).<br />

Il est préférable <strong>de</strong> proposer à l'utilisateur <strong>de</strong>s choix prédéfinis,<br />

<strong>de</strong>s filtres, par l'intermédiaire <strong>de</strong> champs sélecteurs, interrupteurs<br />

ou liste par exemple.<br />

L'idéal, dans un souci <strong>de</strong> confort et d'accessibilité, est que l'utilisateur<br />

arrive aux informations souhaitées en 4 ou 5 touches<br />

maximum.<br />

Texte indicatif<br />

Si l'utilisation d'un champ <strong>de</strong> saisie est indispensable, par exemple<br />

le champ <strong>de</strong> recherche d'activité dans notre application "WD<br />

Voyages CE", l'utilisation <strong>de</strong>s textes indicatifs est recommandée.<br />

Le texte indicatif est ce petit libellé affiché dans le champ <strong>de</strong><br />

saisie lorsque celui-ci est vi<strong>de</strong> et qui disparaît automatiquement<br />

lors <strong>de</strong> l'entrée en saisie dans le champ. Il permet <strong>de</strong> donner une<br />

indication supplémentaire sur ce qui peut ou ce qui doit être saisi<br />

dans le champ.<br />

Dans le cas d'applications pour EEE-Top, le texte indicatif permet<br />

avantageusement <strong>de</strong> remplacer le libellé du champ <strong>de</strong> saisie pour<br />

offrir une IHM plus épurée et donc plus agréable.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - 99


Géolocalisation<br />

Géolocaliser une flotte <strong>de</strong> téléphones<br />

mobiles<br />

Cette technologie consiste à repérer les antennes les plus proches du<br />

portable. Ensuite, la distance entre chaque antenne et le portable<br />

est déduite d’après la vitesse que mettent les données pour faire<br />

un aller-retour ce qui permet d'en déduire la position.<br />

Évi<strong>de</strong>mment, le propriétaire du portable doit donner son accord<br />

préalable pour être localisé. Cet accord n’est à donner qu’une<br />

seule fois.<br />

Repérer le technicien le plus proche du lieu d'intervention,<br />

localiser un véhicule en panne, calculer un<br />

itinéraire optimisé, les besoins <strong>de</strong> géolocalisations<br />

sont importants. Une <strong>de</strong>s solutions est d'utiliser la<br />

géolocalisation cellulaire, c'est-à-dire la localisation<br />

d'un téléphone portable.<br />

L'exemple présente la mise en œuvre <strong>de</strong> la solution<br />

<strong>de</strong> géolocalisation pour les mobiles Orange© par le<br />

service "Location API".<br />

Important : pour utiliser cette fonctionnalité, vous <strong>de</strong>vez disposer<br />

d'un contrat avec la société Orange. Retrouvez plus <strong>de</strong> détails sur<br />

cette page :<br />

http://<strong>www</strong>.orangepartner.com/win<strong>de</strong>v<br />

Projet d'illustration<br />

Le projet utilisé pour illustrer ce sujet est le composant "WD<br />

Geolocalisation en association avec Orange". Ce composant propose<br />

différentes métho<strong>de</strong>s permettant <strong>de</strong> localiser un téléphone<br />

mobile Orange.<br />

Le composant "WD Geolocalisation en association avec Orange"<br />

nécessite une clé. Cette clé est fournie par Orange lors <strong>de</strong> l'activation<br />

<strong>de</strong> ce service.<br />

Ce projet est présent sur le DVD fourni avec ce support <strong>de</strong><br />

<strong>cours</strong>.<br />

Fonctionnement<br />

Le système <strong>de</strong> géolocalisation utilisé est un service commercialisé<br />

par Orange. Ce service permet <strong>de</strong> localiser un portable donné où<br />

qu'il soit et ce partout en France. Bien sûr, le portable doit être<br />

allumé et avoir accès au réseau.<br />

Ce service fonctionne avec une précision <strong>de</strong> 50 à 150 mètres en<br />

ville et <strong>de</strong> 150 mètres à 3 kilomètres en zone rurale.<br />

La technologie utilisée s’appelle "Cell-ID", pour "localisation<br />

cellulaire".<br />

Utilisation du composant<br />

Dans le projet exemple, le composant <strong>de</strong> géolocalisation a déjà été<br />

intégré. Pour rappel, l'intégration d'un composant dans un projet<br />

est accessible via le menu "Atelier .. Composant .. Importer un<br />

composant dans le projet".<br />

Dans ce projet, la géolocalisation se déroule en <strong>de</strong>ux étapes :<br />

• Saisie du numéro <strong>de</strong> téléphone à localiser dans le champ <strong>de</strong><br />

saisie.<br />

• clic sur le bouton "Localiser" pour lancer la géolocalisation<br />

proprement dite. Une fois les coordonnées récupérées à l'ai<strong>de</strong> du<br />

service Orange, le portable peut être positionné sur une carte,<br />

par exemple via Google Earth.<br />

Localisation du mobile<br />

La localisation du mobile s'effectue par la fonction<br />

Deman<strong>de</strong>Localisation fournie par le composant. Cette procédure<br />

accepte en paramètres :<br />

• la clé d'i<strong>de</strong>ntification fournie par orange pour utiliser le service<br />

<strong>de</strong> géolocalisation. Ce numéro est fourni par Orange lors <strong>de</strong> la<br />

souscription au service <strong>de</strong> géolocalisation. Cette clé est à renseigner<br />

dans la constante CLE_ORANGE <strong>de</strong> l'application.<br />

• le numéro <strong>de</strong> mobile qui doit être localisé. Ce numéro doit<br />

être au format "336xxxxxxxx" ("336" suivi <strong>de</strong>s 8 <strong>de</strong>rniers chiffres<br />

du numéro).<br />

// Deman<strong>de</strong> la localisation du mobile<br />

// en indiquant la clé Orange<br />

Deman<strong>de</strong>Localisation(…<br />

CLE_ORANGE,"336xxxxxxxx")<br />

Une fois le numéro <strong>de</strong>mandé localisé, le service <strong>de</strong> géolocalisation<br />

renvoie la position du mobile sous la forme d'une latitu<strong>de</strong> et d'une<br />

longitu<strong>de</strong>. Ces coordonnées peuvent alors être récupérées par les<br />

fonctions getLatitu<strong>de</strong> et getLongitu<strong>de</strong> du composant.<br />

// Récupération <strong>de</strong> la latitu<strong>de</strong> et longitu<strong>de</strong><br />

// du mobile localisé<br />

sLatitu<strong>de</strong> = getLatitu<strong>de</strong>()<br />

sLongitu<strong>de</strong> = getLongitu<strong>de</strong>()<br />

En cas d'erreur (ou <strong>de</strong> refus <strong>de</strong> géolocalisation), un message d'erreur<br />

clair peut être obtenu par la fonction getErreurInformation.<br />

100 - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


<strong>TDF</strong> <strong>Tech</strong> <strong>2009</strong><br />

Annexes<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - I


Annexe A<br />

Quelques comman<strong>de</strong>s du WLangage<br />

Attention : Le lexique ci-<strong>de</strong>ssous n’est qu’un extrait <strong>de</strong>s possibilités du langage <strong>de</strong> WinDev, WebDev et WinDev Mobile. La lecture<br />

<strong>de</strong>s manuels fournis reste incontournable. Ne sont présentées ici que les comman<strong>de</strong>s nécessaires à la bonne compréhension <strong>de</strong> cette<br />

formation.<br />

Comman<strong>de</strong>s <strong>de</strong> gestion <strong>de</strong> fichiers<br />

Comman<strong>de</strong> / Syntaxe<br />

But<br />

EcranVersFichier<br />

FichierVersEcran<br />

HAjoute(NomFichier)<br />

HCréationSiInexistant(NomFichier)<br />

HErreurDoublon()<br />

Renseigner le buffer fichier d’après les données saisies<br />

par l’utilisateur dans la fenêtre.<br />

Initialiser une fenêtre d’après les <strong>de</strong>rnières valeurs lues<br />

dans le fichier.<br />

Ajouter dans le fichier l’enregistrement préparé en<br />

mémoire.<br />

Ouvrir le fichier en le créant à vi<strong>de</strong> auparavant s’il<br />

n’existait pas sur disque.<br />

Tester le compte-rendu renvoyé par le moteur <strong>de</strong> base <strong>de</strong><br />

données en cas <strong>de</strong> tentative <strong>de</strong> création <strong>de</strong> doublon.<br />

HErreurIntégrité()<br />

HFiltre(NomFichier,Clé,Valeur)<br />

HLitDernier(NomFichier, Clé)<br />

HLitPrécé<strong>de</strong>nt(NomFichier, Clé)<br />

HLitPremier(NomFichier,Clé)<br />

HLitRecherchePremier(NomFichier,...<br />

Clé, Valeur)<br />

Tester le compte-rendu renvoyé par le moteur <strong>de</strong> base <strong>de</strong><br />

données en cas <strong>de</strong> tentative d’écriture d’enregistrement<br />

ne respectant pas les contraintes d’intégrité.<br />

Filtrer les enregistrements du fichier dont la clé indiquée<br />

correspond à la valeur choisie.<br />

Se positionner sur le <strong>de</strong>rnier enregistrement du fichier<br />

selon la clé spécifiée et charger l’enregistrement en<br />

mémoire.<br />

Se positionner sur l’enregistrement précé<strong>de</strong>nt du fichier<br />

selon la clé spécifiée et charger l’enregistrement en<br />

mémoire.<br />

Se positionner sur le premier enregistrement du fichier<br />

selon la clé spécifiée et charger l’enregistrement en<br />

mémoire.<br />

Rechercher le premier enregistrement du fichier dont la<br />

clé indiquée correspond à la valeur choisie, puis charger<br />

l’enregistrement en mémoire.<br />

II - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr


HLitSuivant(NomFichier,Clé)<br />

HModifie(NomFichier)<br />

HRaz(NomFichier)<br />

HSupprime(NomFichier)<br />

Se positionner sur l’enregistrement suivant du fichier<br />

selon la clé spécifiée et charger l’enregistrement en<br />

mémoire.<br />

Réécrire l’enregistrement courant du fichier avec les<br />

valeurs stockées en mémoire.<br />

Remettre à zéro (réinitialiser) l’enregistrement du<br />

fichier.<br />

Supprimer l’enregistrement courant du fichier.<br />

Annexes<br />

Compte-rendu du moteur <strong>de</strong> bases<br />

<strong>de</strong> données<br />

HEnDehors(NomFichier)<br />

HTrouve(NomFichier)<br />

Valeur<br />

Renvoie Vrai si on tente <strong>de</strong> lire un enregistrement au<strong>de</strong>là<br />

du début ou <strong>de</strong> la fin du fichier.<br />

Renvoie Vrai après une recherche si la recherche a<br />

abouti.<br />

Autres comman<strong>de</strong>s<br />

Comman<strong>de</strong> / Syntaxe<br />

DateSys()<br />

Erreur(“Message”)<br />

ExécuteTraitement(Champ,...<br />

Traitement)<br />

HeureSys()<br />

Info(“Message”)<br />

Confirmer(“Question”)<br />

RAZ()<br />

RepriseSaisie(NomChamp)<br />

TableAffiche(NomTable, Position)<br />

ListeAjoute(NomListe, chaine)<br />

ListeSupprime(NomListe)<br />

But<br />

Récupérer la date système au format AAAAMMJJ.<br />

Afficher un message d’erreur.<br />

Exécuter le traitement d’un champ ou d’une fenêtre.<br />

Récupérer l’heure système au format HHMMSSCC.<br />

Afficher un message d’information.<br />

Poser une question à l’utilisateur (la réponse est un<br />

booléen) .<br />

Remettre à zéro (réinitialiser) tous les champs <strong>de</strong><br />

l’écran.<br />

Interrompre le traitement en <strong>cours</strong> et positionner le curseur<br />

sur le champ spécifié.<br />

Réafficher un champ table fichier (à l’écran) d’après les<br />

données du fichier sur disque.<br />

Ajouter une ligne dans un champ liste ou combo.<br />

Supprimer une ligne <strong>de</strong> liste ou combo.<br />

Les comman<strong>de</strong>s sont indiquées avec la syntaxe utilisée dans les exemples réalisés.<br />

Certaines fonctions acceptent d’autres paramètres ; se référer à l’ai<strong>de</strong> en ligne pour plus <strong>de</strong><br />

d’informations.<br />

<strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr - III


Annexe B<br />

Les principales touches <strong>de</strong> raccourci<br />

La liste ci-<strong>de</strong>ssous présente les touches <strong>de</strong> fonction et les combinaisons <strong>de</strong> touches permettant d’accé<strong>de</strong>r directement à une fonctionnalité<br />

<strong>de</strong> WinDev. Cette liste n’est pas exhaustive.<br />

Important : Sous WinDev, dans l’éditeur <strong>de</strong> fenêtres, comme dans l’éditeur <strong>de</strong> co<strong>de</strong>, il est possible d’accé<strong>de</strong>r simplement aux différentes<br />

actions disponibles grâce au menu contextuel (Il suffit <strong>de</strong> faire un clic droit à la position <strong>de</strong> la souris).<br />

Principales touches <strong>de</strong> raccourcis <strong>de</strong> l’éditeur <strong>de</strong> fenêtres<br />

Touche<br />

F1<br />

F5<br />

F6<br />

CTRL<br />

CTRL+C, CTRL+V, CTRL+X<br />

CTRL+R<br />

SHIFT+F9<br />

But<br />

Ai<strong>de</strong> en ligne.<br />

Visualiser l’ordre <strong>de</strong> saisie (ordre <strong>de</strong> tabulation).<br />

Visualiser le nom <strong>de</strong>s champs.<br />

Permet <strong>de</strong> sélectionner plusieurs champs à la souris.<br />

Copier, Coller, Couper un champ, avec ses propriétés et son<br />

co<strong>de</strong> associé.<br />

Affiche ou rend invisible les règles d’alignement.<br />

Tester l’IHM d’une fenêtre sans exécuter les traitements.<br />

Principales touches <strong>de</strong> raccourcis <strong>de</strong> l’éditeur <strong>de</strong> co<strong>de</strong><br />

Touche<br />

But<br />

F1<br />

F2<br />

F4<br />

F8<br />

F11<br />

CTRL+C, CTRL+V, CTRL+X<br />

Ai<strong>de</strong> en ligne.<br />

Accé<strong>de</strong>r au co<strong>de</strong> d’une procédure en étant positionné sur le nom<br />

<strong>de</strong> la procédure auparavant (CTRL + F2 pour revenir).<br />

Créer une procédure locale (Shift + F4 pour créer une procédure<br />

globale).<br />

Liste <strong>de</strong>s procédures locales (CTRL + F8 pour la liste <strong>de</strong>s<br />

procédures globales).<br />

Liste <strong>de</strong>s fichiers, requêtes et rubriques.<br />

Copier, Coller, Couper du co<strong>de</strong>.<br />

CTRL + « / » (pavé numérique) Mettre en commentaire (CTRL + Shift + “ / ” pour enlever les<br />

commentaires).<br />

ALT + T<br />

Activer la pipette pour sélectionner le nom d’un champ d’une<br />

fenêtre.<br />

IV - <strong>TDF</strong> TECH <strong>2009</strong> - <strong>www</strong>.<strong>pcsoft</strong>.fr

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!