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 ...
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