PC SOFT

DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Nouveauté WINDEV, WEBDEV et WINDEV Mobile 26 !
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget iOSApple WatchCatalystUniversal Windows 10 AppWindows Mobile
Autres
Procédures stockées
HTML : un besoin universel
Les nouveautés de la version 26 autour du nouveau champ HTML vous offrent une puissance et des fonctionnalités infinies.
Le nouveau champ est basé sur Chromium et s'appuie sur les toutes dernières technologies du domaine HTML.
Vos applications vont visualiser des pages Internet (Partie 1), vos applications vont générer des pages HTML, vos utilisateurs vont créer ou modifier leurs pages HTML (Partie 2), la gestion des emails dans vos applications va proposer les fonctionnalités standards des mailers (Partie 3), vous allez facilement programmer des traitements puissants d'analyse de contenus de pages Web (Partie 4).
Que ce soit sous Windows, en Internet, en Android ou en iOS, vous allez réaliser des prouesses en HTML.
Champ d'affichage HTML natif: un rendu parfait
Le champ d'affichage HTML affiche une page Web.
Par exemple, en 1 ligne de code, sans utiliser de navigateur externe, vos applications WINDEV peuvent afficher une page de site Web : aide, news, documentation technique...
Le champ d'affichage HTML de la version 26 affiche parfaitement tous les documents HTML, créés avec WINDEV, WEBDEV ou WINDEV Mobile ou n'importe quel autre éditeur.
Les balises les plus récentes sont supportées.
Les feuilles de styles CSS sont gérées.
Le code Javascript éventuellement présent dans le HTML est interprété si vous l'autorisez.
Le champ affiche soit un contenu HTML (un fichier) soit le contenu distant d'une URL.
Champ d'affichage HTML : technologie Chromium
Le champ des anciennes versions était basé sur un ActiveX Internet Explorer.
Le champ d'affichage HTML de la version 26 utilise la technologie Chromium et n'utilise aucune ressource extérieure pour fonctionner : aucun ActiveX, il ne dépend pas de la version de Windows ni du navigateur présent sur la machine d'exécution.
Un navigateur Web dans vos applications
Le code source d'un navigateur est livré en version 26.
Vous pouvez utiliser, modifier, personnaliser ce code pour l'inclure dans vos applications.
Utiliser un navigateur de ce type permet de s'assurer d'une présentation identique des pages pour tous vos utilisateurs.
Ce type de navigateur permet également de définir facilement la liste des seuls sites qui peuvent être ouverts, ce qui peut être utile en milieu professionnel.
Champ d'affichage HTML : remplissage automatique de formulaire web par programmation
Il ne faut pas confondre la manipulation du "champ" HTML par programmation, et la manipulation de "code" HTML par programmation (Partie 4).
Une application peut avoir besoin d'interagir avec le contenu de la page :
  • Déclencher par programme le clic sur un bouton pour afficher automatiquement la page suivante
  • Remplir un formulaire par programmation
  • ...
Le champ d'affichage HTML de la version 26 propose de nouvelles fonctions WLangage pour le piloter :
  • Remplir un champ de saisie
  • Remplir un champ formulaire
  • Cliquer sur un bouton
  • Récupérer la valeur d'un champ formulaire
  • Identifier un champ
  • Cliquer sur un sélecteur ou un interrupteur
  • Cliquer sur un choix de combo
  • ...
Champ d'affichage HTML : un bouton HTML peut exécuter du code WLangage
Un champ d'affichage HTML peut déclencher l'exécution de code WLangage (depuis un bouton,...). Ce code WLangage est présent dans la fenêtre qui contient le champ HTML.
Dans le code Javascript du bouton HTML, il suffit d'appeler la fonction Javascript WLExecute , en passant la procédure WLangage et ses paramètres.
Nouveauté intéressante : la fonction WLangage appelée depuis le code Javascript peut prendre plusieurs paramètres.
Et si cela est nécessaire, depuis le code WLangage il est possible d'appeler du code Javascript contenu dans la page.
Nouveaux événements
Pour programmer un comportement personnalisé du champ d'affichage HTML, de nouveaux événements de programmation font leur apparition pour ce champ.
Ils s'ajoutent aux événements existants.
  • Chargement de ressource
    Cet événement permet de filtrer le chargement d'un élément dans la page avant qu'il soit téléchargé.
    Par exemple : permet d'interdire le chargement de ressources qui se trouvent sur un autre domaine, ou sur un domaine non autorisé ou blacklisté, ne pas autoriser le chargement d'images de tracking, etc.
  • Changement de page
    Cet événement permet d'être prévenu juste avant qu'une nouvelle page ne soit demandée, ou de mémoriser la suite des pages vues.
  • Clic droit sur un lien
    Il permet par exemple l'affichage d'un menu contextuel.
    Cela permet également de refuser de changer de page.
  • Manipulation du contenu du champ HTML
    Le champ HTML peut être lié à un fichier de données HFSQL (ou autre) : il peut être "bindé". Le binding peut être effectué soit sur la page complète, soit sur une partie de page.
    Cela peut être utile pour gérer des fiches produit par exemple.
Champ d'affichage HTML : Divers
  • 3 nouvelles propriétés apparaissent : URL, Document, MenuContextuel.
  • Le code Javascript est exécuté dans un environnement sécurisé ("bac à sable").
  • Gestion affinée de l'affichage 4K.
  • Le cadre de contour du champ est paramétrable.
Champ d'édition HTML : richesse fonctionnelle
Le champ d'édition HTML de la version 26 est basé sur les normes les plus récentes de HTML.
Toutes les fonctionnalités HTML sont proposées et reconnues.
Le code CSS attaché au HTML est bien entendu nativement géré.
Champ d'édition HTML : fonctionnalités
Un ruban est intégré au champ d'édition.
Vous n'avez rien à programmer dans votre application.
Ce ruban est personnalisable en fonctionnalités (vous pouvez rajouter des boutons et des volets) et en look.
Les choix par défaut comprennent :
  • choix de la police, taille, couleur
  • choix de la graisse, italique, souligné, barré...
  • import de style CSS
  • gestion des images : déplacement, retaillage, redimensionnement, rotation...
  • édition des liens
  • undo/redo
  • copier/coller de texte brut, RTF, Docx, HTML
  • coller sans mise en forme
  • enregistrer
  • imprimer
  • export PDF
  • emojis
  • alignement
  • indentation
  • tableaux
  • correcteur orthographique
  • rechercher/remplacer
  • ...
Champ d'édition HTML : passer du mode WYSIWYG au mode balises (code source)
Le champ HTML permet la saisie WYSIWYG de code HTML.
Pour les utilisateurs avertis (ou les rois du copier/coller), il est possible de passer à tout moment en mode "balises" (code source), qui visualise les balises HTML.
Cela permet par exemple de déclarer une feuille CSS, d'insérer une balise particulière, de coller un bout de code...
Dans le mode balises, il est également possible de saisir (ou coller) du code Javascript.
Le code HTML est stocké au format UTF-8 et il est visualisé en WYSIWYG.

Champ d'édition HTML : nouvelles fonctions Wlangage
Le champ d'édition HTML est en général intégré dans une fenêtre qui propose des fonctionnalités automatiques sur le contenu HTML en cours de saisie, souvent par des boutons : insérer un texte défini par programmation, insérer un devis, mettre en forme et insérer des données qui proviennent de la fenêtre en cours, insérer une signature, insérer le logo, positionner le curseur, présélectionner une portion de texte.
Plusieurs nouvelles fonctions WLangage font leur apparition dans ce but en version 26 :
  • EditeurHtmlFormateSélection : Applique une mise en forme sur le texte sélectionné : gras, italique, souligné, taille, police, style CSS...
  • EditeurHtmlInsère : Insère du texte ou du code HTML à partir de la position du curseur. Si un texte est sélectionné, il est remplacé.
  • EditeurHtmlInsèreTableau : Insère un tableau vide à l'emplacement du curseur. Le nombre de lignes et le nombre de colonnes doivent être spécifiés en paramètres. Le tableau ainsi créé est éditable à la souris par l'utilisateur final.
  • EditeurHtmlSélectionne : Positionne le curseur.
Champ d'édition HTML : nouveaux événements
De nouveaux événements font également leur apparition pour gérer finement ce champ d'édition HTML.
  • Sélection
    Ce nouvel événement est appelé à chaque fois que l'utilisateur effectue une sélection dans le document HTML.
    Le nouveau type WLangage edtHtmlSélection permet d'obtenir les informations sur les éléments sélectionnés : mot sélectionné...
  • Après Chargement de la page
    Ce nouvel événement est appelé une fois que le chargement de la page est complètement terminé. C'est utile par exemple pour débuter une analyse automatique de page.
  • Chargement de ressource
    Ce nouvel événement est appelé à chaque fois que la page télécharge un élément : image, fichier... Permet de vérifier et éventuellement d'interdire un téléchargement.
  • A chaque Modification
    Ce nouvel événement est appelé à chaque fois que l'utilisateur effectue une modification dans la page : une saisie,...
Champ d'édition HTML dédié email
La version 26 propose un nouveau champ de saisie HTML dédié aux emails.
Ce champ permet à vos applications d'offrir la saisie WYSIWYG de texte enrichi à la norme HTML, qui sera ensuite reconnu et affichable par toutes les messageries.
Le document HTML créé peut être manipulé en mémoire ou sur disque.
Les secrets du texte des emails
Il faut savoir qu'un email ne peut pas contenir du HTML habituel, ni du CSS habituel.
Chaque logiciel de gestion de mails (Gmail, Yahoo, Outlook, Thunderbird, Courier,...) possède ses propres limitations.
Pour être interprété correctement, un email ne peut donc contenir qu'un sous-ensemble des fonctionnalités du HTML et CSS.
Par exemple, Gmail ne gère pas les images SVG et HDR ou les balises <video>, Outlook ne supporte pas les boutons "Submit" ou le Doctype HTML 5, Yahoo n'accepte pas les ancres, etc.
Le champ email HTML de la version 26 permet uniquement l'utilisation des fonctionnalités reconnues par l'ensemble des logiciels de gestion d'emails : les emails créés par vos applications seront correctement lus !
Champ email : les images
Les images incluses dans le champ HTML pour email sont incluses en pièces jointes dans l'email (les images encodées en base 64 ne sont pas acceptées par les readers d'emails).
Gestion des emails facilitée
Un exemple source complet en WLangage de gestion d'emails (réception et envoi) basé sur le nouveau champ HTML Email est livré en version 26; tout est géré.
Par exemple, en répondant à un email, l'email initial est automatiquement copié et indenté sous le texte saisi.
Ou encore la signature peut être insérée automatiquement.
Vos applications vont prendre un sacré coup de jeune, sans effort !
Une programmation native
Par programmation, sans UI, le WLangage permet de manipuler un document HTML, de le lire, de l'enrichir.
Deux types natifs, 2 nouvelles fonctions et 285 nouvelles syntaxes (voir page 50) permettent de manipuler le code source HTML, de construire un document de zéro, de modifier un document existant, d'ajouter des balises, de rechercher du contenu, de modifier du contenu, d'ajouter des images et des tableaux,...
Vous accédez de manière native à chaque noeud de l'arbre HTML.
Il est également possible de créer ou modifier du code Javascript dans le document HTML.
Les styles CSS locaux sont également manipulables par programmation en version 26.
2 types natifs pour manipuler les documents html
La version 26 offre des possibilités avancées pour gérer le HTML : 2 types WLangage apparaissent.
Ces types natifs permettent d'effectuer toutes les opérations voulues sur un document HTML existant ou créé de zéro.
Le type natif htmlDocument sert à manipuler tout le document HTML.
Le type natif htmlNoeud sert lui à manipuler un noeud de l'arbre HTML : une table, un champ Input, une balise Méta...
Le type htmlNoeud offre de nombreuses propriétés pour manipuler chaque balise :
  • nom de la balise
  • attribut
  • élément fils
  • élément frère
  • élément parent
  • rang
  • ...
Exemple d'accès à un noeud de l'arbre HTML :
Document est un htmlDocument
]
Document.body:color = "blue"
Recherche d'éléments dans le document HTML
2 nouvelles fonctions WLangage permettent de rechercher des éléments dans tout le document HTML : htmlChercheElémentParID et htmlChercheElémentParNom .
Ces fonctions renvoient une variable de type htmlNoeud , ce qui permet d'effectuer tous les traitements voulus.
Exemples de code
La programmation du HTML en WLangage est très puissante en version 26.
Voici quelques exemples de code de lecture de code HTML :
  • Récupération du chiffre d'affaires d'une société sur un site
    // Récupération du chiffre d'affaires de la société
    // depuis le fichier HTML pour affichage dans la table
     
    DocHTML est un htmlDocument
    DocHTML = HTMLOuvre("https://site.fr/page.html", depuisURL)
     
    POUR Année = 2010 À 2020
        element est un htmlElément = DocHTML.ChercheParID("CA_" + Année)
        TableAjouteLigne(TABLE_CA, Année, element.value)
    FIN
  • Analyse d'une page HTML pour récupérer une facture
    // Récupération de l'URL de la facture dans le fichier HTML
    // pour téléchargement de la facture
     
    DocHTML est un htmlDocument = HTMLOuvre("MonFichier.html", depuisFichier)
    element est un htmlDocument = DocHTML.ChercheParID("Facture_092020")
    URLFacture est une chaîne = element.attributs["href"]
    HTTPRequête(URLFacture)
  • Parcours d'une table HTML
    // Parcours des lignes de la table ayant l'ID czZ4 dans le doc HTML
    DocHTML est un htmlDocument = HTMLOuvre("MonFichier.html", depuisFichier)
    table est un htmlElément = DocHTML.ChercheParID("czZ4")
    POUR TOUTE LIGNE DE table.tbody
       //Traitement
    FIN
  • Récupération du favori (FAV icône) d'une page HTML
    //Récupère l'URL du logo de la page
    IMG_logo = DocHTML.head.querySelectorlink[rel*="icon"]').href
Voici un exemple de programme de génération de code HTML, qui construit depuis un modèle, une page HTML de "saisie d'avis" sur une sélection de produits contenus dans une base de données:
// Création du sondage
// Pour les nouveaux produits, on demande l'avis des clients
// Doc html «base du sondage»
DocHTML est un htmlDocument = HTMLOuvre(ModèleSondage, depuisChaîne)
 
// On se place dans la <table>
LaTable est un htmlElément <- DocHTML.ChercheParID("LaTable")
 
// On récupère notre ligne "modèle" (que l'on supprime)
LigneModèle est un htmlElément = LaTable.TR
SupprimeTout(LaTable)
 
// Pour chaque nouveau produit
POUR CHAQUE Produit AVEC Nouveau = Vrai
    // On crée une ligne de sondage
    // avec un libellé : "NOMPRODUIT est un nouveau produit."
    // et un champ de saisie déjà présent dans la ligne modèle
    UneLigne est un htmlElément = LigneModèle
    UneLigne.TD.label..Texte = "Votre avis sur" + Produit.LibProduit
// Ajout de la ligne dans le HTML
Ajoute(LaTable, UneLigne)
FIN
 
// Sauvegarde de la page
HTMLSauve(DocHTML, "sondage.html", HTMLDocumentDéfaut)
Carte : intégrer des images dans une carte
En version 26, il devient possible d'intégrer des dessins et des photos dans une carte : l'exemple le plus immédiat est un logo de société qui matérialise l'emplacement de la société.
L'image est intégrée à la carte, ce qui signifie que lorsque la carte est zoomée, l'image zoome également. La taille de l'image doit être indiquée en mètres.
Carte : intégrer des formes géométriques dans une carte
En version 26, il devient également possible de dessiner et d'intégrer des formes géométriques dans une carte :
  • trait
  • carré
  • rond
  • polygone
  • polyligne (ligne brisée)
  • ...
La forme est intégrée à la carte, ce qui signifie que lorsque la carte est zoomée, la forme dessinée suit le zoom.
Carte : afficher le trafic routier sur une carte
Le trafic routier en temps réel peut être affiché sur une carte.
Sur une carte Google, les données proviennent de Google Maps.

Carte : afficher une zone géographique
Par défaut, une carte peut afficher en plein écran une zone géographique déterminée.
Il est possible d'interdire à la carte de sortir de cette zone : l'utilisateur pourra zoomer, mais ne pourra pas dé-zoomer.
La zone à afficher est décrite soit par ses coordonnées géographiques, soit par son nom (ville, région, pays...).
CarteAfficheZone positionne le champ carte sur une zone géographique donnée (coordonnées des coins).
CarteLimiteZone limite les actions de zoom et de déplacements afin que la zone définie soit toujours visible.
GéoRécupèreZone accepte une rue, une ville, un pays et récupère les coordonnées de la zone.
Carte : afficher une popup
Les marqueurs bénéficient de nombreuses options supplémentaires en version 26, dont la possibilité d'afficher une Popup lors du clic sur le marqueur ou par programmation.
Cette Popup est entièrement personnalisable à l'aide d'une Fenêtre Interne ou d'une Page Interne.
3 nouvelles fonctions WLangage font leur apparition : CarteAffichePopup , CarteFermePopup et CartePopupAffichée .

Carte : interdire des gestures sur mobile
Sur mobile, il existe 4 gestures possibles sur une carte :
  • Zoom (pinch)
  • Scroll
  • Rotation
  • Inclinaison
En version 26, il devient possible d'interdire certaines de ces gestures sur une carte.
Carte : style : thème sombre...
En version 26, une carte peut s'afficher en thème sombre.
D'autres thèmes de cartes (gris,...) sont également proposés.
Carte : vue 3D, choix de l'angle...
Sur une carte, il est possible de changer par programmation la position de la caméra, c'est-à-dire l'angle de visualisation de la carte (0° à 45°) grâce à la propriété AngleInclinaison.
Il est également possible d'effectuer une rotation.

Carte : cluster de marqueurs, regroupement automatique
En version 26, le concept de "cluster automatique" fait son apparition dans les cartes.
Les clusters de marqueurs permettent d'améliorer la lisibilité d'une carte lorsqu'il y a une forte densité de marqueurs sur une petite zone. Le cluster regroupe automatiquement les marqueurs, pour éviter une superposition illisible.
Par défaut, un cluster est représenté par un rond.
La couleur de ce rond dépend du nombre de marqueurs qu'il contient.
Dans le rond, le nombre de marqueurs est automatiquement affiché.
Tout est personnalisable.
Pour qu'un marqueur puisse être regroupé dans un cluster, il suffit de lui affecter la propriété .Cluster .
Pour personnaliser la représentation du cluster, un nouveau type WLangage fait son apparition : le type MarqueurImage .
Carte : divers
En version 26, le champ Carte bénéficie d'autres nouveautés :
  • Affichage possible d'une boussole
  • Nouvelles propriétés pour les marqueurs Opacité , Déplaçable , ActionDéplacement , Altitude , Note ...
  • Le type MarqueurImage permet de personnaliser l'image du marqueur.
Les champs métier
La version 26 offre 10 nouveaux champs métier :
  • Aide à la saisie de mot de passe,
  • Saisie de code Pin de type "banque",
  • Menu hamburger vertical et ouverture de fenêtre Popup,
  • Captcha Google,
  • Champ Vidéo avec boutons de contrôle,
  • Schéma de verrouillage de téléphone,
  • Combo avec check box,
  • Jeton en mode filtre,
  • Saisie de date et heure à la souris,
  • Affichage de toast avec annulation.
Champ Lecteur PDF : extraction de page
Le champ Lecteur PDF permet de créer un nouveau document PDF qui contient un ensemble de pages (plage ou différentes pages) d'un document PDF spécifié.
Champ Lecteur PDF : ajout de page
Le champ Lecteur PDF permet d'insérer une ou plusieurs pages dans un document PDF existant, à l'emplacement spécifié.
Champ Lecteur PDF : suppression de page
Le champ Lecteur PDF permet de supprimer une ou plusieurs pages d'un document PDF existant.
Champ Lecteur PDF : zone survolée
Dans le document PDF, qu'est-ce que l'utilisateur final est en train de survoler avec la souris ? Les fonctions habituelles SourisPosX et SourisPosY permettent de récupérer la position de la souris.
La fonction WLangage LecteurPDFInfoXY renvoie le numéro de la page et les coordonnées de la souris dans la page (en millimètres).
Cela permet par exemple d'afficher des informations contextuelles sur le document PDF.
Champ TT : affichage continu
Le champ Traitement de texte propose maintenant l'affichage du texte en continu, sans rupture de page. Utile pour une lecture plus fluide.
Champ TT : divers
  • Dictionnaire orthographique espagnol livré
  • Nom de fichier par défaut à la sauvegarde : soit début du texte, soit défini par programmation
  • Nouvelle fonction docInfoXY.
Champ Tableur: fichier à feuilles multiples
Dans un fichier XLSX à feuilles multiples, la dernière feuille utilisée est mémorisée, et sera affichée à la prochaine réouverture.
Le réordonnancement des feuilles devient également possible pour l'utilisateur final.
Champ Tableur : divers
  • Il est possible de fusionner des cellules par programmation.
Rappel
Un OCR (Optical Character Recognition) analyse une image pour extraire les textes présents.
La version 26 vous permet d'offrir des fonctionnalités natives d'OCR dans vos applications et dans vos sites.
Le moteur d'OCR est un réseau de neurones, l'OCR décrypte les images contenant du texte.
Prenez la photo d'un contrat avec votre téléphone et récupérez le texte dans votre appli ou dans Word !
Un OCR est également très utile pour une GED, afin d'indexer les contenus.
Une nouvelle famille WLangage : OCR
La méthode pour récupérer un texte est simple : il suffit de fournir une image (format quelconque) ou un document PDF à la fonction OCRExtraitTexte.
La fonction OCRExtraitTexte renvoie l'ensemble des textes contenus dans l'image.
Le contenu autre que le texte est ignoré.
Pour analyser uniquement une partie d'une image, il suffit d'indiquer les coordonnées de la partie à analyser.
Par exemple :
MonRectangle est un Rectangle
MonRectangle.X=129
MonRectangle.Y=94
MonRectangle.Largeur=1353
MonRectangle.Hauteur=121
OCRExtraitTexte(MonImage, MonRectangle)

La fonction ocrExtraitBlocTexte analyse une image et renvoie un ensemble de rectangles contenant chacun un bloc de texte.
OCR : gestion des langues
Par défaut, toutes les langues sont reconnues.
L'OCR reconnait les alphabets :
  • latin
  • cyrillique
  • chinois
  • japonais
  • arabe
  • hébreu
  • ...
De plus, l'OCR analyse en temps réel les textes résultants et utilise un modèle spécifique à la langue.
Ce modèle permet d'améliorer la reconnaissance.
Les langues optimisées par défaut sont le français, l'anglais et l'espagnol.
Pour optimiser les autres langues, il suffit de livrer le modèle d'entrainement du réseau de neurones correspondant (disponible sur Internet).
Plusieurs langues peuvent être supportées simultanément.
L'optimisation peut être débranchée.
Nouveauté Champ Graphe : libellés verticaux
Une nouvelle option des valeurs des barres d'histogramme permet d'afficher ces valeurs de manière verticale.

Nouveau Graphe : zone d'intervalle
Un nouveau type de graphe fait son apparition en version 26 : le graphe zone d'intervalle.
Ce type de graphe permet de visualiser une variation entre une valeur haute et une valeur basse.
L'axe des abscisses représente en général le temps et le graphe affiche l'évolution de la valeur haute et de la valeur basse.


Nouveauté Champ Graphe quadrillage en pointillé
Le quadrillage des graphes peut maintenant être en pointillé : c'est la version allégée du quadrillage !


Sortir d'un champ à saisie obligatoire sans le renseigner
Les champs en saisie obligatoire existent depuis toujours dans WINDEV, WEBDEV et WINDEV Mobile.
Pour passer au champ suivant depuis un champ en "saisie obligatoire", l'utilisateur final devait obligatoirement renseigner, sinon il ne pouvait pas en sortir.
En version 26, il devient possible de sortir d'un champ à saisie obligatoire, pour le renseigner plus tard : la vérification de la saisie sera effectuée uniquement lors de la validation de la fenêtre ou de la page.
Dans les 7 onglets d'un champ, un nouveau choix fait son apparition "Saisie obligatoire non bloquante".

Champ à saisie obligatoire non bloquant : comment ça marche
Une nouvelle fonction WLangage fait son apparition : ValideSaisie .
La fonction ValideSaisie doit simplement être appelée dans le code du bouton de validation de la fenêtre.
Cette fonction renvoie Vrai ou Faux .
Lorsque la valeur de retour est à Faux , cela indique qu'il reste au moins un champ obligatoire non saisi, la fenêtre repasse en saisie et le curseur se positionne sur le premier champ obligatoire non renseigné.
Les champs obligatoires non renseignés sont matérialisés avec un style spécifique.
Identification automatique du champ à saisie obligatoire
Les champs de saisie obligatoire peuvent maintenant être matérialisés plus finement. Le style d'un champ indique le type de matérialisation de la saisie obligatoire : étoile, liseré rouge, picto...
Une matérialisation de 2ème niveau est proposée pour identifier les champs non renseignés après validation de la fenêtre ou de la page.

Champ à saisie obligatoire : nouveau, sur combo, sélecteur, interrupteur
En version 26, en plus des champs de saisie, il devient possible de rendre en saisie obligatoire les champs suivants :
  • Combo, Combo avec saisie
  • Sélecteur
  • Interrupteur.
Pour ces champs également, le style inclut les différentes matérialisations.
Masque saisie invalide
La vérification de saisie des champs possédant un masque de saisie évolue également sur le même principe.
Le style du champ inclut maintenant une mise en évidence d'une saisie incorrecte : icône, libellé, cadre...
La vérification automatique peut être effectuée soit immédiatement, soit à la validation de la fenêtre.
Ne dupliquez plus vos projets inutilement : un environnement unique
Vous le savez, il est possible d'utiliser WINDEV, WEBDEV et WINDEV Mobile dans le même environnement.
Les éléments des projets sont ainsi immédiatement communs aux 3 plateformes : analyses, requêtes, états, procédures, classes, code,... Fenêtres, pages et fenêtres mobiles se trouvent dans le même projet.
Ces éléments s'ouvrent directement dans l'environnement de WINDEV .
Cela permet le portage et la maintenance facile d'une application WINDEV vers le mobile et vers le Web, sans avoir besoin d'importer ou de dupliquer des éléments du projet.
Rappel : il est bien entendu nécessaire de posséder une licence du logiciel concerné.
Coloration du code hors configuration
En version 26, tous les codes ouverts proposent maintenant la coloration syntaxique, même les codes hors configuration.
Fonctionnement en 32 bits et 64 bits
L'intégration de WINDEV Mobile et WEBDEV dans WINDEV fonctionnait en mode 64 bits.
En version 26, le fonctionnement est également disponible en 32 bits.
Cela permet par exemple d'utiliser une ressource externe (ActiveX, DLL, Connecteur Natif,...) qui serait disponible uniquement en 32 Bits.
Votre existant WINDEV devient un site Web ou une application SaaS
Un besoin répandu est de transformer une application Windows (ou des parties d'applications) en un site Web dynamique ou en une application SaaS.
WINDEV et WEBDEV répondent à ce besoin de manière idéale.
En version 26, le look du gestionnaire SaaS a été modernisé.
Nommage des feuilles de styles 
En version 26, il devient possible de créer et nommer librement vos feuilles de styles.


Plusieurs feuilles de styles par projet
En version 26, un projet peut utiliser simultanément plusieurs feuilles de styles.
Lors de la sélection du style, il est possible de filtrer la ou les feuilles de styles à afficher par défaut.
Partage des feuilles de styles facile 
Grâce à ces nouveautés, il devient bien plus facile de gérer et réutiliser ses styles sans contraintes.
Une feuille de styles se copie simplement dans le répertoire du projet comme tout élément.
Les feuilles de styles sont également gérées et partageables par le GDS.
Cette nouvelle simplicité sera appréciée de tous !
Génération de classe depuis l'analyse (mapping objet relationnel)
Nouveauté pratique, il devient possible de générer la classe d'un fichier de données (table) directement depuis l'éditeur d'analyses.
Inutile de retourner dans l'explorateur de projet.
Génération de structure
Il était déjà possible de générer une classe à partir d'une description de fichier de données (table).
En version 26, pour ceux qui le désirent, il devient possible de générer une structure à la place d'une classe.
Un environnement plus efficient : plusieurs espaces simultanés
2 fenêtres de code ouvertes côte à côte ?
1 fenêtre et son code côte à côte ? Changez le champ sélectionné, F2 et le code change dans la fenêtre à côté.
Une fenêtre WINDEV et la page WEBDEV équivalente ?
En version 26, ces modes d'utilisation sont automatiques.
Il n'est plus nécessaire de positionner et redimensionner manuellement les fenêtres : ça change tout !
Une barre de documents autonome est présente pour chacun des espaces.
Il est possible d'avoir plus de 2 zones ouvertes simultanément et un splitter permet d'adapter la taille de chaque fenêtre.
L'espace de travail se réorganise maintenant automatiquement.
L'espace de travail peut être découpé en plusieurs zones, horizontales ou verticales.
Dans chaque zone, il est possible d'ouvrir autant de documents, de n'importe quel éditeur, que désirés.
Un document peut passer d'une zone à l'autre par Drag&Drop.
Un même document peut être ouvert plusieurs fois dans des zones différentes, par exemple pour visualiser simultanément :
  • les différents plans d'une fenêtre ou d'une page
  • les différentes tranches des pages responsives
  • les différents agencements : portrait, paysage, iOS, Android, tablette, smartphone, etc.
  • une fenêtre WINDEV et la page équivalente WEBDEV.
Scroller la barre de documents à la roulette
En version 26, la barre des documents scrolle lors de l'utilisation de la roulette : c'est bien pratique.
Vitesse de compilation multipliée par 3
Accrochez-vous, la vitesse de compilation de vos projets est multipliée par 3 dans la plupart des cas !
Cela apporte un confort appréciable.
Vitesse d'ouverture des 7 onglets boostée
On passe tous beaucoup de temps dans les 7 onglets !
La vitesse d'ouverture des fenêtres a été boostée pour améliorer le confort quotidien des développeurs !
Navigation dans les éléments : CTRL+Tab plus rapide !
La combinaison de touche CTRL+TAB permet de passer rapidement d'un élément ouvert à un autre.
En version 26, la latence de cette opération disparaît :
53 minutes gagnées par an !
Réduction des manipulations : détacher des volets du ruban
En version 26, il devient possible de détacher un volet du ruban pour le rendre accessible en permanence.
Cela évite des manipulations de volets.
Par exemple, lors du travail d'UI, on peut laisser le volet d'alignement ouvert en permanence.
Il est possible de détacher plusieurs volets.
Explorateur de projet relooké
En version 26, l'explorateur de projet a été aéré et allégé.
Les éléments de types différents sont mieux séparés.
Droite/gauche ? Explorateur de projet à gauche
Il semblerait que la souris soit le plus souvent positionnée à gauche de l'écran.
Pour limiter les déplacements de souris, l'explorateur est maintenant positionné par défaut à gauche. Et si vous trouviez que ce n'est pas mieux, vous pouvez le remettre à droite en 1 manipulation !
Editeur de liaisons binding (fenêtre, page, état)
En version 26, un éditeur de liaisons fait son apparition.
Cet éditeur liste tous les champs de la fenêtre, de la page ou de l'état et indique l'existence (ou pas) d'un binding, et à quelle source le champ est relié.
L'éditeur permet également de modifier le binding d'un champ ou d'un groupe de champs : remplacer un fichier de données par une requête par exemple.
Il est possible de déclencher la recherche de toutes les utilisations d'un champ dans le code de la fenêtre/page/état.
Recherche sur une sélection de champs
Vous le savez, la recherche dans l'environnement de WINDEV est puissante. Il est possible de rechercher dans le code, dans les 7 onglets, dans les messages multilingues...
En version 26, il devient possible de restreindre la recherche à un ensemble de champs sélectionnés à la souris.
Le copier/coller de champs liés par programmation renomme les références au champ copié dans le code
Prenons l'exemple d'un champ de saisie suivi d'un bouton "Parcourir". Le code du bouton "Parcourir" ouvre un sélecteur de fichiers et affecte le champ de saisie avec le fichier sélectionné par l'utilisateur. Le nom du champ de saisie est donc dans le code du bouton "Parcourir".
Lors d'un copier/coller du champ de saisie et de son bouton dans la même fenêtre, les nouveaux champs vont être automatiquement renommés.
Sans intelligence, le code de ces champs serait faux, car utiliserait les anciens noms de champs.
En version 26, le copier/coller modifie automatiquement le nom des champs utilisés en programmation.
Rouvrir un élément fermé par erreur : CTRL+MAJ+T
Lors des phases de développement, il arrive souvent de fermer par erreur un élément ouvert : une fenêtre, une procédure, une classe...
Le retrouver pour l'ouvrir de nouveau est souvent casse-pieds.
En version 26, il suffit de la combinaison de touches CTRL + MAJ + T pour rouvrir le dernier élément fermé (comme sur un navigateur).
En faisant 2 fois CTRL + MAJ + T, on ouvre les 2 derniers éléments fermés, etc (jusqu'à 10).
Clipart : 10.000 nouvelles icones
Le clipart livré s'enrichit de 10.000 nouvelles icônes d'aspect actuel, filaire et noir & blanc.
Piochez dedans pour les UI de vos applications et de vos sites !
Icônes du ruban new look
Les icônes du ruban de l'environnement prennent un coup de jeune et deviennent vectorielles, donc encore plus nettes.
Divers
  • Tous les événements du projet, même ceux des autres configurations, sont visibles.
  • Lorsqu'un projet contient plus de 20 perso-dossiers, une option permet de les lister.
  • Il devient possible d'inclure ou d'exclure un élément d'un ensemble de configurations en une seule manipulation.
  • Le contenu des portefeuilles est contextuel à l'environnement qui les manipule.
Catégorisation des fiches de bogue
Afin de pouvoir classer et trier facilement les fiches de bogues, il est maintenant possible d'étiqueter ces fiches de bogues.
Vous définissez autant d'étiquettes que voulues.
Une même fiche peut recevoir plusieurs étiquettes.
Exemples d'étiquettes :
  • à développer
  • urgent
  • suggestion
  • module compta
  • ...
Amélioration de l'UI de création des exigences
Le nombre de clics pour créer une exigence a été divisé par 3.
L'UI a été allégée.
Liste des tâches : mise en évidence des tâches de l'exigence dont on est responsable
Chaque développeur visualise sa liste des tâches.
Le développeur filtre cette liste selon différents critères : sprint, dossier,...
Lorsque le développeur est également responsable d'une exigence, les tâches qui appartiennent à cette exigence sont mises en évidence.
Le développeur peut ainsi mieux hiérarchiser ses tâches.
Avertissement lors de l'utilisation d'une ancienne syntaxe de thread
Les anciennes syntaxes de gestion des threads sont toujours supportées.
Ces anciennes syntaxes ne permettent pas de fermer les fenêtres et les pages dans certains cas.
L'audit identifie ces anciennes syntaxes et propose de les remplacer par la syntaxe moderne, qui est plus riche et plus sécurisée.
Préfixage des champs : erreur de compilation d'UI
Les champs qui ne disposent pas du préfixe défini par la charte de programmation apparaissent en Erreur d'UI.
Cette fonctionnalité n'est pas activée par défaut.
Détection des dépendances manquantes
Lorsqu'une dépendance est manquante, elle est signalée par l'audit.
Parmi les dépendances concernées, on trouve : feuilles de styles, bibliothèques externes, fichiers de documentation, feuilles CSS externes, codes JS externes, fichier des favoris, fichiers des composants internes et externes, charte de programmation, polices perso du projet, etc...
La fonction Wlangage hashChaine dépend de la plateforme (mobile, linux)
Les chaînes de caractères UNICODE ne sont pas gérées de la même manière par le système Android et le système iOS.
Android stocke un caractère sur 4 octets (comme Linux), alors que iOS stocke un caractère sur 2 octets (comme Windows).
L'utilisation de la fonction WLangage hashChaine (qui manipule les octets) ne donnera donc pas le même résultat selon la plateforme.
L'Audit Dynamique vous alerte.
Présentation allégée
La Documentation Technique et Fonctionnelle (dossier de programmation de vos applications) propose maintenant de supprimer le libellé des propriétés dont le contenu est vide.
Seules les propriétés renseignées (utilisées) apparaissent dans le dossier.
Cela allège la présentation des pages.
Nouvelle action : déploiement de site (et de webservice)
Un plan d'action peut maintenant inclure le déploiement d'un site ou d'un Webservice.
Une nouveauté attendue et très pratique dans l'automatisation des tâches d'administration !
Désactivation temporaire d'une action
La désactivation temporaire d'une action permet de ne plus exécuter l'action, mais sans perdre son paramétrage.
Nouvelle action: désactiver les erreurs de norme de programmation
Les erreurs de norme de programmation (zombies, ...) sont maintenant différenciées des autres erreurs de compilation par la Fabrique Logicielle.
Il est maintenant possible de désactiver spécifiquement ces erreurs afin d'exécuter des plans d'actions même en cas d'erreurs de norme de programmation.
Administrateur : UI améliorée et accélérée
L'administrateur de la Fabrique Logicielle est beaucoup plus rapide : son utilisation est bien plus agréable.
Connexion par double authentification : automatique
En version 26, WINDEV, WEBDEV et WINDEV Mobile permettent de mettre en place une connexion par double authentification.
Le Groupware Utilisateur (GPU, livré en standard) offre maintenant la possibilité de gérer la double authentification à travers une application standard (à choisir entre Google Authenticator, Microsoft Authenticator ou autre).
Cette application, à télécharger sur un mobile, renvoie à la demande un code personnel (valable 30 secondes) à saisir lors du login (protocole TOTP).
L'administrateur du GPU peut rendre obligatoire la double authentification.
L'administrateur du GPU peut également débrancher ponctuellement la double authentification d'un utilisateur (cas de la perte du téléphone par exemple).
La coche "faire confiance à cet appareil" est proposée. Elle permet, après avoir une première fois utilisé la double authentification, de repasser en mode simple authentification pour faciliter les connexions depuis cet appareil.
Cette coche "faire confiance à cet appareil" est gérée automatiquement.
Administration unifiée des utilisateurs (MBAAS)
Historiquement, le Groupware Utilisateur (GPU) de WINDEV permet d'accéder directement à la Base de Données du Groupware Utilisateur. Ce mode historique est conservé.
En version 26, la méthode d'accès par technologie MBAAS (via Webservice) au GPU peut être utilisée par vos applications WINDEV, vos sites WEBDEV et vos applis WINDEV Mobile.
En MBAAS, l'accès aux données s'effectue par l'intermédiaire d'un Webservice. Cet accès ne demande pas d'ouverture de port particulier.
L'administration du Groupware Utilisateur peut alors s'effectuer à travers un site Web livré.
Si vous l'y autorisez, l'utilisateur final pourra même se connecter sur ce site pour gérer lui-même son profil : changer son mot de passe....
Volet "Git" dans le ruban de l'éditeur
Afin de faciliter les manipulations avec Git, un ruban proposant les commandes Git les plus courantes est présent :
  • commit
  • pull
  • push
  • merge
  • ...

Projet (WDP) au format texte
La liste des éléments d'un projet est maintenant stockée au format texte afin de faciliter les "merge" de projet dans Git.
Copie de partie d'écran du PC
L'éditeur d'images propose une fonctionnalité pratique de copie d'écran partielle. Il devient possible d'effectuer une copie d'écran sur le PC, en sélectionnant (lasso rectangulaire) la zone à copier.
Cette zone peut ensuite être éditée directement dans l'éditeur d'images.
WDTRAD : chargement des documents accéléré
Le chargement des documents dans WDTRAD est accéléré de manière significative.
Finie la pause-café au chargement des gros documents !
WDTRAD : multisélection
Il devient possible d'effectuer des opérations en bloc grâce à la multisélection. Cela permet par exemple de supprimer rapidement de nombreuses entrées du dictionnaire lors d'un changement de terme.
La recherche évolue également.
WDINT espagnol
En version 26, il devient possible de sélectionner l'Espagnol comme langue source de traduction du framework.
GDS : vue arborescente des composants internes
En version 26, la fenêtre de mise à jour visualise de manière arborescente les composants internes.
GDS : amélioration UI de l'historique de branche
L'historique des éléments d'une branche est consultable depuis la branche, sans avoir besoin de le consulter depuis le tronc.
GDS : déclenchement automatique de plan d'actions en réintégration (CI/CD)
Lors de la réintégration d'un ou plusieurs éléments, un ou des plans d'actions peuvent se déclencher automatiquement.
Par exemple :
  • déclencher des tests automatiques
  • mettre à jour les projets qui partagent ces éléments
  • générer des exécutables
  • lancer des installations
  • ...
Cette nouveauté permet la gestion facile de méthodologies d'Intégration Continue et de Livraison Continue (Continuous Integration & Continuous Delivery).
Fil d'ariane de navigation
Un développeur effectue souvent des plongées dans son code : les suites de F2 sont courantes !
En version 26, un fil d'Ariane de navigation dans le code fait son apparition.
Ce fil d'Ariane permet de visualiser la structure du code et de remonter directement au niveau souhaité.

Coloration light : 3 couleurs au lieu de 36 nuances
L'éditeur de code propose un paramétrage très fin de la coloration syntaxique.
Pour les développeurs qui préfèrent une vision plus synthétique de leur code, un nouveau mode de coloration, plus simple, est ajouté.
De nombreuses nuances de couleurs ne sont plus utilisées.
Le code est plus facile à lire.
Déplacement avec les touches CTRL + FLèche
Les déplacements avec CTRL+Flèche deviennent plus intuitifs :
  • CTRL + FLECHE DROITE : début du mot suivant
  • CTRL + FLECHE GAUCHE : début du mot précédent
  • CTRL + MAJ + FLECHE DROITE : sélection jusqu'à la fin du mot suivant
  • CTRL + MAJ + FLECHE GAUCHE : sélection jusqu'au début du mot précédent.

Débogueur : watch de variable en temps réel
En version 26, le débogueur affiche systématiquement en fin de ligne la valeur des variables contenues dans la ligne.
Des centaines de manipulations évitées chaque jour ?
Débogueur distant : sélection d'un EXE ou d'un service lancé plusieurs fois
Lors d'un débogage à distance (avec WDDebug, livré en standard), il faut attacher le débogueur au process à déboguer.
Lorsqu'un même EXE ou un même service est lancé plusieurs fois sur la machine distante, la liste de sélection détaille maintenant la ligne de commande (qui est souvent unique par process) de chacune des occurrences, ce qui permet d'identifier chaque processus.
Un environnement devops intégré
WINDEV, WEBDEV et WINDEV Mobile en version 26 forment un environnement DevOps toujours plus intégré.
Vous disposez de l'ensemble des fonctionnalités nécessaires à la mise en œuvre de la démarche DevOps : la fin de l'éparpillement des outils hétérogènes.
Vous disposez de tous les outils intégrés pour gérer la méthodologie DevOps : gestion du cycle de vie, tests, intégration continue, déploiement, livraison continue, exploitation, retours clients,...
La version 26 offre des nouveautés intéressantes concernant Docker, sur le robot (Watchdog), ...
Editeur d'états : amélioration du rendu des états gantt
La représentation des états Gantt est revue et améliorée : les libellés des tâches et les récipiendaires sont répétés en première colonne de chaque tâche, le nombre de jours de chaque tâche est affiché,...
La mise en page et la lisibilité sont favorisées.
Vos états Gantt vont déchirer !
Editeur d'états : nouveau champ jauge
Dans les états, les jauges sont souvent utilisées pour représenter des données, à la place de barres d'histogrammes par exemple.
En version 26, l'éditeur d'états gère les champs de type "Jauge" : jauge linéaire et jauge circulaire.
Les glocales : des variables globales, mais que dans leur champ
Les variables Glocales sont des variables globales, mais avec une portée limitée au champ dans lequel elles ont été définies : des variables à la fois Globales et LoCales !
Farfelu ?
Non !
Lors de la copie d'un champ dans une autre fenêtre, il n'y a plus de risque d'oublier ces variables, puisqu'elles sont dans le champ!
Une variable Glocale est encapsulée dans son champ.
Cette variable est accessible depuis tous les événements du champ : il n'est plus nécessaire de définir cette variable globale dans la fenêtre.
Le code est en général plus clair.

Les glocales : procédures et propriétés glocales
Il est également possible de définir des procédures locales et des propriétés locales au champ.
Tout est ainsi encapsulé dans le champ.
Les glocales : surcharger les fonctions et les propriétés du langage
Il faut savoir qu'en nommant une de vos procédures ou une de vos propriétés du même nom qu'une fonction WLangage, c'est votre procédure ou votre propriété qui sera appelée à la place de la fonction du WLangage.
Vous surchargez ainsi des fonctions et des propriétés du WLangage : vous pouvez rajouter un test dans la fonction par exemple.
Par exemple : il peut être intéressant de surcharger la fonction TableAjoute pour formater les données (transformer une date de naissance en âge par exemple) avant de l'ajouter dans la table.
Les glocales : dérivation des champs natifs
En utilisant les 3 précédentes nouveautés de la version 26, il devient très facile de dériver les champs natifs de WINDEV, WEBDEV et WINDEV Mobile.
Champ courant : This
Le mot-clé This permet d'accéder au champ courant.
Cela permet d'écrire plus facilement un code générique.
Callback : détection de prototype incorrect dès la compilation
En version 26, les appels de fonction peuvent prendre une Callback (fonction de rappel) en paramètre.
Cette Callback attend un certain nombre de paramètres, d'un certain type.
En cas d'erreur dans ces paramètres, une erreur de compilation est générée.
Gmail, office 365: se connecter en double Authentification (IMAP, SMTP)
De plus en plus de serveurs d'emails utilisent la double authentification : par exemple Gmail.
En version 26, les fonctions email d'accès aux serveurs IMAP et SMTP supportent la double authentification.
Au moment de l'ouverture de la connexion au serveur, par sécurité (c'est le but !), l'utilisateur devra saisir son code de double authentification.
Mettre en place une double authentification (directive européenne DSP2)
Rappel : la fonctionnalité standard du Groupware Utilisateur permet de mettre en place une double authentification dans vos applications de manière automatique.
Si vous désirez gérer vous-même une double authentification dans vos applications ou vos sites, 3 nouvelles fonctions WLangage font leur apparition :
DoubleAuthGénèreCléTOTP génère la clé secrète passée à l'application d'authentification tiers qui est sur le téléphone , DoubleAuthGénèreLien génère le QRCode qui va être scanné par l'application d'authentification tiers, DoubleAuthVérifieCode vérifie que le code est correct .
Tableaux, opérations ensemblistes : Union, intersection
En version 26, le WLangage propose des fonctions ensemblistes sur les variables de type tableau :
Expression régulière en Unicode
En version 26, les fonctions WLangage de manipulation des expressions régulières fonctionnent également en UNICODE : chinois, japonais, russe, arabe, hébreu....
Fonction remplace : une grille de remplacement
La fonction WLangage Remplace devient plus puissante.
Un ensemble de caractères à remplacer peut être contenu dans un tableau (une grille).
Un deuxième tableau comprendra les caractères de remplacement.
Cela évite d'effectuer des appels successifs, de parcourir la chaîne plusieurs fois.
Ecrire dans un fichier texte à l'envers : fInsèreTexteaudébut
Vous désirez écrire des informations dans un fichier de LOG avec les informations récentes au début ?
La nouvelle fonction WLangage fInsèreTexteAuDébut est votre amie!
Au lieu d'ajouter les données à la fin du fichier, cette fonction les ajoute au début de fichier.
Image vectorielle SVG : modifier l'image par programmation
En version 26, il devient possible de modifier le contenu d'une image au format SVG par programmation.
Par exemple, remplacer une couleur, ajouter ou supprimer des objets, ajouter ou modifier du texte,...

Tokens oAuth avec durée de validité : maintenez-les en vie !
Un token oAuth peut avoir une durée de validité définie par son auteur : quelques minutes par exemple.
Lorsque ce token atteint sa limite, il ne peut plus être utilisé. Si l'application en a besoin après cette limite, elle doit alors effectuer une nouvelle authentification.
Pour ne pas avoir à redemander une authentification, il peut être pratique de maintenir le token actif au-delà de sa durée de validité.
C'est maintenant possible avec la fonction WLangage AuthRenouvelleToken.
Nouvelle fonction DateHeureVersChaine
Cette nouvelle fonction WLangage DateHeureVersChaine permet de transformer directement une DateHeure en chaîne.
Fonction trace : vitesse augmentée
Lorsque la fenêtre de trace intégrée à l'éditeur est affichée, la vitesse de la fonction Trace a été multipliée par 3.
ExceptionChangeParamètre avec portée globale
La fonction ExceptionChangeParamètre peut maintenant avoir une portée globale au projet.
Famille de fonctions de compression Zip : 2 nouvelles fonctions
Rappel : la famille de fonctions Zip fonctionne avec toutes les méthodes de compressions, pas seulement avec la méthode Zip !
La famille de fonctions Zip s'enrichit de 2 nouvelles fonctions utiles :
  • zipExtraitRépertoire : extrait uniquement le contenu d'un répertoire donné.
  • zipFiltre : renvoie la liste des extensions supportées par la version utilisée : zip , 7z , rar , cab , wdz , tar , tgz en version 26. Utile en combinaison avec la fonction fSélecteur.
Fonctions Zip : l'utilisateur peut annuler en cours d'extraction
Pour permettre à l'utilisateur final d'annuler un traitement de décompression, la fonction WLangage zipExtraitTout accepte une Callback.
En renvoyant Faux dans cette Callback, le traitement arrête l'extraction.
Zip & Github: support des fichiers du format tar.gz (TGZ) de Github
Les fichiers compressés renvoyés par la commande Git Archive de Git sont d'un type particulier Tar.gz .
Ce format spécifique est supporté en version 26.
Nouveau type polygone
Le nouveau type Polygone fait son apparition dans le WLangage. Ce type est utile par exemple pour effectuer des tracés dans des cartes, images et graphes, ainsi que pour récupérer des zones de texte à l'aide de l'OCR natif.
Ecrivez un livre entier en 1 ligne de WLangage
La nouvelle fonction GénèreLorem permet de générer un texte de type "Lorem ipsum" de la longueur choisie.
Ce type de texte est universellement utilisé en PAO pour matérialiser rapidement un texte au contenu variable.
Ce texte est aléatoire, prononçable, mais n'a pas de sens...
Type Thread : valeur de retour mémorisée
Lors de l'utilisation de plusieurs threads en même temps, la récupération des valeurs de retour demandait une certaine dextérité pour mémoriser les valeurs de retour des différents threads.
En version 26, une variable de type Thread mémorise automatiquement la valeur de retour qui sera renvoyée dans la procédure du thread.
Pour consulter cette valeur, il suffit de lire cette variable, ce qui ne demande plus aucune dextérité !
Sécuriser le comportement des threads
L'accès à un champ depuis un Thread est déconseillé.
Pourquoi ? Si un Thread supprime une ligne d'un champ table par son indice, et que dans le même temps l'utilisateur déclenche l'ajout d'une ligne dans cette table, la suppression du Thread pourrait s'effectuer sur la mauvaise ligne...
Pour éviter ce genre de comportement imprévisible, le nouvel attribut <sécurisé> est disponible.
La procédure du Thread qui possède cet attribut et qui accéderait à un champ (ou, moins visible, qui appellerait elle-même une autre procédure qui accède à un champ), génère une erreur WLangage d'avertissement.
Comparaison sur les buffers
La version 26 permet la comparaison immédiate de parties de buffers.
2 syntaxes sont proposées; exemples :
buf est un Buffer = [0xEF,0xBB,0xBF,0xCF,0x2F]
 
SI buf = [0xEF,0xBB,0xBF,0xCF,0xDD] ALORS
SI buf[3 SUR 5] = [0xBF,0xCF,0x2F] ALORS
Génération de fichier PDF : taille des images
Lors de la génération d'un fichier PDF par programmation, la taille des images incluses dans le fichier est adaptée à la taille de visualisation et d'impression.
Une image de taille initiale énorme sera réduite, et donc la taille du fichier PDF sera également réduite.
Il est toujours possible de conserver la taille originale d'une image, ou de fixer sa définition avec précision.
Recherche d'un ensemble de caractères dans une chaîne
La fonction Position permet de déterminer la position du premier caractère d'un ensemble de caractères qui sont présents dans un tableau.
Cette fonction renvoie maintenant 2 valeurs (tuple) : position dans la chaine et indice du caractère dans le tableau.
Webservice SOAP : appel asynchrone
ASYNCHRONE
L'appel de Webservices SOAP en mode asynchrone est maintenant géré automatiquement.
L'application n'est plus bloquée durant l'appel, en particulier quand le serveur de Webservices ne répond pas !
Webservice rest : envoi asynchrone
En version 26, il devient également possible d'exécuter des requêtes HTTP et HTTPS de manière asynchrone.
HTTPRequête : récupération des données et en-tetes reçues
En version 26, il devient possible de visualiser et analyser le détail des données et en-têtes reçus par un appel à la fonction httpRequête .
Cela facilite les opérations de débogage pointu.
La Callback fournie dans la variable httpRequête pour la trace est appelée avec 2 nouvelles constantes : httpTraceEnTêteReçue et httpTraceDonnéeReçue .
HTTPRequête : support de la norme HTTP2
La norme HTTP2 améliore la rapidité et la sécurité de la navigation.
En version 26, la norme HTTP2 est supportée.
XML
Coloration XML dans les chaînes multilignes
Sous l'éditeur de code, une chaine multiligne peut contenir du code XML.
En version 26, il est possible de demander la coloration syntaxique de ce code (bouton droit).
Notez que cette possibilité existait déjà pour SQL, HTML et le WLangage.


sCodeXML est une chaîne = [
   <Synthese>
       <STD_Action_Total>
           <Semaine ValeurUnique="245321"/>
           <Mois ValeurUnique="867234"/>
           <Jour ValeurUnique="35627"/>
       </STD_Action_Total>
       <STD_Utilisateur_Actif>
           <Semaine ValeurUnique="2453"/>
           <Mois ValeurUnique="2387"/>
           <Jour Valeurswe="[1705,2121,2001,2083]"/>
       </STD_Utilisateur_Actif>
   </Synthese>
]
POO
Callback : passer une méthode en paramètre
Une fonction peut prendre en paramètre une Callback.
En version 26, il devient possible de passer une méthode d'un objet pour ce paramètre de type Callback.
L'instance de l'objet dont on a passé la méthode en paramètre sera utilisée.
Opérateur d'égalité
L'opérateur d'égalité fait son apparition en POO.
Cet opérateur permet le code de type si objet1=objet2
Il permet également la recherche dans un tableau d'objets (fonction TableauCherche).
Opérateur de comparaison
Les opérateurs de comparaison < et > font leur apparition en POO.
Ces opérateurs permettent le tri facile d'objets (fonction TableauTrie).
IOT
IOT : support du protocole Modbus
Le protocole Modbus permet la communication entre équipements électriques, principalement dans le monde industriel. C'est un protocole libre.
La version 26 offre le support de ce protocole grâce à la nouvelle famille de fonctions WLangage Modbus.
Ces fonctions permettent à des esclaves de lire et écrire : automates, capteurs, afficheurs, machines...
Les protocoles TCP et RTU sont gérés.
IOT : collecte des données par serveur WEBDEV
Certains capteurs envoient des données par protocole HttpRequête .
Pour récupérer ces données, un serveur Web est nécessaire.
Le serveur d'application WEBDEV permet de collecter, stocker et utiliser les données reçues en toute facilité !
La version 26 fournit un exemple documenté de collecte et de traitement de données.
Rappel : l'hébergement est réalisable avec PcsCloud.net, par vos soins ou par tout hébergeur.
Exécution asynchrone de requête HFSQL : l'application n'est pas bloquée par l'attente de la fin de la requête
ASYNCHRONE

En version 26, il devient possible d'exécuter des requêtes HFSQL de manière asynchrone.
L'application est donc "non bloquante", l'utilisateur final peut continuer à utiliser l'application pendant que la requête s'exécute sur le serveur.
Il suffit d'utiliser la nouvelle syntaxe de la fonction WLangage hExecuteRequete permettant de passer en paramètre le nom de la Callback à appeler.
La Callback sera appelée au fur et à mesure de l'arrivée des enregistrements.
Le nombre d'enregistrements passé à la Callback est optimisé en fonction de nombreux paramètres : vitesse du réseau, taille des trames, taille des enregistrements, charge du serveur...
RGPD : savoir par programmation qu'une rubrique est RGPD
Dans l'Editeur d'Analyses, il est possible d'indiquer qu'une rubrique est concernée par le RGPD.
En version 26, il est possible de récupérer cette information par programmation à l'aide de la propriété .RGPD sur la rubrique.
Cela permet des traitements fins sur les données sensibles.
Recherche d'optimisation sur une requête spécifiée
Besoin d'optimiser la vitesse d'une requête particulière ou un ensemble de requêtes?
Besoin de vérifier si une requête donnée est bien optimisée ?
En version 26, il devient possible d'exécuter la fonctionnalité de recherche d'optimisation (vérifier la présence des clés nécessaires) sur une requête spécifiée ou un ensemble de requêtes.
Si un ensemble de requêtes est spécifié, les clés éventuellement créées seront optimisées pour l'ensemble des requêtes.
Pour optimiser la vitesse, il suffit d'utiliser la fonction WLangage HSuggèreClé sur le site de production avec les données réelles. Cette fonction renvoie un compte rendu du même type que celui renvoyé par le moteur HFSQL.
Déclenchement de la recherche d'optimisation : on/off
Il est également possible de déclencher l'optimisation des requêtes qui sont exécutées à partir d'un instant donné (hSuggèreCléDébut), jusqu'à un autre instant (hSuggèreCléFin).
Cela peut être utile pour optimiser les différentes requêtes exécutées lors d'un traitement particulier.
Trigger : accès à la valeur des rubriques avant modification
Il peut être nécessaire de connaitre la valeur des rubriques de l'enregistrement modifié avant sa modification ou sa suppression.
C'est maintenant possible avec la fonction hTriggerEnregistrementAvant.
Nettoyage automatique du répertoire de travail "internal"
Le moteur HFSQL utilise un répertoire de travail nommé INTERNAL.
En version 26, ce répertoire est maintenant régulièrement vidé, vous n'aurez plus à le faire vous-même.
Savoir si une transaction est en cours
En version 26, il est possible de savoir si une transaction est en cours grâce à la fonction WLangage HTransactionEnCours.
Editeur de réplication universelle assistée : UI simplifiée
En version 26, la réplication universelle assistée propose une assistance plus claire et plus intuitive :
  • Plan d'ajout des fichiers
  • Explication des différents choix
  • Ajout de connexions depuis l'éditeur de réplication
  • ...
Webhook de sauvegarde : libellé
Une Webhook permet de déclencher l'exécution d'un traitement à la fin de la sauvegarde.
En cas d'erreur, le libellé de l'erreur est renvoyé en plus du numéro d'erreur.
Divers
La fonction hErreurInfo supporte la constante hErrCode.
3 nouvelles fonctions SQL
3 nouvelles fonctions SQL de manipulation font leur apparition en version 26. L'ordre SQL INTERSECT retourne les enregistrements qui se trouvent dans les 2 requêtes spécifiées (Intersection).
Les trois nouvelles fonctions sont les suivantes :
  • INTERSECT : Retourne les enregistrements qui sont dans les 2 requêtes (intersection).
  • YEAR : Pour être compatible avec le code SQL de MySQL.
  • MONTH : Pour être compatible avec le code SQL de MySQL.
Création automatique des paramètres de requête INSERT
Les requêtes de type INSERT prennent en paramètres les valeurs des rubriques de l'enregistrement à rajouter.
Mais il faut créer un paramètre pour chacune de ces valeurs !
En version 26, l'éditeur de requêtes génère par défaut un paramètre pour chacune des valeurs.
Edition de code SQL
Un identifiant (nom de rubrique, paramètre...) sélectionné dans l'éditeur de requêtes est mis en évidence à tout endroit du code où il est utilisé.
Gestion des mots de passe pour les fichiers de données ouverts indirectement
HFSQL Spare est une forme de sauvegarde quasi temps réel d'un serveur.
HFSQL Spare permet maintenant de vérifier les règles d'intégrité des fichiers reliés qui disposent d'un cryptage sécurisé.
HFSQLDrive : nouveau portail
Le portail de HFSQLDrive propose une UX améliorée :
  • Simplification de la configuration et création d'une base HFSQLDrive
  • Simplification de la configuration et création d'une équipe GDSDrive
  • Ergonomie générale améliorée.
Aspects pratiques
Le Centre de Contrôle HFSQL bénéficie de nombreuses améliorations pratiques.
  • L'affichage des rubriques (des colonnes) peut s'effectuer selon l'ordre alphabétique ou l'ordre logique.
  • Lors de la reconnexion, le Centre de Contrôle HFSQL se repositionne automatiquement sur la dernière table éditée et ouvre les volets précédemment ouverts.
  • Il devient possible d'effectuer une recherche dans la liste des réplications du serveur.
  • Les rubriques de type RGPD sont identifiées.
  • La purge du journal peut s'effectuer depuis le Centre de Contrôle.
Connecteur Natif MS SQL Server Linux : utile pour Docker
Le Connecteur Natif pour MS SQL Server (disponible séparément) est maintenant également disponible pour Linux.
Il permet bien entendu de se connecter de manière native à MS SQL Server.
Il permet également de déployer un site ou un Webservice qui accède à une base MS SQL Server Linux par Docker.
AS/400 : gestion des structures imbriquées définies dans les PCML
Parmi les nombreuses nouveautés du Connecteur Natif AS/400 (disponible séparément), on notera la possibilité d'appels de programmes IBM qui prennent en paramètres des structures imbriquées et des tableaux de structures.
Découvrez toutes les nouveautés du Connecteur Natif AS/400 sur le site PCSOFT.FR.
Chorus pro, pour facturer l'État Français : nouvelles API
La France a rendu obligatoire la facturation électronique pour facturer les services de l' état.
Pour le dépôt et le suivi des factures, la France a mis en place le système Chorus Pro. C'est l'outil de gestion des dépenses et des recettes non fiscales des services de l'État français.
Toutes les sociétés doivent utiliser Chorus Pro pour transmettre leurs factures aux services de l'état français.
La version 26 prend en compte les dernières modifications des API Chorus Pro, et facilite l'automatisation du dépôt des factures.
DMP : le Dossier Médical (France)
Dans le domaine médical, la France propose le DMP.
Le Dossier Médical Partagé (DMP) est un carnet de santé numérique qui conserve et sécurise les informations de santé d'un individu : traitements, résultats d'examens, allergies...
Il permet de partager ces informations avec les professionnels de santé.
En version 26, il devient possible d'accéder facilement aux API du dossier médical.
Cet accès s'effectue par Webservice.
Le DMP est un document confidentiel. Notez que vous devez disposer d'un agrément pour que votre logiciel puisse être considéré comme DMP-Compatible.
Générer la clé sous forme d'une suite de mots
La clé privée d'un portefeuille doit être conservée au secret.
Cette clé privée est composée de 256 bits.
Pour la manipuler plus facilement, les 2 fonctions WLangage BufferVersPhrase et PhraseVersBuffer permettent de transformer cette clé numérique en une suite de mots.
Ces mots sont issus des dictionnaires standards (Bip39), qui sont fournis en langue française, anglaise et espagnole.
Il est possible d'utiliser ses propres dictionnaires.
Etiquetage des versions
Les données collectées par la télémétrie sont regroupées par numéro de version du logiciel.
Lorsque de nombreuses versions ont été déployées, il peut être difficile de s'y retrouver.
En version 26, il devient possible d'attacher un libellé descriptif à un numéro de version.

Gestion croisée des écrans HD & 4k
Avec les anciennes versions de WINDEV, un test automatique devait être rejoué sur un écran de même définition que celui d'enregistrement des tests.
En version 26, un test peut être rejoué sur un écran de définition différente, par exemple un test enregistré sur un écran 4K peut être rejoué sur un écran 1.920 x 1.200.
Surveillance d'application sans partage réseau
En version 26, il n'est plus nécessaire de définir un partage réseau entre la machine qui héberge le robot et les machines sur lesquelles les applications à surveiller s'exécutent.
Cela simplifie la mise en place du robot.
Fréquence des tests
Il devient possible de créer des profils de fréquence de tests.
Changer la fréquence de 150 tests s'effectue maintenant en une seule opération !
Gestion d'un profil utilisateur
Le profil utilisateur permet de spécifier les moyens de communication que le robot doit utiliser pour transmettre le compte rendu des tests.
Le profil utilisateur permet également de sélectionner les tests qui seront affichés par défaut dans l'application.
Administrateur réseau : sélection des messages d'alerte à recevoir
Un administrateur réseau peut maintenant sélectionner les types de messages qu'il désire recevoir. Cela lui évite de recevoir des messages de faible importance par exemple.
Gestion d'un Webhook : exécuter automatiquement une action selon le résultat du test
Un Webhook peut être associé à chaque test.
Ce Webhook permet de lancer un traitement quelconque à chaque changement d'état d'un test.
Lorsqu'un défaut grave est détecté sur un site en exploitation, cela permet par exemple d'afficher automatiquement une page "Maintenance en cours" sur ce site ou de basculer automatiquement sur un serveur de secours.
Exemple livré : site Web de disponibilité de vos services
Un exemple de site d'état des services (de type Staytus) est livré. Cet exemple peut être associé au robot, et afficher l'état des différents services qui sont gérés dans le robot de surveillance : messagerie, téléphonie IP, site de vente,...


MongoDB
Pour les bases MongoDB, la nouvelle fonction WLangage MongoGridFSEnvoieFichier renvoie un 2 valeurs (tuple) : un booléen et une variable de type MongoGridFSInfoFichier qui permet de récupérer directement l'identifiant du fichier ajouté.
Version minimum requise
  • Version 26
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire