PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2024 → awp
awp
Débuté par jean-marie, 06 avr. 2018 16:36 - 3 réponses
Posté le 06 avril 2018 - 16:36
bonjour,

dans un site awp, si la page A appelle la page B et que l'on fait back sur la page B j'ai cru comprendre que tout le code de d'initialisation de la page A se ré-exécute. Ce qui me semble vrai car je le vois dans le debug. Par contre il ne me semble pas que l'affichage se re-exécute.
Exemple :
Dans ma page A j'affiche le panier avec un certain nombre de lignes (les commandes donc) et le total ttc.
Depuis cette page je navigue dans le site, je sélectionne un autre modèle que j'ajoute au panier.
Je fais back pour retourner à mon panier : il n'a pas changé (alors que le code d'init a été réalisé et que je vois dans le centre de controle hfsql que les fichiers ont été mis à jour).

Dans le détail de la page A : "utiliser le mécanisme de synchroisation des pages" est coché.
J'ai pensé mettre du code dans cette partie : il ne s'exécute jamais.

qu'ai je oublié de faire ?
j'ai retourné le problème dans tous les sens : rien à faire
une aide me serait précieuse.

merci beaucoup.
j marie
Membre enregistré
204 messages
Popularité : +5 (5 votes)
Posté le 09 avril 2018 - 06:58
bonjour

Ta question me rappelle qu'il y a quelque chose que je n'arrive pas à comprendre.
Il y a quelques explications sur la synchronisation dans cette page de la doc : https://doc.pcsoft.fr/?1012010

J'y comprends que la vérification de synchronisation "consiste à vérifier si la page affichée sur le navigateur correspond bien au contexte de page présent sur le serveur".

Justement, en AWP, il n'y a pas de contexte sur le serveur.

Pour bien comprendre comment ça marche (ou pas), le mieux est de répliquer le petit programme suivant :

1- créer une nouvelle page vierge, dynamique.
2- y mettre un SAI et un BTN. Le Code du BTN : Clic : SAI +=2
3- Le code de synchronisation : SAI -= 1
4- Faire un GO de la page. Tester la séquence suivante : 2 clics sur le BTN (sai=4). Un Clic sur "Précédent" du navigateur (on revient à sai=2). Enfin, un clic sur BTN. Résultat : Le joli message d'avertissement s'affiche, et la valeur du SAI doit être = à 1
5- Choisir le mode Empêcher le retour sur cette page et comparer... Perso, je ne vois pas de différence.
6- Essayer maintenant les mêmes manipulations en choisissant le mode AWP. Avec l'option "Utiliser le code de synchro" : le sai =4 (le code de synchro ne s'est pas effectué)
7- Choisir le mode Empêcher le retour sur cette page et comparer.... Idem, je ne vois pas de différence

En AWP, chaque page est, à chaque appel, recalculée avec les valeurs d'origine. Si on veut conserver les modifications sur les paramètres, il faut utiliser DeclareContexteAWP etc.
Je ne suis donc pas étonné que le mode AWP ne prenne pas en compte le code de synchro.
Le bouton Retour du navigateur ne déclenche pas d'appel au serveur. C'est le clic sur un autre bouton qui fait un submit au serveur qui déclenche le mécanisme de synchro, en mode dynamique.

Ce que je ne comprends pas, c'est l'absence de différence, en mode dynamique, entre les deux options "utiliser le code de synchro" et "empêcher le retour sur cette page".

Si quelqu'un voit la réponse, merci d'avance !

bon courage
Christophe
Posté le 09 avril 2018 - 10:26
Merci pour ta réponse.
Le support m'a en effet répondu que la touche "back" ne déclenche pas le code de synchronisation pour les pages awp.
ce que je savais déjà.

toutefois :
j'ai construit des pages awp avec des zones répétées "classiques"
- dans le code d'init qui s'exécute lors de l'initialisation ET à chaque retour sur la page (y compris avec la touche "back") je remplit ma zone répétée.
- dans le code de chargement (onload) qui s'exécute également lors de l'initialisation ET à chaque retour sur la page (y compris avec la touche "back") je fais un simple "ajaxexecute" pour récupérer une info sur le serveur (nombre d'articles dans le panier, nombre de préférences etc...) que j'affiche dans le haut de la fenêtre.
Eh bien si je laisse ce "ajaxexecute" la page se rafraichit (y compris la zr), si je ne le fais pas la page ne se rafraichit pas.
D'après ce que j'ai compris ça ne devrait pas être le cas (pas de rafraichissement)
Quelle est l'explication ?

J'ai une autre page awp de même type pour le panier avec une zr classique, dans laquelle je peux modifier les quantités.
Je peux également me balader dans le menu pour ajouter des articles. Le comportement est là complétement erratique.
le rafraichissement se fait.. ne se fait pas... (alors que la page est construite comme indiqué dans le paragraphe précédent)
je n'ai aucune explication pour ce comportement !

Pour finir j'ai remplacer dans ma page panier la zr "classique" par une zr "navigateur" que je remplis exclusivement avec du code dans le code de chargement (onload) de la page. (un "ajaxexecute" qui demande au serveur de renvoyer une chaine avec toutes mes infos que je découpe...). C'est finalement assez simple et ça marche à tous les coups (jusqu'à présent).

c'est assez frustrant de ne pas savoir si on a un défaut de programmation ou si on est face à un bug de webdev.
Si quelqu'un à des infos pour m'éclairer sur le sujet ?

bonne journée et merci de m'avoir lu.
Membre enregistré
204 messages
Popularité : +5 (5 votes)
Posté le 09 avril 2018 - 11:33
désolé, je n'ai pas le temps de tester tout ça aujourd'hui.
Il faudrait voir avec le service technique, en leur envoyant ta page.
Mais il me semble que si tu as une solution qui marche à tous les coups (avec de nombreux navigateurs), tu devrais passer à autre chose... ou bien utiliser les méthodes "officielles".

De façon générale, en AWP, la méthode recommandée est de passer par les variables déclarées en contexte.

Si tu obtiens une réponse, merci de la partager ici.
Bonne journée