PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2024 → Rafraîchir les données d'une ZR AJAX sans recharger la page
Rafraîchir les données d'une ZR AJAX sans recharger la page
Débuté par Sosthène, 15 sep. 2021 18:57 - 5 réponses
Membre enregistré
5 messages
Posté le 15 septembre 2021 - 18:57
Bonjour à tous,
En effet j'ai une ZR qui liste les tâche d'un personnel : les tâches qu'il a lui-même créée comme les tâches qu'un autre utilisateur lui a créées.
La ZR est liée à une requête et en accès direct.




L'OBJECTIF est de :
Maintenir la liste des tâches du personnel à jour de sorte que quand il crée une tâche, la tâche apparaisse dans la liste sans recharger la page. Ou quand son supérieur lui crée une tâche ou valide ses tâches depuis son compte, que la tâche apparaisse ou soit mise à jour dans la liste des tâches du personnel sans recharger la page.

LE PROBLÈME est que :
J'ai créé un Timer dans le code de chargement de la page (onload)


et quand s'exécute la procédure chargée de vérifier les données (procédure lancée par le Timer chaque 2s) et qu'il y a de nouvelles tâches, j'exécute le code d'Initialisation de la ZR pour actualiser les données; et là, la ZR disparaît puis réapparaît (la page ne se recharge pas mais la ZR disparaît puis réapparaît) et affiche les nouvelles données.

Je me suis penché vers la fonction AJAXExécuteAsynchrone mais je n'ai pas eu le résultat, je crois que je ne sais pas bien utiliser la fonction.

Cet effet de disparition et réapparition est très gênant.
J'ai vraiment besoin de votre aide
Membre enregistré
5 messages
Posté le 15 septembre 2021 - 18:59
Pour faire plus simple, on peut comparer à une application de messagerie
Membre enregistré
125 messages
Popularité : +5 (5 votes)
Posté le 16 septembre 2021 - 07:35
Bonjour Sosthène,

J'utilise effectivement AJAXExécuteAsynchrone() pour les ZR de type menu, et notifications.

Comme toi, ma méthode repose sur un timer ex. : Timer(lnAfficheNotif,20s).

La procédure navigateur lnAfficheNotif() contient l'appel AJAX, typiquement :
AJAXExécuteAsynchrone(ajaxAppelSimple,lsMiseAjourDétection_Notif,lnMiseAjourDétectée_Notif)

La procédure serveur lsMiseAjourDétection_Notif() contrôle si les données ont changé.

La procédure navigateur lnMiseAjourDétectée_Notif() déclenche la mise à jour via un ExécuteTraitement(BTN_ZR_Init,trtClic).

Le bouton BTN_ZR_Init qui est en ajax, exécute la procédure serveur de chargement de ma ZR.
J'ai des projets en WB23 et WB26. Pas d'effet gênant.

Bon dév !
Alain
Membre enregistré
5 messages
Posté le 16 septembre 2021 - 11:20
Bonjour Multipass,

Stp quel est le mode de remplissage de ta ZR ?

Et je peux avoir une idée du traitement que tu fais dans la procédure serveur de chargement de ta ZR :

Tu fais une boucle sur la source de données pour remplir la ZR ou tu fais des <ZR>.ModifieLigne ou autre ?

Merci de consacrer du temps à ce sujet.
Membre enregistré
125 messages
Popularité : +5 (5 votes)
Posté le 17 septembre 2021 - 02:24
Bonjour Sosthène,

J'ai testé et utilisé plusieurs méthodes de chargement, dont :

- Ex. ZR Notifications : Remplissage par variable (onglet contenu) à partir d'un tableau de structure. Du coup la procédure de chargement charge et MAJ la ZR via un simple ZoneRépétéeAffiche().




- Ex. ZR Menu : Remplissage par programmation avec un ZoneRépétéeSupprimeTout() puis des ZoneRépétéeAjouteLigne().




A noter que dans les 2 cas, le mode de fonctionnement de la ZR est "classique" et "sans limite".

A+
Membre enregistré
5 messages
Posté le 17 septembre 2021 - 20:21
D'accord. Je vais peut être me pencher sur l'utilisation de structure pour faire comme toi.
Merci