Après windows pour les nuls, voici PB pour les bons (ou presque).

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 10-06-2008 09:19:54

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

[RESOLU] Problèmes communication inter-fenêtres

Bonjour,

Voici une brève description de mon contexte :

1) J'ai une fenêtre modale (w_response_new_account). Cette fenêtre est utilisée pour saisir des données et ajouter un utilisateur dans la base de données.

2) Lorsque l'on valide l'ajout, des traitements de contrôle sont effectués. On fait alors appel à un user object (uo_data_new_account) commun à plusieurs fenêtres (ajout, modification, suppression d'un utilisateur). Ce dernier va alors afficher une autre fenêtre modale (w_response_similar_accounts) elle aussi héritée de l'ancêtre basique (w_base_response_button).

3) Ma seconde fenêtre modale s'affiche et recherche en base de données si il existe des utilisateurs similaires à celui saisi dans la fenêtre d'ajout en 1).
Le but c'est d'éviter des créer plusieurs fois le même utilisateur.

Problème :

Lorsque je ferme ma seconde fenêtre modale (clic sur OK ou sur CANCEL), je dois retourner une valeur à ma première fenêtre (w_response_new_account). Celle-ci attend de savoir si l'on poursuit l'ajout de l'utilisateur ou non. La fonction utilisée dans mon user object retourne un entier à la première fenêtre modale : ça c'est bon. Il me faut donc retourner ma valeur depuis ma seconde fenêtre modale (w_response_similar_accounts) au user object qui l'a appelée (uo_data_new_account). Et là j'ai plus de difficultés.

Auriez-vous des suggestions à me faire ?
Merci pour votre aide.

Dernière modification par Nyphel (10-06-2008 11:10:10)

Hors ligne

 

#2 10-06-2008 09:45:47

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

Re: [RESOLU] Problèmes communication inter-fenêtres

Bonjour, lors de l'ouverture de w_response_similar_accounts, tu peux faire passer uo_data_new_account et le récupérer avec Message.PowerObjectParm


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

Hors ligne

 

#3 10-06-2008 10:31:29

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Problèmes communication inter-fenêtres

Bonjour et merci pour le conseil.
Plutôt que de passer l'user object complet, j'ai simplement passé une structure avec les quelques données qui m'intéressent.
Je m'y prend comme suit :

Code: pb

// Open the sheet that will display accounts list
str_account lstr_account
lstr_account.window   = calling_window
lstr_account.name   = ls_account_owner_name
lstr_account.address2   = ls_account_owner_address
lstr_account.post_code   = ls_account_owner_postalcode
lstr_account.double_address_warrning_flag = -1 
w_response_similar_accounts lw_response_similar_accounts
OpenWithParm(lw_response_similar_accounts, lstr_account, calling_window)

messagebox('Code retour', string(lstr_account.double_address_warrning_flag))


Dans fenêtre, je déclare ma structure en variable globale :

Code: pb

str_account istr_account


Dans mon open() event, je récupère les données passées en paramètre :

Code: pb

istr_account = Message.PowerObjectParm

string ls_account_owner_name, ls_account_owner_address, ls_account_owner_postalcode
ls_account_owner_name     = istr_account.name
ls_account_owner_address     = istr_account.address2
ls_account_owner_postalcode   = istr_account.post_code


Et ensuite je cherche à retourner le code retour en fonction que l'on clic sur OK ou CANCEL.
Si on clic sur CANCEL je ne fais rien (car l'ancêtre a déjà défini un close(this) sur l'appel de ue_cancel())
Si on clic sur OK, je change la valeur retour. Voici donc mon ue_ok() event :

Code: pb

istr_account.double_address_warrning_flag = 1
close(this)


Ma valeur retour reste à -1, que je clic sur OK ou sur CANCEL.
C'est surement un problème tout bête, mais débutant en powerbuilder j'avoue que ça me bloque.
J'ai tenté de passer ma structure par référence, mais cela ne change rien :

Code: pb

OpenWithParm(lw_response_similar_accounts, ref lstr_account, calling_window)

Hors ligne

 

#4 10-06-2008 10:39:47

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

Re: [RESOLU] Problèmes communication inter-fenêtres

Si tu passais un nvo, c'est la référence qui aurait été passée, donc en gros l'objet lui-même...
Avec une structure, tu ne passes que la valeur, donc impossible à récupérer ensuite, sauf en utilisant un CloseWithReturn :

Code: pb

CloseWithReturn(This, istr_account)


et ensuite récupérer la structure :

Code: pb

OpenWithParm(lw_response_similar_accounts, lstr_account, calling_window)

lstr_account_new = Message.PowerObjectParm

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

Hors ligne

 

#5 10-06-2008 11:09:44

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Problèmes communication inter-fenêtres

Merci pour votre aide, je comprends mieux maintenant !

Here is my final code :

Code: pb

// Open the window that will display accounts list
str_account lstr_account
lstr_account.window     = calling_window
lstr_account.name     = ls_account_owner_name
lstr_account.address2   = ls_account_owner_address
lstr_account.post_code   = ls_account_owner_postalcode
lstr_account.double_address_warrning_flag = -1
w_response_similar_accounts lw_response_similar_accounts
OpenWithParm(lw_response_similar_accounts, ref lstr_account, calling_window)

// Check user response
IF IsValid(Message.PowerObjectParm) and NOT IsNull(Message.PowerObjectParm) THEN
  lstr_account = Message.PowerObjectParm
  IF lstr_account.double_address_warrning_flag = 1 THEN // User clic OK and accepts the warning
    return guo_cst.ii_ReturnOK
  ELSE // Should not happen
    return guo_cst.ii_ReturnKO
  END IF
ELSE // User clic CANCEL button, no param returned (cause of inheritance, ue_cancel returns directly)
  return guo_cst.ii_ReturnKO
END IF

Dernière modification par Nyphel (10-06-2008 11:10:35)

Hors ligne

 

#6 10-06-2008 12:16:54

Dadone  
Membre Power Geek
Lieu: Avon (Seine et Marne)
Date d'inscription: 19-02-2007
Messages: 252
Pépites: 985
Banque: 0
Site web

Re: [RESOLU] Problèmes communication inter-fenêtres

Nyphel a écrit:

Merci pour votre aide, je comprends mieux maintenant !

Here is my final code :

Code: pb

// Open the window that will display accounts list
str_account lstr_account
lstr_account.window     = calling_window
lstr_account.name     = ls_account_owner_name
lstr_account.address2   = ls_account_owner_address
lstr_account.post_code   = ls_account_owner_postalcode
lstr_account.double_address_warrning_flag = -1
w_response_similar_accounts lw_response_similar_accounts
OpenWithParm(lw_response_similar_accounts, ref lstr_account, calling_window)

// Check user response
IF IsValid(Message.PowerObjectParm) and NOT IsNull(Message.PowerObjectParm) THEN
  lstr_account = Message.PowerObjectParm
  IF lstr_account.double_address_warrning_flag = 1 THEN // User clic OK and accepts the warning
    return guo_cst.ii_ReturnOK
  ELSE // Should not happen
    return guo_cst.ii_ReturnKO
  END IF
ELSE // User clic CANCEL button, no param returned (cause of inheritance, ue_cancel returns directly)
  return guo_cst.ii_ReturnKO
END IF

Pas très programmation objet tout ca, une déclation de routines publiques pour le passage de paramètres auraient été plus adéquat, voir la discussion à ce sujet dans la rubrique "Articles généraux", topic "Programmation objet avec PB".

Hors ligne

 

#7 10-06-2008 12:45:16

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Problèmes communication inter-fenêtres

J'ai trouvé le sujet très intéressant, mais en tant que débutant Pb avec des délais restreints, je vais d'abord essayer de faire ce que l'on attend de moi (à savoir du code homogène avec ce qui a été fait) et consolider les bases, avant de chercher à m'améliorer. J'avoue qu'un exemple complet et fonctionnel, avec les getter/setter, m'aurait bien intéressé... Je débute non seulement en Pb, mais aussi en tant que développeur. Je ne suis pas encore bien rodé sur les classes abstraites, plus encore sous Pb ;-)

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22