afin de pouvoir rajouter des informations d’événements de maintenance sur le projet sur lequel je suis actuellement, je souhaiterai mettre en place une sorte de banderole sur l’IHM affichant, pour tous les utilisateurs de mon projet, la date de la prochaine livraison et/ou un bouton développé afin qu’il puisse envoyer un message sous forme de pop-up à tous les utilisateurs et où ils seraient obligeaient de valider cette pop-up pour pouvoir continuer à parcourir la platforme
Sauriez-vous si il est possible de faire cela ?
Cordialement,
KWu
Une page d’accueil (une View) est une page HTML que vous pouvez customiser comme vous le souhaitez y compris en lui faisant afficher une “popup” modale qui utilise des données que vous stockez quelque part: en dur, dans un objet métier, un paramètre système, un texte, etc.
Ex: en mettant ça dans la vue Home (home page du scope “Simplicité administrator”):
Bonjour,
Merci pour votre retour,
Mais de cette manière, la popup apparaitra en permanence à chaque fois que l’utilisateur se connecte non ?
C’est possible de développer un bouton qui sera le seul moyen de faire apparaître cette popup ?
Si je comprends bien on parle donc ici plutôt de “push” de notifications en temps réel.
Simplicité embarque Google Firebase qui est fait pour ce genre de choses sous forme de notifications desktop (mais l’info transitant par chez Google donc en général ça ne plait/va pas à nos clients on premises).
Sinon vous pouvez fonctionner via websockets c’est une technologie adaptée au push ou vous pouvez faire du pull à intervalle régulier pour simuler du push mais ce ne sera pas vraiment du temps réel. Dans les deux cas c’est à implémenter dans le script global de la disposition “responsive” pour que ça soit executé globalement (i.e. dans la one page globale, donc independamment de là où sont les utilisateurs)
Donc si je comprend bien, les websockets sont le seul moyen de pouvoir faire un envoie de message direct vers tous les utilisateurs afin de leur faire apparaître une popup c’est bien cela ? Si oui, comment cela marche-t-il et comment pourrais-je le mettre en place dans mon projet svp ?
pour du “vrai” push vous avez le choix entre vous appuyer sur Firebase (qui fera des notifs desktop) soit vous appuyer sur des websockets. Il y a déjà de la mécanique de websocket dans Simplicité il faut voir si on peut l’exploiter pour ça, mais déjà est-ce que votre infrastructure laisse passer ce protocole ? Je pose la question car certains reverse proxy cassent les websockets (soit immédiatement soit au bout d’un timeout court)
il est toujours possible de simuler du push en faisant du pull à intervalle régulier, c’est comme cela qu’on fait depuis les débuts du web dans les années 90
Bref commencez par vérifier que les websockets fonctionnent chez vous et on verra ce qu’il convient de faire.
Apres discussion, il se peut que effectivement les websockets ne puisse pas être la bonne stratégie pour le projet, devant lancer des notifications pour plusieurs localisations différentes, on ne peut pas être sur à 100% que aucun proxy ne bloquera le protocole
Pour Firebase, on considère que les notifications desktop ne sont pas assez visuel pour être sur que tous les utilisateurs aient le message en temps voulu
Ce qui nous laisse le choix les notifications par pull régulier, si j’ai bien compris cette stratégie, ca serait de créer une méthode qui se lancerai tous les x temps et qui ferait une vérification pour voir si il n’y a pas de message a afficher, est ce bien cela ? Si oui, comment peut-on créer cette méthode qui se lance tous les x temps ?
C’est à implémenter en Javascript dans la ressource SCRIPT de la disposition responsive qui est faite pour ça.
Mais il faut déjà que vous configuriez quelque chose coté serveur pour contenir les infos à interroger et à présenter sous forme de popup en cas de réponse positive.
Attention il faut faire en sorte que ces appels soient le moins “couteux” possible car ils seront effectués en // par toutes les sessions actives.
Personnellement je gérerais ça dans un param système. Coté client je ferais un appel à ce param système (peu couteux) s’il est là j’afficherais une popup avec le message dans la valeur du param systeme, s’il n’est pas là j’attendrais X minutes et je recommencerais. Ou dans le genre.
C’est justement la partie côté client dont je voudrais avoir plus d’information, a savoir comment faire pour que la méthode se lance tous les x temps, est ce que cela passe par de la configuration sur Simplicité qui lancerai le script, ou bien c’est une boucle directement dans le code, ou bien existe-t-il des alternatives adaptés pour cela ?
A noter que j’utilise setInterval et pas setTimeout pour simplifier le bouclage.
Attention : Cela nécessite toutefois un fix sur le service getSysParam qui ne gérait pas correctement le parametre force qui est requis das ce contexte. Le fix sera poussé sur toutes les branches et images Docker ce soir.
Merci beaucoup pour votre aide, cela m’aide enormement pour l’avancement de mon projet
Par rapport à votre code, si je le comprend bien, la function checkNotification() va boucler sur elle-même toutes les 5secondes, cependant celà ne va-t-il pas déranger la continuité du projet à faire une telle boucle infini, ou bien la ressource SCRIPT de la disposition responsive est dans une thread indépendante ?
Je ne comprends pas du tout ce que vous voulez dire par " déranger la continuité du projet"
Dans mon exemple c’est 1 appel toutes les 5s car c’était juste pour tester sans attendre trop longtemps entre chaque appel. Rien ne vous empêche bien entendu de mettre une valeur plus longue. Comme je l’ai dit précédement vous devez faire attention à ne pas faire des choses trop “couteuses” dans votre contexte d’usage
Il faudrait soit ajouter dans ce polling un mémorisation des messages déjà affiché sur le front dans un tableau global. ou alors gérer ce paramètre system par utilisateur et le supprimer via setSysParam une fois affiché, sinon il va s’afficher en boucle toutes les n secondes.
Une autre approche est d’utiliser le système de notif de Firebase de Google, il a des API et un écran tout fait dans Simplicité pour envoyer des notifications sur mobile ou desktop (si l’utilisateur accepte de recevoir des notifications dans son navigateur), à une personne, des personnes, à un groupe ou tout le monde. https://docs.simplicite.io/documentation/99-misc/cordova.md
La gestion des notifications est un sujet à part entière de la prochaine V5 :
Si pas de Firebase installé, usage de websocket (push) ou a défaut d’un polling (pull) comme celui-ci
Messagerie = persistances des messages envoyés / lus
Suivre/S’abonner à des objets métier pour recevoir leurs activités (mise à jour) / bookmark
Quand je parlais de continuité du projet, je pensais au fait que vue que dans l’exemple on fait une boucle qui re-boucle sur elle-même sans s’arréter est ce que ca ne va pas bloquer les lignes de code qui se trouve après cette boucle. En fait, principalement je voulais savoir si je mets une boucle similaire à votre exemple, est ce que Simplicité va lire seulement le code de la boucle sans arrêt ou bien est ce qu’il peut lire en même temps le code qui se trouve après la boucle
Effectivement, il n’y a pas l’air d’y avoir boucle infini avec le code,
Par ailleurs je viens d’essayer et j’avais une autre question du coup, j’ai l’impression de voir que si on change des valeurs dans les paramètres système, pour que cette valeur soit appliquée, il faut faire un clear cache, est-ce correct ? Si oui, y a-t-il une alternative à celà ?