PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WEBDEV 2024 → [WB23]Code lorsque l'on quitte une page
[WB23]Code lorsque l'on quitte une page
Started by Pillitteri Jérémy, Mar., 30 2020 2:35 PM - 2 replies
Posted on March, 30 2020 - 2:35 PM
Bonjour,
j'ai développé une gestion de tickets pour du SAV avec, sur une page, une table qui liste l'ensemble des tickets en attente de traitement et sur une autre les informations du ticket sélectionné.

Je souhaiterais que lorsqu'un utilisateur ouvre la page d'un ticket, les autres utilisateurs aient une indication dans la liste que le ticket est consulté par quelqu'un (pour éviter que 2 utilisateurs traitent le même ticket).

J'ai dans ma base de données un fichier TICKET avec une rubrique EnConsultation (booléen) que je passe à vrai lors de l'initialisation de la page du ticket (une personne rentre dans le ticket)
Sur la page du ticket, j'ai mis un bouton pour revenir à la liste qui passe le booléen à faux (plus personne n'est sur le ticket).

Le problème survient si la page n'est pas quittée par le bouton mais soit en fermant l'onglet ou le navigateur soit en affichant une autre page web. Je souhaiterais pouvoir faire passer mon booléen à faux dans ce cas là aussi.

J'ai vu qu'il y avait les sections Déchargement en code navigateur et Fermeture en code serveur mais quand je les teste, rien ne se passe. J'ai testé un info et l'exécutetraitement sur un clic de bouton qui fait un info également mais rien.

Comment je peux faire?

je vous remercie
Registered member
1,623 messages
Popularité : +100 (114 votes)
Posted on March, 31 2020 - 10:23 AM
Hello

Oui c'est un sujet qui revient souvent et a ma connaissance il n'y a pas de solution "directe" pour spécifier au serveur que le navigateur est fermé.
Par contre tu peux utiliser un timer navigateur sur la page des tickets :

Ce timer va envoyer a l'ouverture de la page ET toutes les minutes une requête Ajax asynchrone par exemple au serveur.
Cette requête Ajax aura pour but de mettre a jour une rubrique DateHeure dans ta table des tickets "DerniereConsultation"

Ainsi quand quelqu'un ouvre un ticket :
Mise a jour de DerniereConsultation avec DateHeureSys()
Toutes les minutes mises à jour de DerniereConsultation

Si quelqu'un d'autre se connecte sur ce ticket, lors de l'ouverture il suffit alors de vérifier la valeur de DerniereConsultation, si DateHeureSys - DerniereConsultation < 1minute alors il y a déja quelqu'un dessus.

Si l'utilisateur quitte la page par fermeture de navigateur, le timer ne va plus s'executer et le champ ne sera plus mis a jour.
Lors de la prochaine consultation, avant de mettre a jour DerniereConsultation, DateHeureSys - DerniereConsultation sera > 1minute, le ticket est donc libre de toute modifications.

Du coup, avec cette méthode, la seule "contrainte" si l'utilisateur quitte au bout de 15 secondes, il faudra attendre 45 secondes pour libérer le ticket.

Et lors d'une fermure via le bouton "Retour a la liste des tickets" il suffit de faire DerniereConsultation = "" avant de partir.
Registered member
283 messages
Popularité : +3 (3 votes)
Posted on April, 03 2020 - 1:26 PM
Bonjour,

Peut-être une autre idée utilisée par ces @#!*$&§ de pages de pub :
Créer un événement "mouse-out" sur la totalité de la page. Lorsque la souris sort de la page, exécuter une fonction.

Les pages de pub ouvrent un "info()" qui bloquent la possibilité de fermer l'onglet mais il devrait être possible de démarrer une conversation navigateur/serveur et donc de déterminer quelle action a été faite par le client.

Ce n'est qu'un début d'idée, hein !

Bon dev et A+