Powerbuilder pour les completement Geeks !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 27-03-2008 10:33:11

jplikepb  
Membre Geek
Lieu: Mâcon
Date d'inscription: 30-08-2007
Messages: 21
Pépites: 133
Banque: 0

HELP - problème d'évenement

Bonjour,
J'ai un bouton générique 'sauver'. Ce bouton est posé dans environ 200 fenetres avec du code spécifique pour chaque fenetre.
Je voudrais appeler une fonction avant et une autre après le script du bouton sauver.

J'ai bien essayé dans le bouton générique de faire un triggerevent("Avant) et juste après un PostEvent("Après")
L'evenement "avant" est toujours bien appelé mais après PEU de pas etre appelé APRES le script sauver.
Ca ne marche pas dans le cas d'un message box au millieu du script sauver de la fenetre qui va me passer tous les evenements de la pile avant la fin du script.

Si vous avez une solution qui m'éviterais de reprendre tous mes script "sauver" de mes 200 fenetres pour les mettre dans des fonctions...

merci d'avance

Hors ligne

 

#2 27-03-2008 12:43:19

Cortex  
Modérateur
Lieu: Arlon
Date d'inscription: 08-02-2008
Messages: 194
Pépites: 6,904
Banque: 2,109,818,425,070

Re: HELP - problème d'évenement

jplikepb a écrit:

L'evenement "avant" est toujours bien appelé mais après PEU de pas etre appelé APRES le script sauver.
Ca ne marche pas dans le cas d'un message box au millieu du script sauver de la fenetre qui va me passer tous les evenements de la pile avant la fin du script.



Desole, mais je comprends pas bien...

Resumons:
Dans l'event clicked du bouton sauver des 200 descendants de ta fenetre, tu as du code specifique. Et tu voulais appeller une methode (disons "A()") avant ce code specifique et une apres (disons "B()").
Donc, comme tout ces clicked sont en "extend ancestor script" de maniere sure ()_ naturellement tu as ecrit dans le clicked de l'ancetre un truc du genre

Code: pb

parent.A()
parent.post B()


Et la, tu dis que B() ne se fait pas tjs parce que...

jplikepb a écrit:

Ca ne marche pas dans le cas d'un message box au millieu du script sauver de la fenetre qui va me passer tous les evenements de la pile avant la fin du script.

...tu veux dire quoi par la?
Quand t'as un messagebox il vide d'abord les event de la pile, avant de poursuivre l'execution entre le messagebox et la fin du script specifique? C'est ca?
Je viens de tester, et si c'est bien ca, alors ben... c'est pas ca paske chez moi ca marche...

C'est bien un simple appel de messagebox? Pas un messagebox via du script dans systemerror et que tu serais sur une version PB > 9?

Bref, je comprends pas bien ta question... mais j'essaie...

Hors ligne

 

#3 27-03-2008 13:02:29

jplikepb  
Membre Geek
Lieu: Mâcon
Date d'inscription: 30-08-2007
Messages: 21
Pépites: 133
Banque: 0

Re: HELP - problème d'évenement

Merci de creuser Cortex !
Tu a bien compris ce que je veux dire pour les 3/4, je vais détailler ma dernière phrase :

Imagine que l'utilisateur a saisie dans une DW un code en double : Après le Update de ma DW ca va me déclencher un DBError genre "duplicate key" que je catch et que j'affiche NON pas dans un messagebox (je me suis trompé) mais dans une belle fenetre de type "response" ouverte avec OpenWithParm ou je lui passe en paramètre le message d'erreur traduit dans la langue de l'utilisateur.

Le "parent.post B()" que j'ai fait en amont va se jouer dès l'affichage de ma fenetre !
J'imagine que PB quand il affiche la fenetre il commence a attendre que quelqu'un click sur OK et pendant ce temps il vide 1 à 1 tous les evenement de la pile pendant qu'il a le temps.

Et oui je suis en PB 10.5.2

Dernière modification par jplikepb (27-03-2008 13:07:15)

Hors ligne

 

#4 27-03-2008 13:33:37

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: HELP - problème d'évenement

la fenetre de message est declenchée dans le meme evenement ?


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#5 27-03-2008 13:37:43

Cortex  
Modérateur
Lieu: Arlon
Date d'inscription: 08-02-2008
Messages: 194
Pépites: 6,904
Banque: 2,109,818,425,070

Re: HELP - problème d'évenement

jplikepb a écrit:

NON pas dans un messagebox (je me suis trompé) mais dans une belle fenetre de type "response" ouverte avec OpenWithParm ou je lui passe en paramètre le message d'erreur traduit dans la langue de l'utilisateur.

Ha oui, la je vois beaucoup mieux...
Malheureusement, c'est un ééénorme probleme que je rencontre parfois...

Les response ont ce defaut de, bien que modales et que theoriquement devant bloquer tout traitement, elles ne bloquent pas les traitements asynchrones... (aka les script appelles en post) Lesquels evidemment se produissent inopinement pendant que la fenetre response est ouverte...

Tu n'aurais pas eu ce probleme avec un messagebox par contre, c est bete!

...En meme temps, entre nous et comme je dis toujours, il ne peut exister de bonne solution pour réaliser une correction douteuse... Desole, mais je crois que de toute facon, il vaut mieux pour ton appli que tu "te tappe" tes 200 descendants, au moins, ce sera propre...

Il y a bien des outils de search/replace pour PB... (je me rapelle plus d'exemple par contre)

Hors ligne

 

#6 27-03-2008 13:51:49

jplikepb  
Membre Geek
Lieu: Mâcon
Date d'inscription: 30-08-2007
Messages: 21
Pépites: 133
Banque: 0

Re: HELP - problème d'évenement

Cortex, je pense que ton analyse est bonne, je m'étais doucement fait a l'idée de toute facon.
Effectivement j'ai fait un exemple minimum avec un messagebox pas de probleme et une fenetre en response et la tout bascule ! c'est le drame.
Merci en tout cas de ton aide. Je vais programmer un passage sur toutes les fenetre dès que possible.

Hors ligne

 

#7 27-03-2008 13:54:49

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: HELP - problème d'évenement

bon, c'est possible de voir le script de ton bouton sauver ?


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#8 27-03-2008 14:07:59

jplikepb  
Membre Geek
Lieu: Mâcon
Date d'inscription: 30-08-2007
Messages: 21
Pépites: 133
Banque: 0

Re: HELP - problème d'évenement

Si tu veux j'ai fait une appli minimum pour tester:
2 fenetres : w_main et w_response
dans le open de l'appli tu fait open(w_main)

dans w_main tu fait 2 evenements :
ue_avant avec messageBox("w_main", "AVANT")
ue_apres avec messageBox("w_main", "APRES")


w_response est une simplissime fenetre response avec un bouton : close(parent)

dans le open de w_main tu fait
this.triggerevent("ue_avant")
this.Postevent("ue_apres")
Messagebox("w_main", "traitement 1")
Messagebox("w_main", "traitement 2")

et tu test : La pas de problème tu obtiends : AVANT->traitement1->traitement2->APRES

si maintenant tu fait ceci dans le open:
this.triggerevent("ue_avant")
this.Postevent("ue_apres")
//Messagebox("w_main", "traitement 1")
Open(w_response)
Messagebox("w_main", "traitement 2")

et tu test : La c'est le drame : AVANT->fenetre response->APRES(!!!)->traitement2(!!!)

c'est plus clair ainsi ?

Hors ligne

 

#9 27-03-2008 14:12:41

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: HELP - problème d'évenement

en fait il faudrait lancer le ue_apres dans le close de w_response...   


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#10 27-03-2008 14:17:11

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: HELP - problème d'évenement

ErAsORz a écrit:

en fait il faudrait lancer le ue_apres dans le close de w_response...   

voila


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#11 27-03-2008 14:21:11

Cortex  
Modérateur
Lieu: Arlon
Date d'inscription: 08-02-2008
Messages: 194
Pépites: 6,904
Banque: 2,109,818,425,070

Re: HELP - problème d'évenement

pick ouic a écrit:

ErAsORz a écrit:

en fait il faudrait lancer le ue_apres dans le close de w_response...   

voila

...pour son appli minimum, oui...
Mais pour la vraie, ou l'equivalent de "w_response" n'arrive qu'en cas de dberror, parmi plein d'autre trucs possible et a travers 200 fenetres differentes et Dieu sait quelle autre joyeusete, je doute que ca fasse avancer le bigniou...

Hors ligne

 

#12 27-03-2008 14:49:14

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2487
Pépites: 88
Banque: 9,223,372,036,854,776,000

Re: HELP - problème d'évenement

Peut-être en utilisant la fonction Yield?


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#13 27-03-2008 15:38:00

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: HELP - problème d'évenement

Cortex a écrit:

pick ouic a écrit:

ErAsORz a écrit:

en fait il faudrait lancer le ue_apres dans le close de w_response...   

voila

...pour son appli minimum, oui...
Mais pour la vraie, ou l'equivalent de "w_response" n'arrive qu'en cas de dberror, parmi plein d'autre trucs possible et a travers 200 fenetres differentes et Dieu sait quelle autre joyeusete, je doute que ca fasse avancer le bigniou...

bah il pourra toujours hériter de w_response dans une w_response_db avec le traitement spécifique...


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22