Vous êtes sur la page 1sur 16

TABLEAUX DOBJETS ET DATABINDING

LAUTEUR DE CE TUTOR IEL


Dominique DAUSSY 3 Place de la Galaxie 76400 TOUSSAINT Mail : daussy.dominique@orange.fr Web : http://dominique-daussy.fr

Je suis dveloppeur et jutilise les produits pc-soft depuis Hyper-Screen ! Jai dcid dexposer mon savoir faire pour que vous puissiez en profiter. Peut tre vous direz vous, je le veux dans mon quipe ! En effet je suis en recherche demploi ce jour (04/01/2013).. Alors mieux quun CV, voici la dmonstration dune partie de mon savoir faire.

PRESENTATION DU TUTORIEL
Date : 04 Janvier 2013 - Version : 1.00A Ce tutoriel vous montre comment crer des objets, les utiliser en tableaux mmoire pour pouvoir ensuite afficher les donnes dans une table cran windev (table lie une variable de type tableau).

Vous devez avoir un minimum de connaissances en POO (Cration dune classe, ajout de mthodes et proprits. Lexemple a t dvelopp avec la version 17 de windev. Les manipulations dans windev ne sont pas dtailles, vous tes cens tre un utilisateur courant windev. Certains exemples de codes sont simplifis et ne sont pas obligatoirement optimiss pour des questions de comprhension. Ce code fonctionne avec windev mais devrai logiquement pouvoir tre utilis avec les autres produits pc-soft (webdev et windev mobile).

CREONS TOUT DABORD UN NOUVEAU PROJET


Pour lexemple, nous allons crer le projet tutoriel_001. Je suppose que vous connaissez la procdure pour crer un projet avec windev ! Crez un projet de type Application sans base de donnes avec le style que vous souhaitez.

CREATION DE LA CLASSE CL_CLIENT


Crez la classe cl_client en utilisant le menu Insertion>Nouvelle classe (vous pouvez galement ajouter des classes divers endroits dans linterface windev

Saisissez le nom de classe cl_client et validez.

Vous obtenez le squelette de classe suivant

SAISISSONS LES MEMBRES DE LA CLASSE


Un client aura un nom, un prnom, un statut (sans, prospect, litige en cours) et une date de naissance. Il suffit dajouter les membres correspondants ce qui donne le code ci-dessous

Les membres sont dclars en PRIVE pour respecter le principe dencapsulation des donnes. Seule la classe sera autorise modifier ses propres membres.

COMMENT MODIFIER LES INFORMATIONS DE MES OBJETS ?


Puisque les membres de ma classe sont privs, il ny a actuellement aucun moyen de modifier le nom, le prnom et les autres informations de mes objets. Les objets resteront dsesprment vides et ne serviront dont rien ! Pour initialiser nos objets, nous allons ajouter des proprits (les getter et setter en POO) pour tous les membres. Il sagit ici de donner la possibilit de pouvoir hydrater nos objets en terme POO. Pour crer une proprit, il suffit de slectionner la classe et de faire un clic droit sur son nom. Dans le menu contextuel qui apparait, slectionnez loption Nouvelle proprit.

Dans la fentre qui apparait, saisissez p_nom et cliquez sur le bouton Ajouter. Vous apercevez alors 2 zones de code dans lditeur windev ! Une qui porte le nom de Rcupration et une autre qui se nomme Affectation. Les proprits dun objet permettent en gnrale de connaitre OU modifier un tat de vos objets. Cest pour cette raison que windev propose deux zones de code indpendantes mais avec le mme nom. Une des zones servira retourner ltat (Rcupration) et lautre zone servira initialiser un tat (Affectation). Dans le code dune de vos fentres, vous pourrez donc voir ceci : Info(MonClient :p_Nom) Dans cet exemple, cest le code de rcupration de lobjet qui est sollicit puisquon effectue une lecture de la proprit. MonClient :p_Nom=DUPONT Dans cet autre code cest le code daffectation qui est sollicit puisque nous assignons une nouvelle valeur la proprit. Vous comprenez en fait quune proprit fonctionne a peu prt comme une variable simple quil est possible de lire ou de modifier et que selon laction (lire/modifier) ce nest pas le mme code qui est sollicit. Nous pourrions nous passer des proprits en crant deux mthodes Set_Nom et Get_Nom dans la classe mais jy vois deux inconvnients majeurs : - Deux noms diffrents Set_ et Get_ - Seules les proprits peuvent tre utilises avec le DataBinding !

LA PROPRIETE P_NOM
La proprit p_nom est une proprit simple ! Soit elle retourne la valeur du membre :Nom soit elle la met jour. Nous souhaitons par contre que le nom des clients soit en majuscules et sans espace devant/Derrire. Dans le code de rcupration de la proprit p_nom saisissez le code suivant :

Dans le code daffectation de la proprit p_nom, saisissez le code suivant :

La premire proprit est termine ! Nous allons la tester. Crez une nouvelle fentre que vous appelez Test. Dans cette fentre, crez un bouton et saisissez le code ci-dessous :

Excutez la fentre en mode test et cliquez sur le bouton. Vous devriez voir une fentre info avec le texte DUPONT en majuscules. Magique non ? Mais ce nest encore rien du tout !

LA PROPRIETE P_PRENOM
La proprit p_Prenom na rien de particulier, elle permet de rcuprer ou dinitialiser le prnom du client. Ajoutez cette proprit dans votre classe comme vous venez de le faire pour p_Nom et saisissez le code ci-dessous.

LA PROPRIETE P_DATENAISSANCE
La proprit p_DateNaissance permet de rcuprer et dinitialiser la date de naissance du client. On peut ajouter un contrle pour refuser une date si elle est suprieure la date du jour ! Les dates null sont acceptes. Ajoutez cette proprit dans votre classe et saisissez le code cidessous.

LA PROPRIETE P_STATUT
La proprit p_Statut permet de rcuprer et dinitialiser le code statut du client. Un contrle doit tre effectu pour affecter un code statut valide. Nous allons ajouter des constantes notre classe pour les 4 statuts suivant : Sans, Prospect, Client, Perdu. Votre dclaration de classe doit ressembler ceci

Et le code de la proprit p_Statut qui utilise ces constantes pour contrler la valeur du code laffectation.

Les proprits de bases sont termines. Pour changer, nous allons jouer avec cet objet et crer une table pour afficher et modifier un tableau de clients.

DATABINDING !
Nous allons maintenant crer une fentre avec une table cran qui affichera les donnes dun tableau dobjets cl_client. Nous pourrons ajouter de nouveaux clients et modifier directement les informations dans la table. Vous constaterez que le code dans linterface utilisateur sera vraiment minime. Crez une fentre vierge : F001_TableEtModification Pour que le DataBinding puisse fonctionner, il faut dclarer un tableau dobjets dans le code dinitialisation de la fentre. Ce tableau sera donc global la fentre et il pourra donc tre utilis comme source de donnes des composants visuels de windev. (Table, ZoneRepetee, liste et autres) Saisissez le code ci-dessous dans le code dinitialisation de votre fentre

Notes : Tous les tableaux globaux accessible (fentre, projet, autres objets etc..) peuvent tre utiliss comme source de donnes pour un composant visuel windev (table, liste zone rptes etc..).

CREER UNE TABLE WINDEV CONNECTEE AU TA BLEAU DOBJETS


Dposez une table windev dans votre fentre.

Slectionnez loption Afficher des donnes dune variable existante et cliquez sur la flche pour continuer.

Windev affiche les variables accessibles pour votre fentre. Ici le tableau que vous avez dclar dans le code dinitialisation de votre fentre Gbw_TableauClients. Slectionnez-le et cliquez sur la flche pour continuer.

Ici ca devient intressant ! Windev a bien dtect que le tableau mmoire tait un tableau dobjet cl_Client. Il nous propose donc de crer des colonnes de table et de les lier aux proprits de ces objets. Ajoutez toutes les proprits dans lordre que vous souhaitez. Cliquez ensuite sur le bouton de validation pour valider et terminer lassistant (il ny a rien modifier dans les autres panneaux de lassistant). Windev a gnrer la table automatiquement. Modifiez manuellement les informations de la table pour tre en phase avec ce tutoriel. Nom Colonne CCOL_Nom CCOL_Prenom CCOL_DateNaissance CCOL_Statut Titre Nom Prnom Date naissance Statut Type Texte Texte Date Entier

Adaptez la taille de la table et des colonnes votre convenance. Cest termin mais votre table reste dsesprment vide !!

BOUTON AJOUTER UN CLIENT


Ajoutez un bouton dans votre fentre. Le code crire doit faire plusieurs choses. 1) Ajouter un objet cl_client dans le tableau mmoire 2) Afficher la table windev lie ce tableau

Ce code nest pas la meilleure solution mais la plus comprhensible.

Lancez votre fentre en mode test et cliquez sur le bouton autant de fois que vous le souhaitez. Vous devez voir la table se remplir de lignes. A ce stade vous avez vu comment ajouter des objets dans un tableau et comment afficher ce tableau dans une table windev.

MODIFIER LES PROPRIETES DES OBJETS DEPUIS LA TABLE WINDEV


Pour modifier les proprits des objets ce nest pas trs compliqu. Rappelez-vous, les colonnes sont dj lies aux proprits des objets !! La table windev va se charger toute seule denvoyer les informations saisies dans les cellules (proprits) des diffrents objets (1 par ligne de la table).

Par exemple ici nous voyons que la colonne CCOL_Nom est relie la proprit p_Nom des objets du tableau Gbw_TableauClients. Lorsque lutilisateur va sortir dune ligne, windev va envoyer la valeur de toutes les colonnes vers les proprits correspondantes de lobjet ET r-afficher ces valeurs. Il y a un aller retour de linformation. Par exemple pour la colonne CCOL_Nom, si vous saisissez une chaine en minuscules, votre proprit va automatiquement la convertir en majuscules et r-afficher le rsultat lorsque vous changerez de ligne (option Enregistrer en sortie de ligne). Vrifiez juste que la table est bien paramtre pour enregistrer les modifications en sortie de ligne et que la table est en saisie. Nautorisez pas la saisie en cascade pour empcher lajout de nouvelles lignes automatiquement par windev.

Lancez la fentre et ajoutez des clients avec le bouton. Tentez de modifier un nom en minuscules et de saisir une date de naissance suprieure la date du jour et passez sur une autre ligne Vous pourrez constater que vos proprits jouent bien leur rle et contrle bien les donnes affectes aux colonnes.

AJOUTER DES PROPRIETES ET DES COLONNES DANS LES TABLES


Vous avez peut tre lhabitude (mauvaise !) de remplir certaines de vos tables avec un TableAjoute([NomTable],COL1+tab+COL2) ce mode est trs difficile grer car si vous remplissez plusieurs fois des tables avec une mme procdure il faut intercaler la nouvelle donnes dans la procdure la bonne position et il faut modifier toutes les tables et ajouter la nouvelle colonne exactement la mme position sous peine davoir des donnes dans les mauvaises colonnes.. Je suppose que vous connaissez le problme inhrent cette mthode de gestion de table. Avec la mthode de tableau et du databinding, il suffit dajouter une proprit dans lobjet et de crer une nouvelle colonne lie cette proprit ! Par exemple , nous souhaitons afficher lage du client 1) Ajoutez une nouvelle proprit p_Age dans la classe cl_client et saisissez le code comme ci-dessous

La proprit est en lecture seule, il sera possible de connaitre lge du client mais il ne sera pas possible de le modifier. Par contre la modification de la date de naissance par la proprit p_DateNaissance reste videmment possible. Vous pourriez ajouter du code dans laffectation et tenter de calculer la date de naissance approximative par rapport un ge. 2) Retournez dans la description de la table cran windev et ajoutez une nouvelle colonne CCOL_Age de type numrique avec le format 999 an(s)

3) Dans longlet Liaison de la colonne, slectionnez la nouvelle proprit

4) Testez votre fentre, lge doit se calculer et safficher lorsque vous modifiez une date de naissance et que vous sortez de la ligne (enregistrement en sortie de ligne) Voila, vous avez votre objet, un tableau dobjets et vous savez comment lafficher dans une table.

DIVERSES MANIPULATIONS POUR L EXEMPLE


FICHIERVERSTABLEAU
Vous connaissez la mthode FichierVersTableau ? Non ou vous ne savez pas comment et pourquoi lutiliser ! Je vous donne un bout de code que vous devriez tester 1) Crez un fichier Client dans votre projet avec les rubriques Nom,Prenom,DateNaissance et Statut. Lordre nest pas important mais le nom doit correspondre exactement au nom que vous avez dans votre classe cl_client 2) Ajoutez plusieurs clients dans ce fichier avec WdMap ou autre mthode 3) Ajouter un bouton dans votre fentre avec le code ci-dessous et tester !

La premire ligne charge tout le fichier dans le tableau dobjets ! Windev va automatiquement gnrer 1 objet par enregistrement et transfrer le contenu des rubriques dans les membres des objets. Il se base sur le nom des rubriques et des membres ! La deuxime ligne demande windev dafficher la table lie au tableau dobjets. Ces deux lignes peuvent donc dsormais tre utilises partout dans votre projet lorsque vous avez besoin dafficher tous vos clients dans une table, une liste ou une zone rpte ! FichierVersTableau fonctionne galement avec une requete ! Vous pouvez donc faire exactement le mme code avec une requte cre dans lditeur ou une requete SQL directement dans le code.

FONCTIONNALITE POUR SELECTIONNER DES CLIENTS


Lorsquon affiche des informations dans une table on veut pouvoir slectionner des lignes soit par la fonctionnalit propose par les tables multi-slection mais galement par une case cocher. Lapproche objet/tableau rend cette possibilit trs simple car il suffit dajouter une proprit de slection dans la classe cl_client ! Ajoutez le membre Selection dans votre classe cl_client

Ajoutez ensuite la proprit correspondante :p_Selection dans la classe cl_client

Retournez dans la fentre et ajoutez une nouvelle colonne dans votre table a la position que vous souhaitez.

Liez cette nouvelle colonne la nouvelle proprit.

Testez votre fentre.. Bon ok ca marche mais on ne se rend pas bien compte si les informations sont mmorises. Ajoutez un nouveau bouton dans votre fentre (CBTN_Selection) avec le code ci-dessous et testez votre fentre. Slectionnez des clients et cliquez sur ce nouveau bouton.