0

Je travaille sur une application Web développée & hébergée sur le serveur Domino R9 (Application Web non Xpages). Chaque formulaire comporte des événements WebQueryOpen et WebQuerySave implémentés pour la logique métier côté serveur. Le problème est que sur chaque page, lorsque la page est actualisée à partir du navigateur, la page d'accueil/le formulaire de l'application est chargé. Je veux maintenir l'état d'une page dans cette application. De plus, est-il possible d'implémenter une gestion de session basée sur Ajax (backend) dans le cas où la page était inactive pendant un certain temps et que la session a expiré. Par exemple, si un utilisateur écrit quelque chose dans l'éditeur Web (implémenté dans la dernière version de CKEditor) et si sa session est automatiquement supprimée, il devrait pouvoir commencer avec le moins de tracas et ses éléments déjà écrits ne seront peut-être pas perdus.Comment maintenir l'état de la page dans l'application Web Domino

Répondre

0

Ma suggestion est de ne pas utiliser WebQueryOpen et WebQuerySave. Au lieu d'écrire l'application pour utiliser les technologies Web modernes (Ajax, JSON, API REST), vous n'avez pas besoin d'enregistrer et de rouvrir la page tout le temps. Faire cela vous donnera tout ce que vous voulez.

Je voudrais construire la page en utilisant HTML standard et Javascript (ou même jQuery), puis faire des appels Ajax aux agents sur le serveur pour lire/écrire des données.

J'ai donné plusieurs présentations exactement cela, avec beaucoup d'exemples de code et même le code fini à télécharger:
http://blog.texasswede.com/mwlug-2015/
http://blog.texasswede.com/my-mwlug-presentation-2/
http://blog.texasswede.com/my-connect-2017-demo-code/

+0

Je suis totalement d'accord avec vous mais le problème est qu'il s'agit d'une énorme application personnalisée intégrée dans les anciennes versions de Lotus Domino, à savoir Domino 7.0. J'ai incorporé quelques dernières fonctionnalités, mais, vous savez, il y a une limite à la modification de la logique métier. WebQueryOpen & Save est implémenté sur toutes les pages de l'application et inévitablement je dois passer à travers pour réaliser quelque chose de nouveau. Mon défi actuel est la persistance de l'état des pages et les appels basés sur AJAX. – Fundi

+0

Pour la gestion de la session, pourquoi ne pas écrire une fonction qui met à jour un document temporaire dans le backend, via un appel Ajax? Voici comment je le ferais: Ecrire une fonction Javascript où vous lisez les valeurs de tous les champs et le donnez au backend avec l'ID UNID du document. Appelez cette fonction toutes les 2 minutes (ou ce que vous jugez approprié) en utilisant setInterval(). (suite) –

+0

(suite) Sur le serveur, vous écrivez un script qui crée un document temporaire (utilisez un nom de formulaire différent du formulaire normal) et y placez toutes les valeurs. Lorsque le document est enregistré, vous utilisez clearInterval() pour arrêter les mises à jour et également supprimer le document temporaire sur le serveur (en utilisant un autre appel Ajax au même script, cette fois avec une charge utile spéciale qui le supprime temporairement –

0

Vous pouvez enregistrer le contenu de tous les champs et CKEditor dans un Chaîne JSON et aussi l'UNID (ou toute "clé primaire") à l'entité courante (= page).

Ensuite, vous pouvez envoyer cette chaîne au serveur en utilisant AJAX, ou comme alternative ...

... avez-vous essayé d'utiliser le stockage local HTML5? Voir cette page: https://www.w3schools.com/html/html5_webstorage.asp Dites-nous comment allez-vous !!!

+0

C'est vraiment une très bonne idée: je peux stocker le DocUNID dans le stockage du navigateur avec le texte écrit dans "CKEditor" et le poster sur le serveur en utilisant AJAX Comment puis-je l'utiliser pour la persistance de l'état de la page? "WebQueryOpen/Save" est implémenté sur toutes les pages.Qu'est-ce que si, avec l'aide d'AJAX je poste les données sur le serveur et la session de l'utilisateur est terminée, comment puis-je gérer cela? Domino offre la flexibilité de créer le session à travers le code? – Fundi

+0

Je pense que Notes ne peut pas créer la session par le biais du code. Dans le serveur, dans WebQueryOpen/Save, vous pouvez enregistrer et récupérer les informations dans un document normal, dans la même base de données Notes ou dans une autre base de données ou même dans une base de données relationnelle. Si la session se termine, lorsque l'utilisateur entre à nouveau et ouvre n'importe quel formulaire dans l'application Web, vous pouvez récupérer les informations et envoyer la page, par exemple, en tant que variable Javascript dans le HTMLHeader du formulaire. Je n'ai toujours pas utilisé le stockage local HTML5, mais c'est très intéressant pour les applications Domino. –