PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2024 → Afficher plusieurs fois la meme page pour des sociétés différentes
Afficher plusieurs fois la meme page pour des sociétés différentes
Débuté par Christophe Navarro, 18 jan. 2020 18:30 - 12 réponses
Membre enregistré
89 messages
Popularité : +4 (4 votes)
Posté le 18 janvier 2020 - 18:30
Bonjour tout le monde,
je sollicite votre aide pour trouver une solution à un problème d'architecture pourtant trés simple,
je développe un Erp qui devra tourner pour 3 sociétés du meme groupe,
je veux pouvoir afficher une page par société (avec par ex les commandes de la société de la page),
si j'avais à le faire avec Windev, ce serait simple : une session exe par asociété.
Mais avec Webdev aucune solution 'simple' ne ne me permet d'aboutir (mode dynamique, mode Awp), je m'explique :

- les fichiers de la base de données possèdent tous une rubrique IDSociete, pour pouvoir filtrer les données concernant la société sur laquelle on se trouve
- le client veut pouvoir ouvrir une session par société SIMULTANEMENT dans le navigateur (par ex 3 sociétés = 3 onglets du navigateur), afin d'appeler les différentes fonctions de l'erp pour la société de l'onglet sur lequel il se trouve
- il faut donc que je manipule d'une facon ou d'une autre un paramètre SocieteID me permettant de savoir dans quelle société se trouve la page

- Solution 1 : dans la Description du projet, le type de site est sur 'Session' (appelé aussi mode Classique ou Dynamique selon les version de Webdev), webdev génère donc un contexte serveur par page. Ensuite chacune de mes pages possède en 1er paramètre : Pidsociete, qui me permet de connaitre la société sur laquelle je suis et d'effectuer tout les traitements concernant cette société, par ex la page d'accueil qui affiche le nom de la société.
Problème : si j'ouvre une 2eme fois la meme page (pour l'afficher pour une autre société), alors elle s'ouvre correctement sur la bonne société MAIS la 1ere page (se trouvant dans un autre onglet) n'est plus utilisable à cause d'un message indiquant que le contexte n'est plus synchro avec la page, ce qui est normal puisque le contexte de cette page a été modifié par son 2ème affichage.
Impossible d'avoir 2 fois la meme page avec des paramètres de page différents en mode Session donc.

- Solution 2 : du coup je bascule le projet en mode AWP.
Dans ce mode plus de problème : pas de contexte serveur, le paramètre SocieteID passé à la page est propre à la page, je peux donc afficher plusieurs fois la meme page avec un SocieteID différent.
Mais il y a un autre probleme : en AWP il est tres compliqué de gérer des tableau et ZR remplies aprés le chargement de la page, par ex une page Gestion Utilisateurs permettant de paramétrer leurs droits d'accés, quand je clic sur une ligne du tableau affichant les utilisateurs, j'affiche une popup avec la fiche Utilisateur et un tableau affichant ses droits, tableau construit avec des tableAjouteLigne().
Quand je veux enregistrer les modifs faites dans ce tableau, tableOccurrence me retourne 0 alors que je vois bien les lignes dans le tableau... mais c'est normal parce qu'on est en AWP, les lignes ajoutées n'existent pas dans le contexte qui a été construit au 1er affichage de la page. On pourrait bricoler une solution avec de l'ajax programmé et un tableau navigateur mais c'est lourd et j'ai un ERP entier a développer avec de trés nombreux cas similaires, donc solution pas viable...

- Solution 3 : rester en mode Session, et créer un site par société, de facon a avoir un contexte par site. Mais je ne sais pas comment ouvrir une page d'un autre site en lui passant l'ID société en paramètre... et en plus quand j'aurai une mise à jour a faire, je devrai la faire 3 fois... pas top

Voila, donc je sèche pour l'instant (et je déprime un peu aussi ;)
Si une ame charitable à une idée, une solution, une expérience similaire... je suis preneur !!

Merci d'avance

--
Christophe Navarro
Développeur freelance Windev, Webdev, Windev Mobile, MySql
http://www.krinasoft.fr
Perpignan
Posté le 19 janvier 2020 - 09:23
Une solution :

- Site Mixte (classique + AWP)
- la première page (page de login) est awp
- sur cette page, quand on a choisit une société plus login/password, on lance tout le reste (c'est à dire la partie écrite en mode classique) dans un autre onglet

De cette manière, chaque login CREE une nouvelle session indépendante dans laquelle le pID société est connu et utilisé dans un contexte indépendant


C'est le même système qui peut être utilisé pour le backoffice d'un site grand public awp.
Membre enregistré
1 304 messages
Popularité : +47 (51 votes)
Posté le 19 janvier 2020 - 13:45
Salut Christophe,

Il te reste une 4ème solution c'est de passer en mode SaaS

https://doc.pcsoft.fr/fr-FR/?9500213

A+
Daryl

--
https://www.concept4u2.com
Membre enregistré
89 messages
Popularité : +4 (4 votes)
Posté le 19 janvier 2020 - 23:51
Bonjour Argus,
merci pour ta réponse trés intéressante, j'ai tout de suite testé en passant ma page de login en mode AWP, et paramétré le bouton OK en _BLANK mais Webdev me retourne ce message d'erreur :
"Les pages dynamiques non AWP ne peuvent pas être affichées directement depuis une page AWP en code serveur."
Il semblerait donc qu'on ne puisse pas le faire...
J'utilise un PageAffiche(mapage) dans le code serveur du bouton OK, si il faut utiliser le code navigateur alors je vois pas quelle url indiquer ?
en mode classique session l'url est du genre : http://localhost/MonProjet/PAGE_authentification/QBkAAA8zU1QAAEtke0noE8RUSBc
si j'essaye http://localhost/MonProjet/PAGE_authentification/ (sans le charabiat derriere) alors Webdev me retourne une erreur :
L'url '' n'est pas valide (ICU226).

Sur un un backoffice de frontend grand public (j'en ai développé un justement), les utilisateurs sont sur des postes différents, ce qui permet donc de créer une session par poste, mais dans mon cas il faut pouvoir créer une session par société en étant sur le meme poste...
Du coup je me pose la question : quelles sont les composantes de la clé unique d'une session Webdev ?
Ca semble etre du genre : ip_user/domaine/projet/page ...
mais j'espère me tromper sinon il me resterait plus que ma solution 3, snif.

--
Christophe Navarro
Développeur freelance Windev, Webdev, Windev Mobile, MySql
http://www.krinasoft.fr
Perpignan
Membre enregistré
89 messages
Popularité : +4 (4 votes)
Posté le 19 janvier 2020 - 23:54
Merci pour ta réponse Daryl,
mais le mode SAAS (modèle économique) n'est pas adapté à mon cas

--
Christophe Navarro
Développeur freelance Windev, Webdev, Windev Mobile, MySql
http://www.krinasoft.fr
Perpignan
Posté le 20 janvier 2020 - 07:33
on peut :

1. tu vérifie le login
2. tu créé une session dans un fichier session qui a un ID unique = un token

En code navigateur :

SiteDynamiqueAffiche("LeNomDeTonSite","","Token="+gpasSessionToken,NouveauNavigateur)

et dans ton site, tu vérifie que le token passé correspond à une session valide (elle a un time out)

Encore une fois, je le fais tout le temps
Membre enregistré
324 messages
Popularité : +21 (51 votes)
Posté le 20 janvier 2020 - 09:33
>si j'avais à le faire avec Windev, ce serait simple : une session exe par asociété.
Alors non on ne fait pas ça ... on fait un exe qui reçoit une ligne de commande, et l'id détermine le reste, si faut faire un exe par boite, quand on a 350 clients vive les updates, c'est pas viable.

Mais admettons en webdev on fait 3 "sites" dans ton iis, chaque "site" appelle le même projet avec un paramètre différent qui dit qu'on bosses sur la société 1 / 2 ou 3...

Mais je ne sais pas comment ouvrir une page d'un autre site en lui passant l'ID société en paramètre...


PageAffiche(MaPage,IDSociété) < c'est dans l'aide de pageAffiche

PageParamètre pour récupérer le paramètre passé lors d'un pageAffiche, ou bien quand le client ouvre le site, après le login, une variable globale avec l'id de société, il ne faut pas coder en webdev comme si on faisait de l'asp ou du php.

Chaque session à son propre "contexte" et garde en mémoire toutes les variables globales tant que celle-ci existe au niveau du serveur, pour le coup d'un id société, ca évite de le passer à chaque page qu'on appel, c'est stocké une fois globalement et accessible à tout moment pour n'importe qu'elle page.

Franchement je ne comprends pas où vous coincez, pourquoi vouloir faire compliquer quand on peut faire simple.

Une page de login neutre, ca détermine un id, qui est stocké dans une variable globale du projet, et existe pour la session entière du client connecté tant que la session est active, si y'a 36 sessions y'aura 36 variables globales, que webdev gère tout seul.

> ce qui permet donc de créer une session par poste, mais dans mon cas il faut pouvoir créer une session par société en étant sur le meme poste..
Vous n'avez pas à le gérer, je suis sur mon pc, j'ouvres 3 fois le site avec Chrome par exemple, j'ai automatiquement 3 sessions au niveau du serveur (sauf si vous avez configurer l'admin webvdev pour recycler la connexion d'une même ip), si j'ouvres 100 fois le sites j'ai 100 sessions, et chaque session est indépendante et à ces propres variables, pas besoin de s'embêter à passer des killomètres de chaines en paramètres !

Jeter un oeil au guide d'autoformation de webdev, j'ai l'impression que vous n'avez pas totalement compris comment il fonctionne, webdev pour le coup c'est plus comme du "windev" que du php/asp, c'est aussi une des critiques numéro des "Codeurs notepad" c'est que webdev fait du web mais avec une logique totalement à l'opposé du php !

Bon dev
Membre enregistré
89 messages
Popularité : +4 (4 votes)
Posté le 21 janvier 2020 - 01:08
Merci Ponch pour votre réponse passionnée ;)
mais je pense pas que vous ayez compris ma problématique,
déjà, bien sur personne ne ferait un exe par société, c'est évident, et ce n'est pas ce que je disais, on peut lancer un exe plusieurs fois sur le meme poste et choisir un id société différent dans la 1er fenetre login (un parametre idSociete dans une combo par ex), avec donc 1 seul et meme exe qu'on met à jour qu'1 fois bien sur.

Pageaffiche() oui je connais bien, mais la je parlai d'afficher une page dynamique d'une autre url que le site sur lequel on se trouve, Pageaffiche() affiche des pages de la session en cours, il faut donc construire l'url de la page a afficher qui, en mode session ne comporte pas de parametres comme avec une url en mode Awp, et donc pour cela Argus a bien répondu : il faut utiliser la fonction SiteDynamiqueAffiche().

Cependant vous dites qqchose d'interessant : "sauf si vous avez configurer l'admin webvdev pour recycler la connexion d'une même ip"
en effet je ne savais pas que cette option existait, ca a l'air de correspondre à mon problème de session qui n'est plus synchro avec la page, je vais étudier ca de plus pret.

--
Christophe Navarro
Développeur freelance Windev, Webdev, Windev Mobile, MySql
http://www.krinasoft.fr
Perpignan
Membre enregistré
89 messages
Popularité : +4 (4 votes)
Posté le 21 janvier 2020 - 01:08
Merci Argus,
je vais tester SiteDynamiqueAffiche()

--
Christophe Navarro
Développeur freelance Windev, Webdev, Windev Mobile, MySql
http://www.krinasoft.fr
Perpignan
Membre enregistré
1 304 messages
Popularité : +47 (51 votes)
Posté le 21 janvier 2020 - 09:16
Salut Christophe,

Comme ton site est en AWP, tu peux utiliser le contexte pour sauvegarder tes variables dans la session, dans ce cas ta (ou tes variables) qui contient l'identifiant de société sera automatiquement passé aux page AWP.

Moi je l'utilise dans initialisation du projet en configurant le contexte sur disque

// Déclaration de tes variables
GLOBAL
gnNation est un entier = Nation() // La langue utilisée
gsSocietyID est une chaîne = "" // L'identifiant de société utilisée

// Déclaration du contexte AWP
ConfigureContexteAWP(ctxDisque, ctxIDURL)

// Variables à sauvegarder et à passer aux pages AWP
DéclareContexteAWP(gnNation , gsSocietyID)


ConfigureContexteAWP() => https://doc.pcsoft.fr/?1000017066
DeclareContexteAWP() => https://doc.pcsoft.fr/?3058028

A+
Daryl

--
https://www.concept4u2.com
Message modifié, 21 janvier 2020 - 09:21
Membre enregistré
89 messages
Popularité : +4 (4 votes)
Posté le 21 janvier 2020 - 11:26
Merci Daryl,
tu as raison, et j'avais commencé à le développer en Awp comme tu l'expliques, ca fonctionne trés bien, mais ce projet possède des interfaces complexes et difficiles à réaliser dans ce mode (bcp de sous tables et popups contenant d'autres tables affichés dans la meme page), je suis pas un débutant je maitrise l'ajax, le code navigateur le JS... mais le but n'est pas de passer un temps infini en développement, ce qui serait le cas en Awp pour ce genre de projet.
Du coup le mode Session est bien pratique mais plus verrouillé...

--
Christophe Navarro
Développeur freelance Windev, Webdev, Windev Mobile, MySql
http://www.krinasoft.fr
Perpignan
Membre enregistré
283 messages
Popularité : +3 (3 votes)
Posté le 23 janvier 2020 - 12:35
Salut Christophe,

J'ai lu un peu en "travers" les posts.
Une idée peut-être hors sujet : avec 3 iFrame ????

Bon dev et A+
Membre enregistré
131 messages
Popularité : +3 (5 votes)
Posté le 29 janvier 2020 - 16:17
Bonjour à tous,
J'ai aussi lu en diagonale et je réagis juste à:
Christophe Navarro a écrit :
Merci pour ta réponse Daryl,
mais le mode SAAS (modèle économique) n'est pas adapté à mon cas


Le mode saas n'est pas obligatoirement économique, il permet très simplement d'avoir un meme site que l'on connecte à la base de son choix en choisissant juste un email propre à la base (au "client" saas).
j'utilise ça au quotidien.