Introduction à WinDev et WLangage
Introduction à WinDev et WLangage
P a g e 1 | 42
Table de matière
II : Bases du WLangage
• 5.2 Ajout et configuration des contrôles (boutons, zones de texte, combo, tables, etc.)
P a g e 3 | 42
I : INTRODUCTION A L’ENVIRONNEMENT WINDEV
Objectifs :
WinDev est un environnement de développement intégré (IDE) édité par PC SOFT, conçu pour
faciliter le développement rapide d’applications (RAD). Il permet de créer des applications :
• de bureau (desktop),
• client/serveur,
Produit Description
• PC SOFT est une entreprise française créée en 1984, spécialisée dans les outils de
développement logiciel.
• Elle est réputée pour fournir des environnements puissants et productifs, adaptés aux
entreprises de toutes tailles.
• PC SOFT développe tous ses outils en interne, avec une grande attention portée à la
compatibilité ascendante (un projet développé avec une ancienne version reste
fonctionnel dans une version récente).
P a g e 4 | 42
WinDev a été conçu dans une logique productiviste :
Remarque: comparé à Java, où il faut combiner plusieurs outils (IDE, base de données,
framework, etc.), WinDev offre une solution intégrée et homogène.
• Développer des ERP (Enterprise Resource Planning ou, en français, Planification des
Ressources de l'Entreprise : système de gestion intégré qui centralise les données et les
processus d'une entreprise pour optimiser sa gestion globale), CRM (CRM signifie
Customer Relationship Management ou, en français, Gestion de la Relation Client. C'est
un système qui vise à optimiser la relation entre une entreprise et ses clients en
centralisant les données client et en facilitant le suivi commercial, marketing et service
client), logiciels de facturation, gestions de stock, RH, etc.
• Gérer des bases de données locales ou distantes (HFSQL, SQL Server, Oracle…).
• Composants visuels riches : tables, champs image, onglets, tableaux croisés, etc.
P a g e 5 | 42
1.2 Caractéristiques principales de WinDev
• Fournit des assistants intelligents, des modèles, des gabarits et des composants prêts
à l’emploi.
Exemple : en quelques clics, on peut créer une fiche client avec ajout, modification,
suppression, recherche, impression et exportation.
HFSQL est :
• Compatible avec les langages SQL, mais aussi avec les fonctions WLangage (ex. :
HAjoute, HModifie, HRecherchePremier).
Les requêtes peuvent être écrites en SQL standard ou à l’aide de l’éditeur visuel intégré.
Le WLangage est :
• Un langage propriétaire de haut niveau utilisé pour écrire le code dans WinDev.
Exemples :
P a g e 6 | 42
FIN
POUR i = 1 À 10
TableAjouteLigne(TABLE_Produits, i, "Produit " + i)
FIN
Tous ces éléments peuvent être liés dynamiquement à des données sans écrire
beaucoup de code.
P a g e 7 | 42
• MySQL, PostgreSQL, SQL Server, Oracle, DB2, etc.
P a g e 8 | 42
1.3.1 Qu’est-ce qu’un IDE ?
Zone Rôle
Ruban (en haut) Accès rapide aux outils (création, sauvegarde, exécution, test, etc.).
Éditeur central Zone principale où s’ouvrent les éditeurs de code, d’analyse, etc.
Barre d’état (en bas) Infos sur l’environnement, les erreurs, les raccourcis, etc.
Éditeur Utilité
P a g e 9 | 42
Éditeur d’analyse Conception de la base de données HFSQL (tables, relations,
index…).
• Cliquer sur une table dans l’analyse permet de générer automatiquement les fenêtres.
• Double-cliquer sur un bouton dans une fenêtre ouvre l’événement associé dans
l’éditeur de code.
Par exemple, si vous créez une table Client, WinDev peut générer automatiquement les
fenêtres :
• FEN_ClientAjout
• FEN_ClientModification
• FEN_ClientListe
Résumé
Objectifs :
WinDev permet de développer des applications pour plusieurs environnements, à partir d’un
même projet ou en adaptant selon les besoins :
P a g e 11 | 42
WebDev Applications web (Intranet/Internet)
Tous ces environnements partagent le WLangage, facilitant le passage d’un projet à l’autre.
1. Application de gestion
3. Applications connectées
• Intégration avec des API tierces : Google Maps, PayPal, services d’envoi SMS, etc.
Grâce à sa rapidité de développement et à ses outils intégrés, WinDev est souvent utilisé dans
les contextes suivants :
P a g e 13 | 42
1.5 – Comparaison entre Java et WLangage
Objectifs pédagogiques :
Base de données JDBC, ORM (Hibernate) HFSQL natif, SQL intégré, très assisté
➤ Déclaration de variables
WLangage :
➤ Conditions
P a g e 14 | 42
Java :
WLangage :
➤ Boucles
Java (for) :
WLangage :
POUR i = 1 À 5
Info(i)
FIN
➤ Procédure / méthode
Java :
WLangage :
Java :
class Personne {
P a g e 15 | 42
String nom;
void sePresenter() {
[Link]("Je suis " + nom);
}
}
WLangage :
CLASSE Personne
nom est une chaîne
PROCÉDURE sePresenter()
Info("Je suis " + nom)
FIN
FIN
Le concept d’objet est similaire mais plus souple dans WLangage, avec moins de rigueur sur
l'encapsulation et les types.
SI HLitPremier(Client) ALORS
TANTQUE PAS HEnDehors()
Info([Link])
HLitSuivant(Client)
FIN
FIN
WinDev gère nativement les fichiers de données et rend le parcours des enregistrements très
simple.
Java :
P a g e 16 | 42
• Utilisation de JavaFX ou Swing
WinDev :
Moins adapté aux architectures Java reste préféré pour les applications industrielles
complexes lourdes
Moins documenté en open source Communauté plus restreinte que celle de Java
Conclusion
Le WLangage n’a pas pour vocation de remplacer Java dans tous les contextes. Il est conçu
pour accélérer le développement d'applications métier, avec un fort accent sur la
productivité. Pour un développeur Java, le passage à WLangage est rapide, et les bases de la
programmation orientée objet restent valables.
P a g e 17 | 42
P a g e 18 | 42
II : Bases du WLangage
Objectifs pédagogiques :
2. Caractéristiques de base
3. Déclaration de variables
chaîne Texte
P a g e 19 | 42
booléen Vrai ou Faux
4. Structures de contrôle
➤ Condition SI
Info("Majeur")
SINON
Info("Mineur")
FIN
➤ Boucle POUR
POUR i = 1 À 10
Info(i)
FIN
➤ Boucle TANTQUE
compteur += 1
FIN
5. Procédures et Fonctions
FIN
WinDev utilise un système de préfixes pour nommer les éléments de l'interface, facilitant leur
identification.
P a g e 20 | 42
Élément Préfixe recommandé Exemple
Ce système n’est pas obligatoire mais fortement recommandé pour maintenir une application
claire et maintenable.
7. Commentaires
/*
*/
Exemple complet :
P a g e 21 | 42
// Déclaration
// Condition
SINON
FIN
P a g e 22 | 42
III : Programmation Orientée Objet en WLangage
3.1 – Introduction à l’objet en WLangage
Objectifs pédagogiques :
• des constructeurs,
CLASSE Voiture
// Attributs
// Méthodes
PROCÉDURE AfficherInfos()
P a g e 23 | 42
Info("Année : " + annee)
FIN
FIN
Chaque classe est définie avec le mot-clé CLASSE et terminée par FIN.
maVoiture:marque = "Toyota"
maVoiture:modele = "Corolla"
maVoiture:annee = 2020
maVoiture:AfficherInfos()
4. Constructeurs en WLangage
Le constructeur d’une classe est une procédure spéciale appelée automatiquement lors de
l’instanciation :
CLASSE Voiture
// Constructeur
marque = m
modele = mo
annee = a
FIN
P a g e 24 | 42
PROCÉDURE AfficherInfos()
FIN
FIN
// Utilisation
maVoiture:AfficherInfos()
6. Encapsulation (Visibilité)
CLASSE Personne
FIN
FIN
P a g e 25 | 42
• PUBLIQUE → accessible de partout.
P a g e 26 | 42
IV : Manipulation des fichiers de données (HFSQL)
• Découvrir les concepts avancés : requêtes SQL, transactions et gestion des index.
1. Introduction à HFSQL
HFSQL est le système de gestion de base de données intégré à WinDev. Il permet de gérer des
fichiers de données de manière rapide et efficace. HFSQL offre deux principaux types de
fichiers :
• Fichiers de type SQL : Base de données relationnelle permettant d'utiliser SQL pour
effectuer des requêtes complexes.
• Intégration complète dans WinDev : Il n'y a pas besoin d'installer un serveur de base
de données externe.
• Support des transactions : HFSQL permet la gestion des transactions pour garantir
l'intégrité des données.
• Haute performance : HFSQL est conçu pour être rapide et fiable, même avec des
millions de données.
Pour créer une base de données dans WinDev, vous devez utiliser le modèle de fichier dans
l'éditeur de projet.
• Dans WinDev, vous pouvez créer un fichier de données à partir de l'outil Analyse.
• L'analyse permet de définir les tables, les types de données et les relations entre les
entités.
Les fonctions de manipulation des fichiers de données sont utilisées pour ajouter, modifier,
supprimer, ou lire des enregistrements dans une base HFSQL.
• Ajout de données : Utilisez la fonction HAjoute pour ajouter des enregistrements à une
table.
HAjoute(Client)
[Link] = "Dupont"
[Link]énom = "Pierre"
[Link] = 30
[Link] = "[Link]@[Link]"
[Link] = DateDuJour()
HEnregistre(Client)
HModifie(Client)
[Link] = 31
HEnregistre(Client)
HSupprime(Client)
3. Requêtes HFSQL
P a g e 28 | 42
3.1. Utilisation de SQL dans HFSQL
HFSQL permet également d'effectuer des requêtes SQL sur les données. Vous pouvez utiliser
des requêtes SQL classiques (comme SELECT, INSERT, UPDATE, DELETE) directement avec la
base de données HFSQL.
Exemple de requête SQL pour obtenir tous les clients ayant un âge supérieur à 25 :
req est une chaîne = "SELECT * FROM Client WHERE Age > 25"
HExecuteSQLQuery(HQClient, req)
TANTQUE HNext(HQClient)
FIN
HFSQL prend en charge les transactions pour garantir l’intégrité des données. Une transaction
permet de réaliser plusieurs opérations dans une base de données et de s’assurer qu’elles sont
toutes validées ou annulées ensemble.
HDébutTransaction()
HValideTransaction()
HAnnuleTransaction()
Les transactions sont utiles lorsqu'il est nécessaire de faire plusieurs modifications dans la base
de données et de s'assurer qu'elles sont toutes réussies avant de valider les changements.
Les index permettent d’accélérer les recherches sur certaines colonnes d’une table. Dans
WinDev, vous pouvez créer des index pour optimiser les performances des requêtes.
P a g e 29 | 42
• Création d’un index : Dans l'analyse, vous pouvez définir des index sur une ou plusieurs
colonnes.
• Utilisation de l'index : Lorsque vous effectuez des recherches sur les colonnes
indexées, les requêtes seront plus rapides.
Exemple d'utilisation d'un index pour rechercher un client par son nom :
5. Exemple complet
Voici un exemple complet de programme qui utilise HFSQL pour gérer une table Client avec
des opérations de base : ajout, recherche et affichage.
Nom Type
ClientID Entier
Nom Chaîne
Prénom Chaîne
Age Entier
DateInscription Date
Code complet
// Ajouter un client
[Link] = "Dupont"
[Link]énom = "Pierre"
[Link] = 30
[Link] = DateDuJour()
HAjoute(Client)
HEnregistre(Client)
req est une chaîne = "SELECT * FROM Client WHERE Nom = 'Dupont'"
P a g e 30 | 42
HExecuteSQLQuery(HQClient, req)
TANTQUE HNext(HQClient)
FIN
Exercices
1. Créer une table Produit avec les champs ID, Nom, Prix, et Stock. Ajoutez des données
et effectuez une recherche sur le nom d’un produit.
2. Écrire une procédure qui utilise une transaction pour ajouter plusieurs clients à la fois,
en vous assurant que toutes les données sont ajoutées ou aucune si une erreur se
produit.
3. Créer un index sur le champ Age et effectuez une recherche rapide sur les clients ayant
un âge supérieur à 40.
Objectif :
Comprendre les relations entre les fichiers dans HFSQL et la gestion de l'intégrité référentielle
pour assurer la cohérence des données dans une base relationnelle.
Dans une base de données relationnelle, les relations entre les fichiers (ou tables) sont
essentielles pour organiser et gérer les données de manière efficace. Ces relations permettent
de lier des informations provenant de différentes tables, assurant ainsi la cohérence des
données et simplifiant la gestion des bases complexes.
• Relation un-à-un (1:1) : Un enregistrement dans une table est lié à un seul
enregistrement dans une autre table.
• Relation un-à-plusieurs (1:N) : Un enregistrement dans une table est lié à plusieurs
enregistrements dans une autre table.
P a g e 31 | 42
• Relation plusieurs-à-plusieurs (N:M) : Plusieurs enregistrements d'une table sont liés
à plusieurs enregistrements d'une autre table (implique souvent une table de liaison).
Pour définir des relations entre les tables, vous devez utiliser les clés primaires et étrangères.
Une clé primaire identifie de manière unique chaque enregistrement dans une table, tandis
qu'une clé étrangère est un champ dans une table qui fait référence à la clé primaire d'une
autre table.
Prenons l'exemple d'une base de données avec deux tables : Clients et Commandes.
Dans ce cas, la relation entre les deux tables est une relation un-à-plusieurs (1:N), où un client
peut avoir plusieurs commandes, mais chaque commande est associée à un seul client.
Table Clients :
1 Dupont Pierre
2 Martin Marie
Table Commandes :
• La clé étrangère dans la table Commandes est ID_Client, qui fait référence à la clé
primaire de la table Clients.
P a g e 32 | 42
3. Assurer l'intégrité référentielle
L'intégrité référentielle garantit que les relations entre les tables sont cohérentes et que les
données restent valides. Par exemple, on ne peut pas avoir une commande associée à un client
qui n'existe pas.
Les contraintes d'intégrité référentielle peuvent être appliquées pour maintenir la cohérence
entre les enregistrements des différentes tables. Ces contraintes peuvent inclure :
• Mise à jour en cascade : Si une clé primaire d'un enregistrement parent est mise à jour,
la clé étrangère dans les enregistrements enfants est également mise à jour.
HCreate("Clients")
HCreate("Commandes")
Client.ID_Client = 1
[Link] = "Dupont"
[Link]énom = "Pierre"
HAjoute(Client)
Commande.ID_Commande = 1001
[Link] = "2025-05-10"
[Link] = 150
Commande.ID_Client = 1
HAjoute(Commande)
P a g e 33 | 42
Commande.ID_Commande = 1002
[Link] = "2025-05-11"
[Link] = 200
Commande.ID_Client = 1
HAjoute(Commande)
HSupprime(Client)
Lorsque l'intégrité référentielle est violée (par exemple, un enregistrement enfant fait
référence à un parent inexistant), une erreur peut être générée. Il est possible de gérer ces
erreurs pour offrir une meilleure expérience utilisateur.
SI HErreurDétectée() ALORS
SINON
FIN
Dans WinDev, les relations entre les fichiers peuvent être définies directement dans l'analyse.
L'outil Analyse vous permet de créer des relations entre tables en définissant des clés
primaires et des clés étrangères.
1. Dans l'éditeur d'analyse de WinDev, sélectionnez les fichiers que vous souhaitez relier.
P a g e 34 | 42
4. Utilisez les options de contrainte (suppression en cascade, mise à jour en cascade, etc.).
Voici un exemple complet où nous créons une base de données pour gérer des Clients et des
Commandes, avec une relation un-à-plusieurs et des contraintes d'intégrité référentielle.
Table Clients :
Nom Type
Nom Chaîne
Prénom Chaîne
Table Commandes :
Nom Type
Date Date
Montant Réel
// Ajout du client
Client.ID_Client = 1
[Link] = "Martin"
[Link]énom = "Marie"
HAjoute(Client)
HEnregistre(Client)
P a g e 35 | 42
Commande.ID_Commande = 1001
[Link] = "2025-06-01"
[Link] = 250.00
Commande.ID_Client = 1
HAjoute(Commande)
Commande.ID_Commande = 1002
[Link] = "2025-06-02"
[Link] = 100.00
Commande.ID_Client = 1
HAjoute(Commande)
HSupprime(Client)
Exercices :
2. Ajoutez une contrainte de mise à jour en cascade entre deux tables : Commande et
Client. Si l'ID d'un client change, l'ID du client dans la table des commandes doit aussi
être mis à jour.
P a g e 36 | 42
Objectif :
Comprendre le fonctionnement des transactions dans HFSQL, comment elles permettent
d'assurer la cohérence des données dans des contextes de traitements complexes, et
comment gérer les erreurs pour garantir l'intégrité des données.
Une transaction est une séquence d'opérations qui doivent être exécutées comme une unité
indivisible. Elle assure que les données restent cohérentes, même en cas d'erreurs, de pannes
système ou d'autres problèmes. Si une erreur survient pendant l'exécution de la transaction,
toutes les modifications effectuées au cours de la transaction sont annulées, garantissant ainsi
l'intégrité des données.
1. Atomicité : La transaction est une unité indivisible. Soit toutes les modifications sont
appliquées, soit aucune ne l’est.
3. Isolation : Les modifications d'une transaction ne doivent pas être visibles pour les
autres transactions avant qu'elles ne soient validées.
4. Durabilité : Une fois validée, une transaction est permanente, même en cas de panne
du système.
Dans HFSQL, les transactions permettent d'exécuter plusieurs opérations sur la base de
données et d'assurer la cohérence des données. Pour gérer les transactions, on utilise les
fonctions suivantes :
P a g e 37 | 42
• HAnnuleTransaction : Annule une transaction, ce qui revient à annuler toutes les
modifications effectuées depuis le début de la transaction.
Prenons un exemple où nous effectuons un transfert d'argent entre deux comptes. Si une des
étapes échoue, la transaction doit être annulée pour éviter des incohérences dans les
données.
Table Comptes :
ID_Compte Solde
1 500.00
2 300.00
Table Transactions :
// Démarre la transaction
HDébutTransaction()
SI HModifie(Compte_Expéditeur) ALORS
HEnregistre(Compte_Expéditeur)
SINON
P a g e 38 | 42
HAnnuleTransaction()
RETOUR
FIN
Transaction.ID_Transaction = 1001
Transaction.ID_Compte_Expéditeur = 1
Transaction.ID_Compte_Récepteur = 2
[Link] = 200.00
[Link] = "2025-05-10"
HAjoute(Transaction)
SI HModifie(Compte_Récepteur) ALORS
HEnregistre(Compte_Récepteur)
SINON
HAnnuleTransaction()
RETOUR
FIN
HValideTransaction()
P a g e 39 | 42
2.1.3. Explication du code :
6. Gestion des erreurs : Si une erreur est détectée à n'importe quelle étape de la
transaction, la fonction HAnnuleTransaction() est appelée pour annuler toutes les
modifications et maintenir la cohérence des données.
La gestion des erreurs est un aspect crucial pour le bon fonctionnement des applications.
WinDev offre plusieurs mécanismes pour gérer les erreurs pendant l'exécution de la
transaction :
HDébutTransaction()
P a g e 40 | 42
// Modification du compte expéditeur
SI HModifie(Compte_Expéditeur) ALORS
HAnnuleTransaction()
RETOUR
FIN
SINON
HAnnuleTransaction()
RETOUR
FIN
// Enregistrement de la transaction
Transaction.ID_Transaction = 1001
Transaction.ID_Compte_Expéditeur = 1
Transaction.ID_Compte_Récepteur = 2
[Link] = 200.00
[Link] = "2025-05-10"
HAnnuleTransaction()
RETOUR
FIN
SI HModifie(Compte_Récepteur) ALORS
HAnnuleTransaction()
RETOUR
FIN
SINON
HAnnuleTransaction()
RETOUR
FIN
HValideTransaction()
Exercices
1. Création d'une transaction bancaire : Créez une transaction où vous devez transférer
de l'argent entre deux comptes et assurer que le solde est mis à jour correctement. En
cas d'échec, toutes les modifications doivent être annulées.
2. Gestion des erreurs dans une transaction : Ajoutez des vérifications pour chaque étape
de la transaction. Si une erreur survient, annulez la transaction et affichez un message
d'erreur approprié.
3. Transaction avec plusieurs tables : Créez une transaction qui met à jour plusieurs
tables (par exemple, une table Clients et une table Commandes). Assurez-vous que la
mise à jour est atomique : si une des opérations échoue, toutes les modifications
doivent être annulées.
P a g e 42 | 42