IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Lecture périodique d'un fichier XML [WD20]


Sujet :

WinDev

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Lecture périodique d'un fichier XML
    Bonjour à tous,

    Débutant dans le monde de WinDev, je voudrais commencer par un petit programme simple.

    1.Ouverture d'un fichier XML.
    2.Affichage des données dans un tableau.
    3.Rafraichissement des données toutes les 5 secondes

    Les deux premières étapes ont été réalisées sans trop de problème.
    Cependant, je n'arrive pas rafraichir mon tableau lorsque je modifie mon fichier XML.

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Déclarations Globales
    Inputs est un xmlDocument <description="Inputs_BISG"> = XMLOuvre( "C:\Users\" + RéseauUtilisateur() + "\Desktop\Inputs_BISG.xml" ,depuisFichier)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Fin d'initialisation de ma fenêtre FEN_Test
    Timer(MultitâcheRepeint(FEN_Test),5000)
    A noter que je n'ai rien mis dans la partie "Demande de mise à jour de l'affichage". Et c'est surement une erreur.

    Je ne cherche pas à ce que l'on me fasse le code.
    Je voudrais juste un peu d'aide pour débloquer la situation.
    Je change la valeur du paramètre "Value" (0 à 1 ; 1 à 0)

    Pour finir voici le contenu du fichier XML
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <Variables>
    	<Input id="1">
    		<Name>ADX_1000VU_MON_NEW</Name>
    		<Value>1</Value>
    		<Type>Boolean</Type>
    	</Input>
    		<Input id="2">
    		<Name>ADX_1000VU_MON_OLD</Name>
    		<Value>1</Value>
    		<Type>Boolean</Type>
    	</Input>
    		<Input id="3">
    		<Name>ADX_1100VU_MON_NEW</Name>
    		<Value>1</Value>
    		<Type>Boolean</Type>
    	</Input>
    		<Input id="4">
    		<Name>ADX_1100VU_MON_OLD</Name>
    		<Value>0</Value>
    		<Type>Boolean</Type>
    	</Input>
    		<Input id="5">
    		<Name>ADX_1200VU_MON_NEW</Name>
    		<Value>1</Value>
    		<Type>Boolean</Type>
    	</Input>
    		<Input id="6">
    		<Name>ADX_1200VU_MON_OLD</Name>
    		<Value>0</Value>
    		<Type>Boolean</Type>
    	</Input>
    </Variables>
    Images attachées Images attachées  

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Je n'ai pas regardé ton code ... le seul aspect qui m'intéresse est le côté 'timer'.

    Dans ce que tu as fait, tu exécute fenRepeint() toutes les 5 secondes. Mais il 'repeint' avec les mêmes data. Il n'a aucune raison de réexécuter ta procédure.
    timer(Maprocedure, 5000) devrait faire le job correctement.

    Sinon, les versions récentes de Windev (depuis Windev 19 à peu près) tu as aussi cette possibilité :
    Quand tu as la liste des fonctions (en bas de la fenêtre, ou bien dans l'explorateur de projet), tu fais clic droit sur le nom de la fonction. Ca doit être possible de faire clic droit sur le nom de la fonction à différents endroits.
    Ca affiche les propriétés de la fonction. Par défaut, la fonction est exécutée quand le code le demande (via un bouton... en général) mais on peut modifier cela, en disant d'exécuter la fonction en boucle par exemple. On pas par des clics sur des options, au lieu de passer par une ligne de code.

    Pour compléter l'explication, à quoi sert la fonction fenRepeint(). Imaginons que tu as un traitement très lourd, avec plein de calculs, pendant 5 minutes par exemple. Avec de temps en temps des affichages sur l'écran. Windows est théoriquement multitâche, mais dans les faits, Windows va consacrer toutes ses ressources à faire les calculs, et il ne va pas mettre à jour l'affichage. FenRepeint() sert à gérer ces cas là.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci pour ton retour.
    Effectivement, j'ai trouvé comment modifier l'exécution d'une procédure !

    J'ai par conséquent modifié mon code en le rendant plus simple.
    J'ai abandonné l'idée de la fonction FenRepeint(). Comme tu l'as bien décrit, sa présence n'est pas nécessaire dans mon cas.

    Nom : 2018-03-01_004950.jpg
Affichages : 295
Taille : 165,1 Ko
    J'ai donc créer une procédure XMLOuvre() avec une période d'appel d'1s pour mon test.
    En ayant exécuté le programme et modifié le fichier xml en live, l'IHM ne vit toujours pas
    Je continue mon investigation.

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Ici, tu as choisi l'option " immédiatement au moment de l'appel ".

    Il te faut donc un bouton par exemple, pour lancer une première fois la procédure, en cliquant sur ce bouton. Ensuite, la procédure se répétera indéfiniment.

    Fais un test avec une procédure toute simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure test_timer ()
    trace (heuresys())
    renvoyer 1
    Edit :

    Sinon, en 2ème lecture, je vois que dans tes paramétrages, tu as choisi : chaque appelle relance une 2nde fois la procédure. Ce n'est pas très clair, mais je pense qu'avec ce paramétrage, ta procédure va s'exécuter 2 fois, pas indéfiniment. Il faut choisir l'autre option.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Dans "Quand", je mettrais la 2nd option.
    Au sujet de la création de la fonction XMLOuvre, je mettrais un autre nom car c'est déjà une fonction WLanguage, mais un nom de fonction assez parlant comme RemplirTable

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour à vous et merci pour vos retours,

    J'avance un petit peu.

    J'ai effectué le test suivant avec les conseils de tbc92.

    1. Pour l'instant on oublie la lecture périodique via une procédure etc
    2. J'ai affiché la valeur de ma première donnée dans une fenêtre
    3. Résultat : Lorsque je modifie la valeur dans le fichier XML la valeur est modifiée automatiquement. Contrairement à l'affichage dans le tableau...

    Nom : 2018-03-01_201509.jpg
Affichages : 267
Taille : 200,3 Ko

    4. J'ai ajouté la fonction tableaffiche() mais toujours pas de valeur mise à jour

    Nom : 2018-03-01_200813.jpg
Affichages : 257
Taille : 83,3 Ko

    Suis-je passé à côté de quelque chose d'évident ?

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Regarde la documentation...
    C'est un peu comme fenRepeint. fenRepeint() ne modifie pas le contenue de la fenêtre, il s'assure que l'affichage est bien à jour (...
    TableAffiche, ça y ressemble. TableAffiche, ça ne modifie pas le contenue de la table, ça positionne le bandeau à l'endroit demandé.

    Donc, dans ton code, je ne vois rien qui modifie le contenu de la table.

    As-tu des connaissances en développement en dehors de windev ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  8. #8
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 807
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 807
    Points : 5 263
    Points
    5 263
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Un petit rappel sur l'ordre d'initialisation
    Déclarations globales de la fenetre
    Initialisation des modèles de champs
    Initialisation des champs
    Initialisation du modèle de la fenêtre
    Initialisation de la fenêtre

    Dans ton cas, outre la remarque de tbc92, ton TableAffiche ne sert à rien à l'endroit où il est placé dans la mesure où il est appelé avant l'initialisation de ton champ table. Par ailleurs, à priori, ton champ table est un champ mémoire, la position (taCourantBandeau) n'a aucun effet. De même, ton Trace affiche les valeurs avant l'initialisation de ton champ. Pour peu qu'un champ soit initialisé avant l'initialisation de ton champ table et qu'il modifie les valeurs ...
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Pour répondre à ta question tbc oui...
    Il y a quelques années j'ai développé en C mais ma connaissance est surtout basée sur le "langage" Matlab...

    Oui, j'ai fait des choses absurdes mais je compte persévérer pour progresser.

    J'ai enfin réussi à afficher des données et à les modifier en temps réel via un fichier XML.
    J'ai simplement créé la procédure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PROCEDURE Update_Data()
    DATA_File = XMLOuvre("C:\Users\" + RéseauUtilisateur() + "\Desktop\Inputs_BISG.xml",depuisFichier)
    TableAffiche(TABLE_DATA,taCourantBandeau)
    Désolé de vous avoir un peu agacés
    Et surtout merci pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XPATH 1.0] Temps de lecture d'un "gros" fichier XML
    Par Ikki_2504 dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 14/01/2011, 18h27
  2. [XML] Lecture d'assez gros fichiers XML
    Par jeronimo83 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 19/02/2010, 18h26
  3. Lecture rapide d'un fichier XML
    Par GriffinK dans le forum C#
    Réponses: 10
    Dernier message: 27/03/2009, 01h24
  4. Lecture/Ecriture d'un fichier XML
    Par andlio dans le forum Windows
    Réponses: 2
    Dernier message: 18/01/2007, 20h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo