DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / Editeurs / Editeur de fenêtres et de pages
  • Présentation
  • Comment le faire ?
  • Activer ou désactiver la persistance d'un champ dans une fenêtre
  • Fonctionnement
  • Analyse du fonctionnement
  • Paramétrage
  • Fonctionnement avancé
  • Mémorisation des variables globales d'un projet
  • Mise en place
  • Optimisation
  • Mémorisation des variables globales d'un projet
  • Optimisation
  • Gestion de la persistance des données avec les fonctions du WLangage
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Présentation
La persistance des données permet de conserver la valeur saisie par l'utilisateur.
Quand l'utilisateur saisit une valeur dans un champ d'une fenêtre, cette valeur sera de nouveau présente dans le champ lors de la prochaine ouverture de la fenêtre. Cette fonctionnalité sera appréciée dans le cas d'une saisie de login, de recherches, de paramètres quasi-constants, de choix par défaut, ...
Cette fonctionnalité est disponible sur tous les champs permettant une saisie. Cette fonctionnalité est également disponible pour une sélection de valeurs dans un champ Sélecteur ou Interrupteur.
WEBDEV - Code ServeurWindowsLinux La persistance des données est réalisée uniquement par programmation. Les informations sont sauvegardées dans un cookie navigateur.
Comment le faire ?

Activer ou désactiver la persistance d'un champ dans une fenêtre

Pour activer ou désactiver la persistance d'un champ dans une fenêtre :
  1. Affichez la fenêtre de description du champ.
  2. Dans l'onglet "Détail", cochez (ou décochez) l'option "Mémoriser la valeur".
Par défaut, les valeurs des champs "persistants" sont stockées dans la base de registre (ou le fichier équivalent sur la plateforme d'exécution). Par exemple :
  • AndroidWidget Android Sous Android, les valeurs persistantes sont sauvegardées dans les préférences partagées (Shared Preferences) de l'application.
  • iPhone/iPad Sous iOS, les valeurs persistantes sont sauvegardées dans les paramètres de l'application ("NSUserDefault").
WINDEV Remarque : Ce mécanisme peut être mis en place par l'utilisateur lui-même grâce à l'option "Mémoriser" du menu contextuel des champs (FAA).
Fonctionnement

Analyse du fonctionnement

Lorsque le mécanisme de persistance d'un champ est activé :
  • Le contenu du champ est mémorisé lors de la fermeture de l'application.
    WINDEV Ces informations sont stockées par défaut dans la base de registre dans la clé "HKEY_CURRENT_USER\Software\<Société>\<Nom du projet>". Cette clé peut être connue par programmation grâce à la fonction ProjetInfo.
  • Lors du lancement suivant de l'application, le mécanisme de persistance restaure les champs mémorisés dans leur état précédent. Cette restauration des valeurs est effectuée entre le code de déclaration de la fenêtre et le code d'initialisation de la fenêtre.
L'affectation de la valeur d'un champ se fait donc suivant l'ordre d'affectation suivant :
  1. Valeur définie dans l'onglet "Contenu" de la description du champ.
  2. Exécution du code d'initialisation du champ. Ce code peut initialiser et modifier la valeur initiale du champ.
  3. Valeur persistante (enregistrée dans la base de registre, dans un fichier de paramètre, ...). Si une valeur persistante a été définie pour le champ, c'est cette valeur qui est affectée au champ.
  4. Exécution du code d'initialisation de la fenêtre. Ce code peut initialiser et modifier la valeur affectée au champ.
De plus, afin de garder la compatibilité avec le fonctionnement existant de l'application :
  • les traitements de modification des champs affectés "automatiquement" sont exécutés.
  • les codes de sélection des champs Liste et Combo sont exécutés.
Si le traitement de modification ou de sélection du champ ne doit pas être exécuté, il est possible de conditionner son exécution de la façon suivante :
// Code de sélection d'une ligne d'un champ Combo
// ou code de modification d'un champ
SI OUVERTURE ALORS RETOUR
Dans ce cas, la suite du traitement n'est pas exécutée si l'appel de ce code est provoqué dès l'ouverture de la fenêtre, lors de la restauration des valeurs mémorisées.

Paramétrage

Les informations de persistance sont stockées par défaut dans la base de registre (ou le fichier équivalent sur la plateforme d'exécution). Il est bien entendu possible de modifier la méthode et la localisation de ces informations grâce à la fonction InitParamètre.
Cette fonction accepte deux paramètres :
  • La méthode de stockage des données :
    • Document au format XML (non disponible en version Mobile).
    • Fichier de configuration (.ini).
    • Base de registre.
    • Chaîne au format XML (par exemple pour être envoyée par Socket ou protocole HTTP).
  • La localisation correspondant à la méthode spécifiée dans le premier paramètre (chemin du document XML, chemin dans la base de registre ou chemin du fichier de configuration).
Exemple :
// Utilisation d'un fichier de configuration (.ini)
InitParamètre(paramIni, "C:\temp\MaConfig.ini")
La lecture et la sauvegarde des données de persistance restent identiques : seule la méthode de stockage (et la localisation) est modifiée.
Fonctionnement avancé

Mémorisation des variables globales d'un projet

Le mécanisme de persistance permet non seulement de mémoriser des champs, mais également des variables ou tout autre information nécessaire à une application.
Il devient alors inutile de gérer "à la main" un fichier de configuration pour mémoriser le contenu des variables globales d'un projet (chemin des données, date de dernière connexion, nom de l'utilisateur, mémorisation du mot de passe, ...).

Mise en place

Il est nécessaire d'utiliser les fonctions ChargeParamètre et SauveParamètre.
La fonction ChargeParamètre accepte deux paramètres :
  • Le nom du paramètre à restaurer (nom logique), par exemple le nom de la variable correspondante.
  • La valeur par défaut du paramètre (si ce paramètre n'a jamais été sauvegardé ou utilisé).
// Chargement d'un paramètre de type entier
gnNbLancement = ChargeParamètre(CS_NB_LANCEMENT)
// Chargement d'un paramètre de type date
gdDateDernierLancement = ChargeParamètre(CS_DATE_LANCEMENT)
// Chargement d'un paramètre de type heure
ghHeureDernierLancement = ChargeParamètre(CS_HEURE_LANCEMENT)
Il n'est pas nécessaire de gérer le type de paramètre : le type du paramètre est entièrement géré par le mécanisme de persistance (inutile, par exemple, d'utiliser la fonction Val pour récupérer une valeur numérique).
La fonction SauveParamètre accepte aussi deux paramètres :
  • Le nom du paramètre à sauvegarder (nom logique). Ce nom est utilisé dans la fonction ChargeParamètre.
  • La valeur du paramètre.
// Mémorisation d'un paramètre de type entier
SauveParamètre(CS_NB_LANCEMENT, gnNbLancement)
// Mémorisation d'un paramètre de type date
SauveParamètre(CS_DATE_LANCEMENT, gdDateDernierLancement)
// Mémorisation d'un paramètre de type heure
SauveParamètre(CS_HEURE_LANCEMENT, ghHeureDernierLancement)
Les informations stockées par la fonction SauveParamètre sont stockées en utilisant la méthode et la localisation spécifiées par la fonction InitParamètre (par défaut, ces informations sont donc stockées dans la base de registre).
Note : Bien entendu, il est possible d'utiliser plusieurs méthodes et/ou plusieurs fichiers de sauvegarde dans une même application.
Optimisation

Mémorisation des variables globales d'un projet

Une optimisation peut parfois être nécessaire lorsque l'application effectue des traitements longs. En effet, les codes de modification des champs "restaurés" sont exécutés. Si un de ces champs contient un code potentiellement long, il peut être intéressant de ne pas exécuter tous les codes de modification pendant la phase de restauration des champs.
Exemple : Cas d'une fenêtre de recherche multi-critères utilisant le mécanisme de persistance
  1. Au premier lancement, aucun champ n'a de valeur mémorisée, le fonctionnement est "classique".
  2. A la fin de l'application, le mécanisme de persistance mémorise les critères de recherche sélectionnés par l'utilisateur.
  3. Au lancement de l'application, les champs mémorisés sont restaurés et les codes de modification des champs sont exécutés.
  4. Si ces codes de modification lancent une exécution de la recherche (cas courant pour un sélecteur), la recherche va être effectuée avec des critères différents pour chaque champ mémorisé ! Cette opération peut alors être très pénalisante selon les recherches réalisées.

Optimisation

Dans ces cas particuliers, il suffit de "désactiver" les traitements potentiellement longs pendant leur restauration automatique. Il est possible d'utiliser la méthode suivante :
  1. Déclaration d'une variable globale de fenêtre de type booléen dans la fenêtre concernée.
    // Code de déclaration de la fenêtre
    GLOBAL
    gbRestaurationEnCours est un booléen
  2. Initialisation de cette variable à "Vrai" dans le code de déclaration de la fenêtre.
    // Code de déclaration de la fenêtre
    gbRestaurationEnCours = Vrai
  3. Ajout d'un test sur cette variable dans les traitements potentiellement longs. Si cette variable est positionnée à la valeur "Vrai", le traitement n'est pas réalisé (restauration en cours des champs par le mécanisme de persistance).
    // Traitement potentiellement long
    SI gbRestaurationEnCours = Vrai ALORS RETOUR
    ...
  4. Affectation de cette variable à "Faux" dès le début du code d'initialisation de la fenêtre pour reprendre le fonctionnement normal de l'application.
    // Code d'initialisation de la fenêtre
    gbRestaurationEnCours = Faux
Gestion de la persistance des données avec les fonctions du WLangage
La persistance des données peut également être gérée par programmation via les fonctions :
ChargeParamètreLit une valeur persistante.
InitParamètreInitialise la gestion des valeurs persistantes.
SauveParamètreSauve une valeur persistante dans la base de registre ou dans un autre fichier spécifié avec la fonction InitParamètre.
SupprimeParamètreSupprime un paramètre ou une série de paramètres sauvés soit avec la fonction SauveParamètre, soit automatiquement grâce à la persistance des données dans les champs.
WINDEV Remarques :
  • Il est possible de sauvegarder automatiquement tous les champs persistants d'une fenêtre grâce à la fonction FAAExécute.
  • La fonction FAADésactive permet de désactiver la persistance des champs.
Liste des exemples associés :
WD Persistance Exemples didactiques (WINDEV) : WD Persistance
[ + ] Cet exemple montre l'utilisation des fonctions InitParamètre, ChargeParamètre, SauveParamètre.
Ces fonctions permettent de configurer la sauvegarde de champs, de variables et de tout autre paramètre.
Cet exemple est décomposé en trois parties :
- La configuration
- La gestion manuelle de variables (Fonctions SauveParamètre et ChargeParamètre)
- L'optimisation
1°) Configuration

La fenêtre de configuration vous permet de modifier l'emplacement de la sauvegarde des paramètres (Base de registre, fichier INI, fichier XML) ainsi que son chemin (clé de registre ou le chemin du fichier).
2°) Gestion Manuelle de variables
La gestion manuelle vous permet de sauvegarder le contenu de variables grâce à la fonction SauveParamètre et de les restaurer grâce à la fonction ChargeParamètre. Chaque paramètre est identifié par un nom. Ces valeurs sont sauvegardées à l'emplacement défini dans la fenêtre de configuration.
3°) L'optimisation
Cette fenêtre vous explique comment optimiser votre code pour éviter les lenteurs dues à la restauration des valeurs sauvegardées. En effet, lors de la restauration de la valeur d'un champ, son code de modification est exécuté. Si vous avez des traitements longs (Requêtes paramétrées ou autres), cette fenêtre vous montre comment accélérer le chargement de la fenêtre.
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 25/05/2022

Signaler une erreur ou faire une suggestion | Aide en ligne locale