PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEV, WEBDEV ET WINDEV MOBILE

WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadApple WatchUniversal Windows 10 AppWindows Mobile
Autres
Procédures stockées
Champ Disposition : un champ devient invisible ? Les autres champs se déplacent
Dans une fenêtre un développeur peut décider de rendre invisible par programmation un champ devenu inutile.
Cela laisse alors un "trou" dans l'interface.
Afin d'assurer une présentation agréable de la fenêtre il convient de déplacer les champs situés en dessous.
Avant la version 23, cela demandait un repositionnement des champs par programmation.
Avec la version 23 et le nouveau champ Disposition, ce repositionnement est automatique à l'exécution : les champs situés sous le champ rendu invisible remontent.
Le champ Disposition (appelé Stack panel ou Layout en anglais) est un champ "conteneur" : il contient lui-même d'autres champs.
Selon les paramètres du champ Disposition, le déplacement des champs contenus dans le champ Disposition peut être vertical ou horizontal.
Le champ Disposition est un complément utile aux ancrages, car les ancrages ne bouchent pas les trous !
Le champ Disposition gère également automatiquement le déplacement de champs vers le bas lorsqu'un champ s'agrandit (voir nouveauté ci-après).
Le champ Disposition est disponible sous WINDEV, WEBDEV et WINDEV Mobile.
Une fenêtre de saisie d'adresse générique. Cette fenêtre permet la saisie de l'Etat ou de la Province (Etats-Unis, Canada, ...).
Une fenêtre de saisie d'adresse générique. Cette fenêtre permet la saisie de l'Etat ou de la Province (Etats-Unis, Canada, ...).
La même fenêtre de saisie pour un pays Européen, sans le champ Etat/Province. L'application a rendu le champ invisible et les champs situés en dessous sont automatiquement remontés. Il n'y a pas de trou dans l'interface.
La même fenêtre de saisie pour un pays Européen, sans le champ Etat/Province. L'application a rendu le champ invisible et les champs situés en dessous sont automatiquement remontés. Il n'y a pas de trou dans l'interface.
Champ Disposition : un champ multiligne s'agrandit? Les autres champs se déplacent
Un champ peut s'agrandir en fonction des données envoyées par l'application : champ multiligne, contenu HTML, ... ou l'ajout d'options supplémentaires à un sélecteur.
Avec la version 23 et le nouveau champ Disposition, les champs situés sous le champ qui s'agrandit sont automatiquement décalés vers le bas.
Champ Disposition : horizontal ou vertical ?
Un champ Disposition peut être vertical ou horizontal.
Dans un champ Disposition vertical, les champs remontent ou descendent si nécessaire.
Dans un champ Disposition horizontal, les champs se décalent vers la gauche ou vers la droite si nécessaire.
Il peut y avoir plusieurs champs Disposition dans une même fenêtre.
En imbriquant des champs Disposition horizontaux et verticaux, il est possible de créer des comportements très sophistiqués : des repositionnements automatiques à la manière d'un jeu de taquin.
Champ Disposition : le fonctionnement
Un champ Disposition contient des "cellules" créées par le développeur.
Chaque cellule contient un ou plusieurs champs qui peuvent être visibles ou pas.
Dans un champ Disposition, le cadrage des cellules peut être défini à droite ou à gauche et en haut ou en bas.
Sous les 7 onglets, le paramétrage par défaut des cellules. Tout est modifiable par programmation
Sous les 7 onglets, le paramétrage par défaut des cellules. Tout est modifiable par programmation

Champ Disposition: marges
Le nouveau champ Disposition permet de définir les marges entre les cellules.
Il est possible de modifier les valeurs par programmation avec la propriété ..MargeInterCellule.
Champ Disposition: gestion des langues qui écrivent de droite à gauche
De nombreuses langues écrivent de droite à gauche : l'arabe, l'hébreu, l'araméen, le syriaque, le farsi (persan), ourdou, etc.
Ces langues bénéficient également des déplacements automatiques adéquats.
Editeur d'images : vos utilisateurs finaux peuvent éditer leurs images
Le champ Image se révolutionne en version 23.
On peut considérer que c'est un nouveau champ !
Le champ Image de la version 23 propose maintenant un mode "Edition" directement disponible dans vos applications.
Le champ Image en mode "Edition" permet à un utilisateur final de modifier lui-même des images directement dans vos applications :
  • annotation d'images,
  • redimensionnement,
  • fusion d'images,
  • rotation,
  • saisie de texte sur l'image,
  • impression de l'image, ...
Champ Image en mode édition : mode opératoire
En version 23, il devient possible d'autoriser l'utilisateur final à modifier une image affichée.
L'option sera accessible soit par un menu contextuel "Editer l'image" accessible par clic droit sur l'image, soit par un bouton dans la fenêtre où l'image est affichée, soit en étant directement positionné en mode édition en ouvrant la fenêtre.
La modification peut s'effectuer selon 2 modes :
  • "in-place" : les outils (ruban et volets d'édition) se placent autour de l'image, par dessus la fenêtre en cours,
  • fenêtre popup : une nouvelle (grande) fenêtre d'édition d'images s'ouvre.
Champ Image en mode édition : ruban en standard
En mode édition, un ruban présent en standard permet à l'utilisateur final de manipuler aisément les images.
Toutes les fonctionnalités du champ Editeur d'images sont proposées par le ruban.
Le ruban est personnalisable par programmation.
Champ Editeur d'images : manipulations par programmation
Une image proposée dans un champ en mode "Edition" peut être manipulée en programmation.
L'image peut être récupérée, sauvée dans une rubrique mémo, sauvée sur disque, un texte peut être rajouté sur l'image (copyright, ...).
Lecteur de PDF : visualisez les PDF directement dans vos applications
Le nouveau champ 23 "Lecteur de PDF" (également appelé Reader) permet de visualiser un document PDF directement dans votre application, sans avoir besoin de logiciel tiers.
Inutile de lancer un reader externe.
Vous êtes certain de ce que verra l'utilisateur final et tous vos utilisateurs verront la même chose ! Le support aux utilisateurs est bien plus simple.
Le lecteur PDF peut être inclus directement dans une fenêtre de votre application comme tout champ ou alors le lecteur PDF peut être ouvert dans une nouvelle fenêtre (comme un reader habituel).
Champ Lecteur de PDF : des fonctionnalités utiles
Le champ Lecteur PDF de la version 23 offre à l'utilisateur final les fonctionnalités permettant un usage efficace, par l'intermédiaire d'un ruban convivial :
  • lecture d'une page
  • parcours du document
  • zoom
  • impression
  • copie
  • recherche
  • liens
  • vignettes
  • affichage sur 2 pages, ...
Champ Lecteur de PDF : programmation
Le champ Lecteur PDF est programmable.
Il est par exemple possible de rechercher un texte dans le document PDF, de le positionner à l‘écran et de le zoomer par programmation.
Il est bien sûr possible de se positionner à une page donnée et de fixer le facteur de zoom.
Le ruban du champ Lecteur de PDF est personnalisable.
Champ Lecteur de PDF : utilisation avancée
Le champ Lecteur de PDF permet des comportements personnalisés.
Par exemple, votre application peut charger un document transmis par un Webservice ou lu dans une base de données HFSQL.
L'impression peut contenir un texte rajouté par l'application, comme "Edité pour Monsieur XXX le XX/XX/xxxx".
Champ Tableur : l'utilisateur final dispose d'un tableur dans votre application
Un rappel utile : le champ Tableur vous permet de mettre à disposition un tableur pour tous les utilisateurs finaux de vos applications (dans n'importe quelle fenêtre de vos applications).
Ce tableur est intégré dans vos applications : il n'y a rien à installer, l'utilisateur final n'a jamais à sortir de l'application.
Le champ Tableur gère les classeurs et les feuilles XLSX.
Champ Tableur : programmation: positionnez des valeurs, récupérez des valeurs
Un autre rappel utile.
L'utilisateur final dispose d'un tableur pour ses opérations courantes.
Le tableur est un champ et se manipule comme tous les autres champs ! Vous pouvez par exemple alimenter le contenu par programmation (depuis une base de données, depuis un élément contenu dans un mail, depuis des données d'une fenêtre, un webservice, ...).
Vous pouvez également être notifié et récupérer des valeurs modifiées par l'utilisateur final.
Vous pouvez même insérer des formules de calcul !
Champ Tableur : un ruban fait son apparition
En version 23, le tableur bénéficie d'une interface par ruban.
L'ancienne interface par barre d'outils est toujours disponible.
Le ruban est totalement personnalisable.
Vous pouvez programmer les traitements de votre choix, rajouter et/ou enlever des options et interagir avec votre application.
Par exemple vous pouvez rajouter une icône pour insérer automatiquement des données qui proviennent de la base de données de l'application : stock, tarif, description, ...
Champ Tableur : gestion des images
En version 23, une feuille de tableur peut inclure une ou des images.
Cela est par exemple pratique pour insérer le logo de la société lorsqu'une feuille est utilisée pour créer un devis.
Ici, le logo de la société a été intégré à la feuille du champ Tableur
Ici, le logo de la société a été intégré à la feuille du champ Tableur
Champ Tableur : somme automatique en 1 clic
En version 23, la somme automatique est proposée à l'utilisateur final : la plage la plus probable est sélectionnée automatiquement par le champ Tableur.
Fonctionnalité habituelle de tableur
Fonctionnalité habituelle de tableur
Champ Tableur : Rechercher/Remplacer
En version 23, la fonctionnalité "Rechercher/Remplacer" est disponible pour l'utilisateur final.
Champ Tableur : tri des colonnes
En version 23, les colonnes sont triables.
Le tri est effectué sur la plage sélectionnée ou sur l'intégralité de la feuille.
Champ Tableur : mise en forme automatique de données
En version 23, la sélection d'une zone rectangulaire peut recevoir une mise en forme automatique afin que les données soient présentées de manière sophistiquée : tableau, bordure, en-tête...
Créez plus vite un tableau : choisissez un modèle
Créez plus vite un tableau : choisissez un modèle
Champ Tableur : présentation intuitive des fonctions
En version 23, la saisie d'une formule est simplifiée.
Les fonctions sont classées par famille.
Les dernières fonctions utilisées sont proposées en tête de liste.
Champ Tableur : option "Retour à la ligne automatique"
En version 23, l'option de cellule "Retour à la ligne" est supportée.
Cette option peut être positionnée par l'utilisateur final via le ruban ou par programmation à l'aide de la nouvelle constante tblrRetourALaLigneAutomatique.
Champ Tableur : ouverture et sauvegarde de feuilles
En version 23, la gestion de l'ouverture et de la sauvegarde des feuilles est automatique. Dans les anciennes versions, c'était au développeur de programmer la fonctionnalité.
Champ Tableur : insertion et suppression de lignes et de colonnes
En version 23, l'insertion de lignes et de colonnes est proposée dans le ruban.
Bien entendu, les formules sont mises à jour.
La suppression est également supportée.
Champ Tableur : insertion et suppression de cellules
En version 23, il est possible d'effacer (sans déplacer), de supprimer (en décalant les autres contenus) ou d'insérer des blocs de cellules.
Bien entendu, les formules sont mises à jour.
Champ Tableur : zoom
En version 23, le zoom est proposé.
Le facteur de zoom peut être spécifié.
Le facteur de zoom peut également être automatiquement calculé pour que la sélection en cours s'affiche en plein écran.
Champ Tableur : quadrillage
Le quadrillage peut être visible ou pas, à l'écran et/ou à l'impression.
Cela permet de réaliser des présentations sophistiquées, comme des devis.
Champ Tableur : figer les colonnes
Figer les colonnes signifie que l'on veut toujours voir les en-têtes de lignes et/ou de colonnes...
Lors d'un parcours par l'utilisateur final, ces données sont toujours affichées, comme "figées"...
En version 23, figer les colonnes devient facile.
Champ Tableur : masque de cellule pour les nombres
En version 23, il devient possible de sélectionner un masque de cellule en 1 clic uniquement.
Champ Tableur : alignement horizontal et vertical du contenu des cellules
Le contenu d'une cellule peut être aligné de manière horizontale et/ou verticale.
En version 23, il devient possible d'aligner le contenu de manière verticale (haut, milieu, bas).
Champ Tableur : ouverture d'une feuille XLSX dans le champ Tableur
En version 23, il y a plusieurs manières d'ouvrir une feuille de calcul.
Bien entendu par programmation : dans ce cas, la feuille est directement affichée.
L'utilisateur final peut lui aussi ouvrir une feuille de calcul :
  • soit depuis le ruban,
  • soit par un glisser/déposer d'un fichier XLSX de l'explorateur Windows vers le champ de l'application.
Champ Tableur : texte incliné
En version 23, il est possible d'incliner un texte dans sa cellule.
Cette fonctionnalité est disponible depuis le ruban et par programmation.
Champ Tableur : nommage des cellules
En version 23, l'utilisateur final peut définir et utiliser des noms de cellules : les formules deviennent plus claires !
Saisie d'une formule utilisant des noms de cellules
Saisie d'une formule utilisant des noms de cellules
Champ Tableur : impression
Lorsque l'utilisateur final imprime une feuille de calcul, il peut maintenant définir les marges et l'orientation, via le ruban.
Le recouvrement est géré.
Champ Tableur : autres nouveautés
Le champ Tableur de la version 23 bénéficie également d'autres nouveautés utiles :
  • effacement de contenu avec conservation de la mise en forme (ou pas),
  • effacement de la mise en forme uniquement,
  • 2 nouvelles fonctions WLangage permettent de repositionner la feuille de calcul à un emplacement sauvegardé; par exemple, l'emplacement lors de la fermeture ou sur le total du devis,
  • ...
Champ Traitement de texte : il arrive à maturité
En version 23, le champ Traitement de texte arrive à maturité.
Les fonctionnalités et modes opératoires proposés par ce champ répondent aux besoins principaux des utilisateurs finaux.
L'utilisateur final dispose d'un traitement de texte dans votre application sans en sortir
Un rappel utile : grâce au champ Traitement de texte, vos utilisateurs finaux disposent d'un traitement de texte pour leurs opérations courantes directement depuis l'application.
Champ Traitement de texte : programmation
Un autre rappel utile : le Traitement de texte est un champ et se programme comme tous les champs.
Vous pouvez alimenter son contenu par programmation (données provenant d'une base de données, d'un Webservice, d'un contenu d'une fenêtre, ...) et récupérer des données saisies par l'utilisateur final.
Il est également possible de manipuler "l'objet" Traitement de texte par programmation.
Le champ Traitement de texte manipule des documents DOCX.
Champ Traitement de texte : signets
En version 23, les signets sont supportés par le champ Traitement de texte.
Rappelons qu'un signet est une marque invisible présente dans un document, qui permet de se positionner à un endroit précis.
Par exemple, un signet permet d'insérer à une position déterminée un texte juridique spécifique en fonction du contenu d'une proposition commerciale.
Les signets sont manipulables par programmation.
Les liens de type signet sont également gérés.
Champ Traitement de texte : import RTF
Les documents RTF peuvent être ouverts par le champ Traitement de texte.
Le document RTF importé est transformé en document DOCX.
Cette fonctionnalité permet de récupérer facilement l'existant.
Champ Traitement de texte : zone de texte flottante
En version 23, les zones de texte flottantes font leur apparition dans le champ Traitement de texte.
L'utilisateur final peut créer des zones rectangulaires dans lesquelles il pourra saisir du texte, insérer des images, des tableaux, ... : elles ont leur propre mise en forme.
Les zones de texte peuvent être positionnées à tout endroit du document.
Les zones de texte peuvent être déplacées et redimensionnées.
L'habillage autour de ces zones de texte est paramétrable.
Bien évidemment, les zones de texte présentes dans des documents .DOCX existants sont affichées et gérées.
Ici, l'adresse de livraison et l'adresse de facturation ont été saisies dans des zones de texte flottantes
Ici, l'adresse de livraison et l'adresse de facturation ont été saisies dans des zones de texte flottantes
Champ Traitement de texte : support des formes
En version 23, le champ Traitement de texte peut créer et afficher des formes prédéfinies : carré, rectangle, ellipse, étoile, cylindre...
L'épaisseur du trait et les couleurs sont paramétrables.
Champ Traitement de texte : mode d'édition "texte HTML"
Quel utilisateur final n'a pas d'email à saisir ?
Le champ Traitement de texte de la version 23 propose un nouveau mode pour saisir ses emails (ou un texte formaté) directement dans un champ de vos applications.
Les possibilités de saisie sont sophistiquées et répondent aux standards HTML.
Il n'y a rien à installer : pas d'ActiveX, pas de librairie tierce, ...
Cette newsletter (infolettre) au format HTML a été saisie sous le champ Traitement de texte
Cette newsletter (infolettre) au format HTML a été saisie sous le champ Traitement de texte
HTML : fonctions WLangage de manipulation
Le texte en cours de saisie par un utilisateur final peut être manipulé par programmation. On peut :
  • insérer du texte,
  • remplacer du texte,
  • rechercher dans une base de données,
  • sauver le texte automatiquement dans la fiche du client,
  • ...
Le code HTML généré peut être récupéré.
HTML : saisie de texte pour les applications mobiles

La saisie de texte HTML de la version 23 permet par exemple de saisir des textes formatés destinés à être affichés sur mobiles (smartphones, tablettes), tels que des articles de journal, une base de connaissances...
Les documents seront ensuite interprétés sur le mobile.
Les documents peuvent être stockés directement dans une base de données HFSQL. Un enregistrement du fichier de données HFSQL peut contenir 1 ou plusieurs documents HTML (et/ou DOCX).
Cela facilite l'indexation des articles.
Voir nouveauté 687.
L'utilisateur final peut créer, modifier et sauver des documents sans quitter votre application
Grâce aux champs Tableur et Traitement de texte, vous intégrez directement dans vos applications les outils bureautiques nécessaires aux utilisations habituelles de vos clients.
L'utilisation se fait directement à l'intérieur des fenêtres de l'application ou dans une fenêtre différente ouverte par l'application.
Lecteur PDF intégré
De la même façon, l'intégration d'un lecteur PDF directement dans vos applications simplifie la vie de l'utilisateur, vous permet d'attendre un comportement similaire sur tous les postes et fonctionne sans module additionnel : tous vos clients utilisent le même lecteur, dans la même version !
L'utilisateur final visualise automatiquement les enregistrements reliés
Dans une table fichier, une nouvelle option est disponible en version 23.
Il devient possible de dérouler une ligne pour voir les enregistrements d'autres fichiers de données reliés à la ligne sélectionnée.

Colonne RTF de table : évolutions
En version 23, l'option "Retour à la ligne" est disponible dans les colonnes de type RTF.
Table fichier: rafraîchissement automatique
En version 23, il est possible d'indiquer qu'une table fichier (remplie automatiquement par binding) se rafraîchit (se met à jour) dès que le fichier de données est modifié (ajout, suppression, modification).
Il n'y a rien à programmer.
Dans le monde entier, toute table affichant la donnée sera mise à jour instantanément ! (HFSQL Client/Serveur).
Voir nouveauté 201.
Marges
En version 23, il devient possible de spécifier les marges de la table :
  • marge haute,
  • marge basse,
  • marge gauche,
  • marge droite.
Cela permet de réaliser des tables plus esthétiques.

2 exemples de marges mises en place dans des cellules de table
2 exemples de marges mises en place dans des cellules de table
Nouvel événement : lors d'une recherche de type "contient"
En version 23, un nouvel événement de programmation permet de programmer des traitements lorsque l'utilisateur final effectue une recherche de type "contient" (icône entonnoir).
Par exemple, il est également possible d'afficher des détails supplémentaires sur l'élément recherché.
Champ Table : évolutions diverses
  • Positionner une ligne de table dans la partie visible (affichée) de la table. La nouvelle constante taVisible pour la fonction TablePosition rend une ligne de table visible de manière intelligente :
    • si la ligne est déjà visible, rien ne bouge;
    • si la ligne n’est pas visible, la table scrolle automatiquement pour rendre la ligne visible.
  • Une table sans sélection dispose de loupe sur les entêtes.
  • Les tables avec sur-entêtes disposent de loupes sur les entêtes
  • Sur les tables en mode "affichage", les interrupteurs non cochés peuvent ne plus être visualisés (évite à l’utilisateur final de croire qu’il peut cliquer sur l’interrupteur pour le cocher).
Un petit rappel...
Il est utile de rappeler que les champs Planning, Agenda, Calendrier, Gantt font gagner un temps incroyable dans vos développements.
Si un de vos développeurs devait programmer seul un planning, il y passerait certainement plusieurs mois !
Ces champs sont donc d'une importance primordiale pour la réussite de vos projets ! (si, si)
Présentation par défaut plus riche
La création par défaut d'un champ planning est révolutionnée.
D'une part le look est actualisé en fonction des tendances actuelles, et d'autre part, des champs supplémentaires sont générés automatiquement pour le rendre plus ergonomique.
Ces champs sont totalement paramétrables.
Des cadres élégants
Dans un planning, il peut y avoir de nombreux cadres, par exemple autour de chaque rendez-vous.
Pour l'aspect visuel, il est important que ces cadres soient harmonieux.
En version 23, ces cadres sont entièrement personnalisables :
  • épaisseur (par côté, par exemple uniquement le côté gauche),
  • style (trait plein, tiret, ...),
  • arrondi,
  • couleur par côté.
Cadrage horizontal des abscisses du planning
En version 23, les options de cadrage sont plus nombreuses.
Il devient par exemple possible de cadrer horizontalement les jours, les mois et les heures.
Masque supplémentaire pour les jours
En version 23, un nouveau masque très utile fait son apparition : le nom du mois et le nom du jour en majuscules.
Positionnement des heures
En version 23, le positionnement des heures s'enrichit de nouvelles possibilités : au niveau du trait de séparation, ...
Styles différents pour semaine, jour, numéro, ...
Avant la version 23, semaine, jour et numéro partageaient un style identique.
En version 23, chaque élément retrouve sa liberté et peut être affecté d'un style différent.
Séparateur de rendez-vous sur plusieurs jours
Lorsque les rendez-vous s'étalent sur plusieurs jours, le séparateur entre les jours devient paramétrable (et optionnel).
Expérience utilisateur de sélection de plage plus fluide
Pour créer un rendez-vous, l'utilisateur final sélectionne la plage du rendez-vous.
En version 23, cette sélection est plus fluide et plus contemporaine.
Le confort d'utilisation de votre application est ainsi amélioré.
La sélection à la souris est fluide
La sélection à la souris est fluide
Calendrier: nouveau look
Le look du calendrier par défaut change en version 23.
Il est adapté aux goûts actuels.
Le look par défaut d'un calendrier est plus actuel
Le look par défaut d'un calendrier est plus actuel

FAA Combo : recherche
En version 23, l'utilisateur final peut effectuer une recherche dans une combo déroulée.
Utile dans les grandes combos !
FAA champ Zone répétée : recherche
En version 23, l'utilisateur final peut effectuer une recherche dans une zone répétée.
Champs : divers
  • Il devient possible de paramétrer la durée d'affichage du toast de restauration des filtres de table.
  • Il est possible de demander un changement de gabarit de fenêtre à l'exécution. En version 23, il est possible de demander à une fenêtre de ne pas utiliser ce nouveau gabarit. Cela est utile quand on veut s'assurer que l'affichage de la fenêtre respectera exactement ce qui a été défini sous l'éditeur.
Gantt : formatage de l'échelle du temps
Le champ Gantt est un champ très évolué qui représente une planification de tâches inter-dépendantes.
Selon le type et la complexité des process, l'échelle de temps peut être différente.
Le champ Gantt propose un affichage avec la granularité "mois" ou "semaine" ou "jour" ou "heure".
En version 23, de nombreux paramétrages supplémentaires sont proposés pour l'échelle de temps : cadrage horizontal, masques, positionnement, ...
L'échelle du temps est paramétrable
L'échelle du temps est paramétrable
Nouveau type de graphe : nuage de points 3D (3d scatter plot)
Un graphe de type "Nuage de points 3D" permet de visualiser un ensemble de points dans un espace à 3 dimensions.
Ce nouveau type de graphe permet par exemple de représenter une population selon sa taille, son poids et son âge...
Nouveau type de graphe: nuage de points 3D fonctionnalités
Le graphe Nuage de points 3D permet de :
  • relier les points ou non,
  • définir le type de point : cube, sphère, pyramide, ...
  • choisir les couleurs,
  • projeter ou pas les points sur les plans, au survol, au clic ou en permanence,
  • ...
L'utilisateur final peut faire tourner le graphe sous tous les axes à la souris.
Nouveau type de graphe : nuage de points 3D programmation
La nouvelle famille de fonctions grNuage3DXXX du WLangage fait son apparition pour alimenter et paramétrer les graphes Nuage 3D.
Tous les graphes : nouveau menu contextuel
En version 23, le menu contextuel des graphes s'offre un lifting !
Lifting esthétique d'abord, avec une présentation plus actuelle.
Lifting ergonomique ensuite, avec une présentation graphique et intuitive.
Vos utilisateurs finaux vont adorer personnaliser leurs graphes !
Un menu contextuel clair
Un menu contextuel clair
Minute papillon ! Abscisse "date-heure" intelligente
Le support automatique des abscisses en date-heure (= une date + une heure) fait son apparition en version 23.
Il n'y a plus rien à programmer !
Un zoom de l'utilisateur final lui permet d'avoir plus de détails.
Il est possible de personnaliser les masques d'affichages des minutes, heures, jours et mois.
Ce type d'abscisse automatique fonctionne sur les graphes de type courbe et histogramme.
L'affichage et la présentation de l'année, des mois et des jours est automatique
L'affichage et la présentation de l'année, des mois et des jours est automatique
Echantillonnage (sub sampling)
Lorsqu'un graphe contient trop de données à afficher, il peut devenir illisible.
Le mode "échantillonnage", activé par défaut, permet de réduire le nombre de données affichées pour rendre le graphe lisible.
Bien entendu, l'algorithme sélectionne les données à afficher pour conserver les caractéristiques des données : moyennes, pics, ...
En haut : un graphe sans échantillonnage. En bas : le même graphe avec échantillonnage
En haut : un graphe sans échantillonnage. En bas : le même graphe avec échantillonnage

Graphe : taille et couleur d'un point particulier d'une courbe…
Cette nouveauté permet de positionner un ou des points de forme déterminée à un emplacement à mettre en avant.
Par exemple : un horaire de passage de publicité, la date-heure d'envoi d'un emailing, ...
Chaque forme représente un événement. Le clic sur le carré peut ouvrir une fenêtre de détail ou un traitement
Chaque forme représente un événement. Le clic sur le carré peut ouvrir une fenêtre de détail ou un traitement
Graphe : afficher un contenu spécifique pour un point donné
Dans un graphe, il peut être nécessaire d'afficher des explications ou des légendes sur des points particuliers.
Par exemple, s'il survient un événement boursier, pour afficher le détail de l'action qui a généré la donnée : signature d'un gros contrat, réorganisation, ...
La version 23 permet d'afficher un contenu personnalisé dans la bulle d'un point, d'une barre d'histogramme ou d'une part d'un camembert.
Ce point précis de la courbe correspond à l'action décrite
Ce point précis de la courbe correspond à l'action décrite
Graphe : couleur d'une barre particulière d'un histogramme…
En version 23, il devient possible de changer la couleur d'une ou plusieurs barres.
Le but est de mettre une donnée en évidence.
Une barre (ou plusieurs) de l'histogramme peut être identifiée
Une barre (ou plusieurs) de l'histogramme peut être identifiée
Graphe : nuage 2D : points reliés par série
En version 23, il devient possible de relier (ou pas) les points d'un graphe nuage 2D, pour une série particulière.
GDS Drive : évolutions
En version 23, GDS Drive, votre GDS dans le cloud à partir de 2 euros HT par mois, propose toujours plus de fonctionnalités.
Par exemple, la base des Centres de Contrôle peut être hébergée par GDS Drive.
Les fonctionnalités sont en permanente évolution, merci de consulter le site www.gdsdrive.fr pour découvrir les fonctionnalités proposées.
PCSCloud : évolutions
Les offres proposées par PCSCloud, le cloud privé pour vos développements, vos applications, vos Webservices et vos données, évoluent également en permanence, pour répondre au mieux à vos besoins. Merci de consulter le site www.pcscloud.net
Je thème
En version 23, un nouveau thème d'environnement différent est proposé : un thème gris.
Cela porte à 3 les possibilités de choix pour la couleur de l'environnement : clair, gris, sombre.
Chaque membre de vos équipes pourra choisir le thème qui lui convient le mieux !
Note : il est possible de choisir le thème "clair" ou "gris" et de passer uniquement l'éditeur de code en thème "foncé".
Nommage des plans
En version 23, il devient possible de nommer les plans.
Il est plus convivial d'utiliser un nom en programmation plutôt qu'un indice.
Corollaire : l'insertion d'un plan au milieu d'un ensemble de plans existants n'oblige plus à rechercher toutes les lignes de code utilisant un indice supérieur pour les modifier !
Mode d'édition des plans
En version 23, la gestion des plans devient plus conviviale.
Une vision d'ensemble des plans est proposée.
Visualisation de tous les plans d'une fenêtre sous l'éditeur
Visualisation de tous les plans d'une fenêtre sous l'éditeur
Depuis cette fenêtre, il est possible de réorganiser les plans par "glisser/déplacer" ou d'en insérer de nouveaux.
Cette fenêtre permet de visualiser tous les plans existants d'un seul coup d'oeil. Inutile de les faire défiler un par un !
Création des champs : visualisation de la taille
En version 23, lors de la dépose d'un champ dans la fenêtre, la taille visualisée correspond à la taille réelle du champ.
Et selon l'emplacement où le champ est déposé, sa taille par défaut s'adapte à la place disponible.
Cette action s'applique aux "gros champs" : table, image, onglet, planning, zone répétée, ...
7 onglets : choix des images en 1 seul bouton
Dans les fenêtres "7 onglets", la sélection des images s'effectue maintenant depuis un seul bouton : les manipulations sont simplifiées.
Il devient possible d'éditer l'image dans l'éditeur d'images en 1 clic.
Le saviez-vous ? La sélection d'images est utilisée dans plus de 300 fenêtres dans les éditeurs !
Diff de composants internes
En version 23, il devient possible de comparer 2 versions d'un composant interne :
  • éléments en plus ou en moins,
  • différences de champs,
  • différences de fenêtres,
  • différences dans un code,
  • ...
Exemples fournis : travaillez sur une copie
A l'ouverture d'un exemple, l'éditeur propose de le copier dans les projets locaux.
Ainsi, toute modification apportée à l'exemple ne modifiera pas l'exemple initial.
Une petite nouveauté bien pratique !
Couleurs par défaut harmonieuses dans les gabarits
En version 23, un gabarit inclut maintenant les séries de couleurs qui seront appliquées par défaut à la création des champs de type :
  • planning,
  • agenda,
  • Gantt,
  • graphe,
  • ...
Les fenêtres créées sont plus jolies par défaut.
Les séries de couleurs associées à un gabarit sont accessibles sous l'éditeur et par programmation.
Ces couleurs sont également proposées pour tous les champs, dans la fenêtre de sélection de couleurs.
Création multiple de tâches
En version 23, lors de la création d'une exigence, une nouvelle interface permet de créer plus rapidement les tâches et surtout les dépendances entre ces tâches.
La saisie est plus structurée.

Widget Liste des tâches
En version 23, un nouveau Widget fait son apparition dans le Tableau de Bord du Centre de Contrôle de Suivi de Projets.
Il devient plus facile de changer la tâche en cours, de changer l'ordre des tâches, de voir les nouvelles tâches, leur avancement...
Le nouveau Widget
Le nouveau Widget "Liste des Tâches"
Fusion de fiches
L'auteur d'une fiche reçoit des notifications en fonction de la vie de la fiche : fiche corrigée, fiche archivée, fiche ré-attribuée...
Lorsque 2 fiches sont fusionnées, les 2 auteurs initiaux reçoivent les notifications.
Renommage d'exigence propagé
En version 23, lors du renommage d'une exigence, l'ensemble des tâches concernées est renommé si vous le souhaitez.
Enchainer des formats différents
En version 23, il devient possible d'enchaîner des états de formats différents.
Chaque état sera imprimé dans son format initial, par exemple un état en format A4, un autre en format A3, ...
Les marges sont gérées.
Ellipse sur champ Libellé
Dans un état, un libellé passé par programmation ou par binding peut être de longueur supérieure au champ d'accueil.
En version 23, quand le contenu d'un champ Libellé ne peut pas être affiché en totalité, trois points (...) sont affichés en fin de champ pour signifier qu'une suite n'a pas pu être imprimée.
Aperçu avant impression
En version 23, l'ouverture d'un état en prévisualisation peut s'effectuer sans la présence des vignettes à gauche de la page. Dans les versions précédentes, les vignettes étaient forcément présentes.
iImprimeEtat envoie l'état directement par email
La fonction WLangage iImprimeEtat permet d'envoyer un état par mail. Il suffit de spécifier la constante emailPDF comme destination à la fonction iDestination.
Dans ce cas, le mailer par défaut du poste est ouvert, avec en pièce jointe l'état sous forme PDF.
Il n'est plus nécessaire de passer par l'aperçu pour envoyer un état par email.
Etat : FAA : prendre un "instantané". Copie d'écran intelligente
En version 23, dans l'aperçu avant impression, l'utilisateur final peut effectuer une copie d'écran intelligente, un "instantané" : le contenu affiché de l'état est alors capturé, sans tout ce qu'il y a autour : marges, vignettes, ruban, ...
Cette fonctionnalité peut être débranchée par programmation.
Baguette magique de sélection
En version 23, une baguette magique de sélection de zone fait son apparition.
La sélection de zone est bien plus facile.
Le facteur de tolérance est réglable.
Redimensionnement à la souris (CTRL + T)
En version 23, une sélection peut être redimensionnée à la souris.
Le redimensionnement peut être homothétique, libre, ...
L'image
L'image "NEW" est sélectionnée
Ici, la zone a été agrandie de manière homothétique
Ici, la zone a été agrandie de manière homothétique

Des images toujours nettes sur les mobiles
Les téléphones et tablettes possèdent chacun des définitions d'écran spécifiques.
Pour une même taille physique d'écran, la définition peut être faible ou très haute.
Afin que les images (et icônes) affichées soient de la meilleure qualité possible, il est préférable de livrer les images en plusieurs définitions et WINDEV Mobile choisira à l'exécution la définition de l'image la plus appropriée.
En version 23, l'éditeur d'images propose de générer les images dans les résolutions adéquates.
Les images générées peuvent être modifiées.
Les images seront toujours nettes sur tous les matériels !
L'éditeur d'images imprime
En version 23, l'éditeur d'images peut imprimer les images éditées.
Rubriques zombies (rubriques obsolètes)
Lors de la vie d'une application, les rubriques vivent et meurent.
Mais avant de mourir, elles peuvent se transformer en zombies.
Cela signifie que la rubrique existe encore dans la description des données, peut être utilisée dans le code existant de l'application, mais que la rubrique ne doit plus être utilisée dans l'écriture de tout nouveau code.
Une rubrique zombie mange de la place et devrait donc être supprimée.
On trouve souvent des rubriques zombies dans le code mort.
En version 23, il est possible d'indiquer les rubriques zombies dans l'analyse; elles seront alors signalées à l'utilisation.
Création automatique de champs
Une requête créée sous l'éditeur de requêtes apparaît dans l'explorateur de projets, avec ses rubriques de sortie.
Le glisser/déposer d'une rubrique dans une fenêtre crée automatiquement le champ correspondant à cette rubrique.
Le type du champ est automatiquement choisi en fonction du type de la rubrique.
Ce champ reste relié à la requête par binding.
GDS Drive : déconnexion à distance d'un poste
Si vous avez oublié de déconnecter votre poste avant de partir du bureau et que vous souhaitez vous connecter depuis un autre poste à l'extérieur du bureau (à la maison, chez un client, ...), depuis la fenêtre de connexion au GDS vous pouvez déconnecter le poste.
GDS : ouvrir une branche de projet
A l'ouverture d'un éditeur, la liste des projets récents apparaît.
En version 23, les projets qui sont contenus dans des branches sont identifiés par la couleur de la branche et le nom de la branche.
Une présentation plus claire
Une présentation plus claire

GDS : recherches dans l'historique
En version 23, la consultation de l'historique du GDS permet d'effectuer des recherches dans l'historique.
Il devient par exemple possible de :
  • visualiser les modifications effectuées par un développeur entre 2 dates,
  • rechercher un commentaire particulier,
  • rechercher un label,
  • voir les extractions/réintégrations liées à une tâche ou un incident,
  • ...
Les consultations de l'historique sont ainsi bien plus rapides.
Ces recherches sont également intéressantes dans le cadre d'audits menés sur le développement.
Notez qu'une nouvelle action est disponible dans l'Intégration Continue pour automatiser l'extraction et la génération d'un fichier contenant des résultats.
La recherche dans l'historique est maintenant très facile et très riche
La recherche dans l'historique est maintenant très facile et très riche

GDS : export de l'historique
Toute recherche effectuée dans l'historique du GDS peut être exportée pour un usage ultérieur ou pour être transmis à un tiers.
Plusieurs formats d'export sont proposés : XLS, .fic, Texte, ...
GDS : c'est vous qui décidez : résolution manuelle des conflits
Le développeur choisit la version qu'il conserve
Le développeur choisit la version qu'il conserve
Lors d'extractions multiples ou de fusions de branches, s'il n'y a pas de conflits, le "merge" est automatique.
Si un conflit est détecté, une interface de résolution du conflit apparaît.
Cette interface permet de voir ce qui a été automatiquement effectué et propose les solutions possibles pour chaque conflit.
Le code est bien entendu analysé, mais également les champs, les propriétés de champs, les états, l'analyse, ...
GDS : création de branches à partir de sources locales
En version 23, il devient possible de créer des branches à partir de sources locales. Par exemple, à partir de la copie d'un répertoire du projet.
GDS : modification a posteriori des commentaires et labels d'une version
Les commentaires et labels d'une version peuvent être modifiés à tout moment, depuis l'historique des versions.
GDS : migration et création de branches sans blocage
En version 23, il est possible de créer plusieurs branches simultanément.
De même, la migration d'un projet n'est plus bloquante.
Diff de plans d'actions
En version 23, il est possible d'effectuer un diff entre 2 plans d'action.
Cela permet par exemple de vérifier les modifications effectuées.
Ligne de commande du go : possibilité de la définir
En version 23, une nouvelle action permet de définir la ligne de commande personnelle ou commune utilisée lors des GO de projet.
Réintégration de plusieurs langues en une seule opération
En version 23, WDMSG permet de réintégrer l'ensemble des langues du projet (ou un sous-ensemble) en une seule opération.
SQL directement dans le WLangage
Du code SQL directement dans un bouton !
Du code SQL directement dans un bouton !
Voici une nouveauté qui va ravir les adeptes du SQL (voir également nouveautés 151 à 154)
En version 23, il est possible de taper directement du code SQL.
En version 23, le code SQL est reconnu par l'éditeur de code WLangage.
Vous bénéficiez de la richesse de l'éditeur de code :
  • coloration syntaxique,
  • complétion à la saisie,
  • assistance temps réel,
  • détection des erreurs de syntaxe,
  • ...
Un nouveau type WLangage fait son apparition : RequêteSQL.
La saisie de code SQL sous l'éditeur profite de toutes les aides à la saisie. Ici les rubriques du fichier de données
La saisie de code SQL sous l'éditeur profite de toutes les aides à la saisie. Ici les rubriques du fichier de données
Code SQL : binding
En version 23, le binding est disponible sur les requêtes SQL créées dans le code WLangage.
Cela permet de définir des liaisons automatiques, et de réduire encore la taille du code.
88 fonctions deviennent plus lisibles. Timer(10s) est quand même plus clair que Timer(1000) !
Evolution très pratique en version 23, il devient possible de spécifier l'unité de temps dans les fonctions WLangage qui prennent un temps en paramètre.
Avant la version 23, chaque fonction attendait une durée selon une syntaxe qui lui était propre : en millisecondes, en centièmes de seconde, ...
Les erreurs étaient faciles, et la lecture du code pas forcément aisée.
  • Le code :
    Timer("actualiseStats", 5 min)
    est plus clair que
    Timer("actualiseStats", 30000)
  • De même, le code :
    HTTPTimeOut(1s)
    est plus clair que
    HTTPTimeOut(1000)
Par compatibilité, bien entendu, les anciennes syntaxes sont toujours reconnues.
Les unités de temps reconnues sont :
  • jour (j)
  • heure (h)
  • minute (min)
  • seconde (s)
  • milliseconde (ms)
Les fonctions devenant plus lisibles sont :
AnimationJoueAnimationJoueSurPropriétéChampBTChangeVisibilitéBTLEConnecte
BTLEListePériphériqueBTListePériphériqueBulleDélai1000022450
CapteurDétecteDébutSecoussesCapteurDétecteFinSecoussesceConnecteChampActif
ChampGriséChampInvisibleChampVisibleChronoFin
ChronoPauseChronoValeurDDEEnvoieDDEExécute
DDEFinLienDDELienDDELienTièdeDDERécupère
DéfileDélaiAvantFermetureDépileDNSAjouteAdresse
DuréeVersChaîneEmailChangeTimeOutEmailLitTimeOutErreurAvecDélai
FenAnimationFermetureFenAnimationOuvertureFenAnimationSuivantefMemAttend
FTPConnecteGglAnalyticsAjouteDuréeGPSDétectePositionGPSRécupèrePosition
GPSSuitDéplacementHDéconnecteClientHEnvoieMessageVersClientHListeServeur
HTTPTimeOutInfoAvecDélaiJaugeActiveLEDAllume
MultimédiaContrôleVisibleMultimédiaDuréeMultimédiaPositionMultitâche
MutexDébutNetMACVersIPPingPlanActionParamètre
PopupAnimeSémaphoreDébutServiceAttendEtatServiceTemporise
SignalAttendSNMPOuvreSessionSocketAttendConnexionSocketConnecte
SocketConnecteBluetoothSocketConnecteSSLSocketLitSon
sOuvreSSHLitTâcheParallèleAttendtelDuréeAppel
TâcheParallèleAttendToutestelComposetelComposeLignetelEnregistre
ThreadArrêteThreadAttendThreadAttendSignalThreadPause
TimerTimerSysUPNPCherchePériphériqueUPNPListePériphérique
VerrouAppliDélaiVibrationDéclencheVidéoCaptureWiFiDétectePointAccès
Propriétés "nouvelles durées"
  • httpRequête.DuréeNonRéponse
  • httpRequête.TimeOutConnexion
  • mqttSession.TimeOutConnexion
  • Rappel.Délai
  • sshSession.TimeOutConnexion
  • wsRequête.DuréeNonRéponse
  • MongoOptionEcriture.Timeout
  • rssCanal.DuréeValidité
Variables "nouvelles durées"
  • HCS.DélaiRéponse
  • TâchePlanifiée.DuréeMaximum
d est une durée = 1h23min - oui à la lisibilité maximale
En complément de la nouveauté précédente, il devient également possible de spécifier des durées très précises de manière lisible.
1H23 est bien plus lisible que 4980000ms !!
SI n<23 000 000 000... C'est quand même plus lisible avec des espaces
En version 23, le WLangage accepte les espaces dans les nombres.
Le code devient plus lisible, les erreurs diminuent.
Le tiret bas est également accepté comme séparateur.
1 000 000 ou 1_000_000 sont plus lisibles que 1000000 !
Les nombres saisis en hexadécimal supportent également cette fonctionnalité.
Exemple : 0x AB BC 12 A9 ou 0x ABBC 12A9 sont plus lisibles que 0xABBC12A9
Nouvelle syntaxe champ.fonction (optionnelle)
La version 23 permet d'utiliser une nouvelle syntaxe préfixée par le nom du champ.
Par exemple, à la place de :
ListeAjoute(Clients, NouveauClient)
il devient possible d'écrire :
Clients.Ajoute(NouveauClient)
Dans cette syntaxe, le premier élément est celui sur lequel s'applique la fonction.
Sous l'éditeur de code, lorsque l'on tape "Clients.", toutes les fonctions possibles pour le champ Clients sont proposées.
Autres exemples :
// Ajoute la pièce jointe
LISTE_PiècesJointes.Ajoute("C:\Documents\CompteRenduRéunion.xlsx")
// Cherche dans la liste
nIndice = LISTE_PiècesJointes.Cherche("CompteRenduRéunion.xlsx")
AVEC évolue
Le mot-clé AVEC est maintenant disponible pour les nombreuses fonctions qui nécessitent une terminaison :
  • HFiltre
  • HTransaction
  • Sections critiques
  • ...
ConstruitTableFichier : nouvelle option
Lors de la création d'une table fichier par programmation, il devient possible d'indiquer que la table peut visualiser les enregistrements liés depuis les fichiers de données reliés.
Hashage SHA-3
La norme de hashage SHA-3 est maintenant supportée en version 23.
Cette norme apporte une sécurité accrue.
Crypto AES256
La norme de cryptage AES256 est maintenant supportée en version 23. Les modes ECB, CBC, CFB, CTR sont supportés.
Cette norme apporte une sécurité accrue.
Fonction Hasard spécifique cryptographie
La fonction Hasard existe depuis longtemps en WLangage.
Les traitements de cryptographie nécessitent des nombres aléatoires dont la séquence est hautement non reproductible.
En version 23, la fonction HasardCryptoXXX fait son apparition : elle permet de créer des traitements de cryptographie plus sécurisés.
Nous vivons une drôle d'EPOCH
La norme EPOCH (également appelée POSIX) est une norme de mesure de temps, surtout utilisée dans les systèmes UNIX.
La version 23 propose les fonctions DateHeureVersEpoch et EpochVersDateHeure qui permettent de convertir une date en EPOCH et vice-versa.
Enumérations et combinaisons : parcourez-les !
En version 23, il devient possible de parcourir les énumérations et les combinaisons avec l'instruction POUR TOUT.
Cela permet par exemple de récupérer la liste pour remplir une interface.
Comment faisait-on avant ?
Capitaine crochet sur chaîne
En version 23, le WLangage accepte les simples crochets pour les variables de type chaîne.
Inutile de doubler le crochet.
PAS DANS
Le nouvel opérateur WLangage PAS DANS permet de vérifier qu'une valeur n'est pas présente dans une liste donnée.
La lisibilité est assurée.
PDFFusionne : vous ne rêvez pas, il est 10 fois plus rapide
En version 23, la fonction WLangage PDFFusionne va affoler les radars !
La vitesse de traitement est améliorée par un facteur 10 dans la plupart des cas.
PDFFusionne : vous ne rêvez toujours pas : la taille est pulvérisée
En version 23, la fonction WLangage PDFFusionne crée des fichiers PDF de taille extrêmement réduite.
Ne vous étonnez pas du résultat obtenu !
Procédure zombie : elle existe, on ne doit pas la supprimer mais il ne faut plus l'utiliser !
Lorsqu'un code a beaucoup vécu, il contient souvent des procédures qui sont utilisées, mais qui ne répondent plus aux normes de qualité actuelles.
Il arrive souvent qu'il faille développer une nouvelle version de la procédure, qui utilise des paramètres différents.
Et bien sûr on ne veut (ou ne peut) pas modifier tous les appels existants immédiatement.
Pour permettre la transition ("on ne touche pas un ancien code qui marche"), l'ancienne procédure n'est pas supprimée.
En version 23, il devient possible d'indiquer que cette procédure est obsolète : c'est une procédure zombie.
Pour dissuader d'utiliser l'ancienne version de la procédure, à chaque fois que l'ancienne procédure est utilisée, un warning de compilation est généré.
Cette fonctionnalité est disponible également pour les collections de procédures et les composants.
Couleur dominante d'une image ou d'une photo
La version 23 propose la nouvelle fonction dCouleurDominanteImage qui détermine la couleur dominante d'une image affichée ou en mémoire.
Cela permet par exemple d'affiner des interfaces ou de déterminer la couleur d'écriture d'un texte sur une photo !
Email : images intégrées dans un fichier HTML
La fonction WLangage EmailImporteHTML gère les images incorporées par encodage dans un fichier HTML.
Fonction RTFVersHTML
La fonction WLangage RTFVersHTML gère les images et les tableaux.
Les images sont encodées dans le HTML.
Imprimer des PDF en WLangage
La fonction iImprimePDF est disponible sous WINDEV, WINDEV Mobile et WEBDEV.
L'impression d'un document PDF s'effectue donc en une ligne.
L'aperçu avant impression peut être affiché.
Enchaîner états programmés et PDF
La fonction WLangage iEnchaînementAjoute permet maintenant l'enchaînement facile d'états programmés et de documents PDF.
Procédure interne : saisie assistée
En version 23, l'assistance à la saisie des paramètres est activée sur les procédures internes.
Procédure interne : paramètres nommés
En version 23, il devient possible de nommer les paramètres lors de l'appel de la procédure interne.
Procédure interne : paramètres multiples
En version 23, les paramètres multiples sont autorisés dans les procédures internes.
Appel de procédure interne soeur
En version 23, il devient possible d'appeler une procédure interne soeur (2 procédures internes dans la même procédure).
Procédure interne : appel récursif
En version 23, une procédure interne peut s'appeler elle-même de façon récursive.
Procédure: tableau de champs en paramètre
En version 23, il devient possible de passer directement un tableau de champs en paramètre à une procédure.
POO : interfaces
Il devient possible de déclarer des interfaces, c'est-à-dire l'ensemble des propriétés et des méthodes qui devront être implémentées.
Par rapport à une classe abstraite, une interface est plus simple à déclarer et à partager.
POO : méthodes et propriétés abstraites
Dans l'explorateur de projets, les méthodes et propriétés abstraites sont identifiées dans les classes dérivées.
Cela permet de les trouver facilement pour les redéfinir.
Une nouvelle option dans le menu contextuel "Redéfinir les éléments abstraits" permet de redéfinir en une seule opération tous les éléments abstraits.
POO : classe zombie (obsolète)
En version 23, tout élément (procédure, variable globale, constante, classe, propriété et méthode) peut être déclaré zombie (obsolète).
Cela permet de savoir que cet élément ne doit plus être utilisé (mais ne peut pas encore être supprimé).
WLangage: nouveautés diverses
  • Il est possible d'utiliser une variable WLangage dans l'opérateur est :
    SI pclObjet est sNomClasse ALORS
    // Traitements ...
    FIN
  • Il est possible d'affecter plusieurs champs à un tableau de champs en une seule ligne.
Nouvelle famille de fonctions TestVérifie
L'éditeur de tests s'enrichit en version 23 d'une nouvelle famille de fonctions.
Cette nouvelle famille de fonctions permet de vérifier de nombreuses conditions, et déclenche (ou pas) une erreur dans le test selon que la condition est vraie ou fausse.
Par exemple :
La fonction TestVérifieEgalité permet de vérifier que le contenu de 2 variables est identique.
Norme MTOM/XOP
Certains Webservices renvoient des données binaires.
En utilisant le protocole habituel de retour de données, le XML, les volumes transmis pouvaient être très importants, puisque le binaire était encodé sous forme texte.
Un nouveau protocole est donc utilisé par certains Webservices pour renvoyer des données directement sous forme binaire : le protocole MTOM/XOP (ça y est, on est sûr de la présence des extraterrestres sur terre, ...).
En version 23, ce protocole normalisé par le W3C est supporté.
Un gain de taille de données transférées d'environ 30% peut être attendu.
Code SQL reconnu dans l'éditeur de code
En version 23, le code SQL est reconnu dans l'éditeur de code.
Vous bénéficiez de la richesse de l'éditeur de code :
  • coloration syntaxique,
  • complétion à la saisie,
  • assistance temps réel,
  • détection des erreurs de syntaxe,
  • ...
La saisie du code devient plus fluide et plus sûre.
Le SQL est intégré au WLangage.
Code SQL : coloration syntaxique
Le code SQL saisi bénéficie de la coloration syntaxique : cela facilite la relecture du code ! Les mots-clés du SQL sont colorés.
hDebut est une Heure = "080000"
hFin est une Heure = SAI_HeureFin
reqStatVols est une Requête SQL =
[
SELECT * FROM Pays, Compagnie, Vols, Passagers
WHERE Passagers.IDVols = Vols.IDVols
AND Compagnie.IDCompagnie = Vols.IDCompagnie
AND Pays.CodePays = Compagnie.CodePays
AND
     (
Vols.IDAéroportDépart = {ParamIDAéroportDépart}
AND Vols.IDAéroportArrivée = {ParamIDAéroportArrivée}
AND Vols.DateHeure BETWEEN [%hDebut%] AND [%hFin%]
     )
]
HExécuteRequêteSQL(reqStatVols)
POUR TOUT reqStatVols
...
FIN
Code SQL : complétion
A la saisie du code, l'assistance sur les mots-clés SQL est active : la complétion propose les ordres possibles.
La complétion propose également les rubriques de fichiers (les colonnes de table) qui sont présentes dans le fichier concerné.
Dans le code WLangage, la complétion est également proposée sur les rubriques de sortie de la requête.
La saisie SQL assistée
La saisie SQL assistée
Code SQL : erreur de compilation
La saisie du code SQL directement dans l'éditeur de code permet au compilateur de vérifier la syntaxe du code SQL saisi.
En cas d'erreur, une erreur de compilation est générée, comme pour du code WLangage.
Erreur de code SQL détectée en saisie
Erreur de code SQL détectée en saisie
On ferme ! Guillemets, parenthèses, crochets, chevrons se ferment seuls
En version 23, les guillemets et les parenthèses se ferment seuls.
Cette option peut être désactivée.
Par exemple, à la saisie d'une parenthèse ouvrante, la parenthèse fermante est immédiatement générée, avec le curseur présent au milieu...
Ca n'a l'air de rien, mais on ne peut plus s'en passer !
Autre avantage, si la fonction n'attendait pas de paramètres, le curseur est positionné derrière la parenthèse fermante...
Si lors d'une saisie rapide, vous tapez quand même une parenthèse fermante déjà présente, celle-ci sera ignorée. Cet automatisme est disponible pour :
  • "
  • (
  • [
  • [%
  • <
Import de classes et de collections de procédures texte
La version 23 permet d'importer des classes ou des collections de procédures existantes au format texte.
Cela permet aux équipes de développement de créer un générateur de classes correspondant à leur architecture de développement.
Nouvelle présentation des traitements optionnels
Vous le savez, l'éditeur de code propose les traitements les plus habituels par défaut.
Les autres traitements disponibles étaient proposés dans une barre en bas de fenêtre.
En version 23, les autres traitements sont proposés dans le dernier bandeau, donc plus accessibles.
Assistance fonctions chaîne
Certaines fonctions WLangage manipulant des chaînes ne sont pas préfixées par le mot "Chaîne".
Par exemple : Gauche, Droite, Position, SansAccent, Répète, etc.
Sous l'éditeur de code, le développeur saisit souvent le mot du thème recherché et regarde les résultats proposés par la complétion automatique.
En version 23, les fonctions associées sont également proposées.
Vous allez découvrir de nombreuses fonctions de manipulation de chaîne que vous ne connaissiez pas.
Les fonctions associées sont proposées
Les fonctions associées sont proposées
Meilleure assistance sur les procédures
L'éditeur de code propose maintenant également vos procédures qui contiennent le mot tapé, et pas uniquement celles qui commencent par le mot tapé.
Si vous tapez Version, l'éditeur de code vous propose également votre procédure que vous avez nommée Gestiondesversions.
En tapant
En tapant "produit", ces procédures sont trouvées

Assistance sur les entiers
En version 23, lors de la déclaration d'une variable de type Entier, l'assistance à la saisie propose les sous-types d'entier : Entier sur 8, Entier non signé, ...
Fenêtre de recherche verticale

La fenêtre de recherche peut maintenant être dockée à gauche ou à droite de l'éditeur.
Elle se réorganise en fonction de son emplacement.
Légende
Le fond de l'éditeur de code a une couleur spécifique selon certaines situations :
  • code en lecture seule,
  • code coverage à 100%,
  • mise à jour disponible dans le GDS,
  • ...
En version 23, les couleurs sont légendées de manière visible : vous savez à quoi correspond la couleur de fond !!
Perso-dossier dans une collection de procédures, classe, ...
En version 23, il devient possible de créer des perso-dossiers dans les collections de procédures, dans les classes et dans les procédures locales de fenêtre, état et page.
Les procédures sont bien rangées !
Point d'arrêt sans arrêt mais logué dans la trace
Le débogueur permettait déjà de désactiver temporairement un point d'arrêt.
En version 23, il devient possible de spécifier que le passage par ce point d'arrêt soit logué dans la trace de débogage.
Ignorer certaines fonctions en "pas à pas"
Lors des phases de débogage en pas à pas, le développeur souhaite ne pas déboguer le contenu de certaines fonctions. Par exemple, une fonction de conversion ou de log.
En version 23, une procédure peut être définie en procédure Sans Pas à Pas, qui sera ignorée au débogage.
Mapping objet relationnel en 1 clic
Le Mapping Objet Relationnel est disponible depuis la version 22.
Cette fonctionnalité permet de séparer l'accès aux données de la fenêtre.
Le Mapping Objet Relationnel permet de transférer automatiquement des données entre un fichier de données et une classe (et inversement).
En version 23, ce choix est directement accessible dans l'explorateur par clic droit, et dans la liste des classes.
XML
XML : parseur SAX, vitesse optimisée sur gros fichiers
La version 23 intègre un parseur XML "SAX" qui permet de manipuler les fichiers XML de plusieurs Go : par exemple, données de Open Street Map ou de Open Data France.
La vitesse de lecture et la consommation mémoire sont nettement améliorées sur les fichiers XML de taille importante.
Audit statique : signalement des fenêtres gérant ou non les grandes polices
Une fenêtre peut ou non gérer les "grandes polices" de Windows, c'est-à-dire s'agrandir automatiquement proportionnellement au pourcentage de zoom.
Historiquement, les anciennes fenêtres ne géraient pas les grandes polices.
Dans un projet débuté il y a quelques années, il peut donc se trouver des fenêtres qui ne supportent pas l'agrandissement automatique.
La version 23 de l'audit statique signale ces fenêtres.
Audit dynamique : warning si trop de copies de contexte HFSQL dans un délai court
Certains traitements, des classes en particulier, peuvent inclure des copies de contexte HFSQL.
Cette copie de contexte peut consommer de la mémoire.
Si une classe qui possède l'option "copie de contexte HFSQL" est instanciée très souvent dans un délai court, cela peut impacter les performances de l'application et du serveur.
Dans ce cas, l'Audit Dynamique génère un Warning.
Audit dynamique : avertissement lorsqu'une requête ne vérifie pas l'intégrité
L'exécution d'une requête sur une base de données peut ne pas vérifier les règles d'intégrité.
Ce n'est pas bien...
En version 23, l'audit dynamique signale qu'il est fortement conseillé de vérifier les règles d'intégrité. (Option à indiquer à la fonction WLangage hExécuteRequête).
Table inaltérable : vos données gravées dans le marbre
La version 23 de HFSQL propose la fonctionnalité de "table inaltérable".
Ces tables (fichiers de données) ne peuvent pas être modifiées, ni aucun enregistrement (aucune ligne) supprimé.
Tout ajout est définitif et non modifiable.
HFSQL : table (fichier de données) inaltérable
Cette nouveauté de la version 23 permet de signifier qu'un fichier de données ne pourra pas être modifié après écriture.
Une fois un enregistrement ajouté, il ne peut être ni modifié, ni supprimé.
Ce type de fichier de données est utile dans des domaines d'activité qui demandent une forte traçabilité.
HFSQL signe automatiquement chaque enregistrement, et signe le fichier de données lui-même.
Un fichier inaltérable ne peut pas être créé sans connaître son mot de passe : impossible de supprimer et recréer le fichier de données si l'on ne connaît pas ce mot de passe.
Table inaltérable : programmation
Lors d'une tentative de modification ou de suppression d'enregistrement, une erreur d'exécution est générée.
La nouvelle fonction WLangage HVérifieInaltéré permet de s'assurer qu'un fichier de données est valide et que ce fichier n'a pas été modifié par un outil quelconque.
Edition du fichier de données: WDMap, Centre de Contrôle HFSQL, éditeur hexadécimal...
La visualisation d'un fichier de données inaltérable à l'aide d'un outil PC SOFT ne permet pas la modification ou la suppression d'enregistrements.
Utiliser un éditeur hexadécimal est une tâche quasi impossible.
Table inaltérable : Windows, Linux, iOS, Android, ...
Les tables inaltérables sont disponibles pour les systèmes d'exploitation Windows, Linux, iOS et Android.
Les formats sont binairement identiques dans tous les systèmes et donc les bases de données sont directement cross-plateformes.
La fonctionnalité de "Table inaltérable" est disponible en 32 bits et 64 bits, sur HFSQL Classic, HFSQL Embarqué et HFSQL Client/Serveur.
Keep-alive sur connexion : la fin des transactions fantômes
Une connexion à la base de données peut être coupée à tout instant au niveau "matériel" : câble arraché, mise en veille de l'appareil, connexion Wifi interrompue, ...
Lors d'une perte de connexion de ce type, la norme TCP/IP ne prévoit rien. Le serveur reste en attente de communication éventuelle du client.
En version 23, il est possible de définir un time-out ou plus précisément un time-to-live (TTL).
Il devient possible de définir une fréquence à laquelle le serveur vérifiera la présence du client.
Sans réponse du client, la connexion est fermée, ce qui libère les transactions en cours : finies les connexions en l'air à cause des mobiles !
Rubrique zombie : rubrique conservée pour compatibilité mais à ne plus utiliser
Lorsqu'une structure de données a beaucoup vécu, elle contient souvent des rubriques qui ont été utilisées dans le passé, mais qui ne doivent plus l'être.
Mais pour permettre la compatibilité et aux anciennes applications de fonctionner, la rubrique n'est pas supprimée.
En version 23, il devient possible d'indiquer qu'une rubrique est obsolète.
Si la rubrique est utilisée, un warning de compilation sera généré.
Cette fonctionnalité est disponible également pour les fichiers de données eux-mêmes.
Tâche planifiée au démarrage du serveur
En version 23, il est possible d'indiquer qu'une tâche planifiée doit s'exécuter au démarrage du serveur.
Cette fonctionnalité est combinable avec les autres planifications qui peuvent être prévues pour la tâche.
Authentification kerberos (active directory, ...)
Kerberos est un mode d'authentification basé sur l'utilisation de tickets et de clés secrètes.
Ce mode est en particulier utilisé par Windows et l'Active Directory.
En version 23, il est possible de paramétrer le serveur HFSQL afin qu'il authentifie les utilisateurs selon la norme Kerberos.
C'est le compte Kerberos (Active Directory, ...) qui est utilisé.
Réplication serveur
En version 23, la nouvelle fonction HRSAttendTraitementDonnées permet de savoir si un serveur a terminé toutes les opérations de réplication en cours vers les serveurs des abonnés.
Tableau de bord pour Réplication universelle assistée par serveur
Lorsqu'une réplication universelle par serveur est définie, un tableau de bord est disponible en version 23.
Ce tableau de bord affiche les informations suivantes (et d'autres !) :
  • liste des réplications en attente sur le serveur,
  • nom de la machine distante,
  • date de l'abonnement,
  • date de dernière synchronisation,
  • taille du fichier .syn et du fichier .rpa,
  • nombre d'erreurs,
  • ...
Il est possible de trier ces informations et de rechercher dans ces informations.
File d'attente des réplicas à traiter sur le serveur
File d'attente des réplicas à traiter sur le serveur

Réplication universelle assistée : fixer l'ordre des fichiers (tables)
En version 23, il devient possible de fixer l'ordre dans lequel les fichiers (tables) seront répliqués (outil ReplicEdit).
Cela permet de gérer facilement les aspects d'intégrité.
Réplication universelle assistée : compresser les données transférées
En version 23, les données transférées entre le client et le serveur peuvent être compressées.
Dans le cas d'un réseau peu performant, l'impact en termes de performances est très significatif.
Réplication universelle assistée : gestion des noms de postes clients
Lors du changement de nom d'un poste client (par exemple, un PC portable est remplacé par un nouveau PC portable), le serveur intègre cette modification immédiatement.
ODBC : Accès aux vues matérialisées
Un pilote ODBC est livré avec HFSQL.
Ce pilote ODBC permet maintenant d'accéder aux vues matérialisées.
Vérifier rapidement l'intégrité des rubriques mémo
Il était déjà possible de vérifier l'intégrité des mémos lors d'une réindexation à l'aide de la fonction WLangage HVérifieMémo.
En version 23, il devient possible de vérifier uniquement l'intégralité des mémos : cette vérification est bien plus courte qu'une réindexation.
Nouveautés diverses
En version 23, le Centre de Contrôle HFSQL évolue :
  • visualisation des tables reliées,
  • assistant de création de requêtes intégré,
  • possibilité de créer des requêtes multi-fichiers en HFSQL Classic,
  • création de tâches planifiées au démarrage du serveur,
  • affichage des journaux bien plus rapide.
Rappel
Vous le savez, HFSQL dispose d’une version "Cluster".
Cette version Cluster est également diffusable gratuitement avec vos applications développées en WINDEV, WEBDEV et WINDEV Mobile.
L’intérêt du cluster est de répartir de manière totalement automatique le stockage et l’accès aux données sur plusieurs serveurs différents, et ainsi de bénéficier de meilleurs temps de réponse, et d’une meilleure sécurité. (Pour plus d’informations, merci de consulter la documentation dédiée à HFSQL).
Support des procédures stockées
En version 23, le Cluster HFSQL supporte les procédures stockées.
Les procédures stockées peuvent être déployées et exécutées.
Nouveaux opérateurs en SQL
La version 23 de HFSQL supporte 5 nouveaux opérateurs SQL :
  • &
  • |
  • ^
  • <<
  • >>
ainsi que la syntaxe verbeuse :
  • BitAnd,
  • BitNot,
  • BitOr,
  • BitXor,
  • BitAndNot
Grâce à ces nouveaux opérateurs, la compatibilité avec les bases tierces est encore mieux assurée.
saisie directe de code SQL en WLangage
En version 23, il est possible de saisir le code SQL directement dans l'éditeur de code.
Base Big Data Memcached
La version 23 de WINDEV permet d'utiliser la base Memcached facilement, directement en WLangage.
Memcached est une base Big Data en mémoire pour gérer des caches de gros volumes.
La nouvelle famille de fonctions Memcached permet l'accès à la base Memcached.
Pour plus de détails, consultez Fonctions Memcached.
Fonction HCréationSiInexistant inutile
En version 23, l'option de la description du projet "Créer automatiquement les fichiers de données si inexistants" est prise en compte par les connecteurs natifs à SQL Server, Informix, Sybase, MySQL, MariaDB et PostgreSQL.
Version minimum requise
  • Version 22
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire