Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
nous avons fait la migration d'applications de PB7.03 vers PB11.5 build 2506.
quand je lance l'application, j'ai un message d'erreur :
"Number 22 - unknow object type w_win_e at line 125 in clicked event of object cb_ok"
sur l'Open d'une window. Voici la partie de script.
window cur_win window w_win Open(cur_win, Af_fcn_language("w_win"))
Af_fcn_language est une fonction qui recherche le language soit on aura '_e' ou '_f'
en resultat w_win deviendra w_win_e.
en PB7 pas de probleme.
merci pour votre réponse.
Dernière modification par freewarefw (23-02-2010 10:29:24)
Hors ligne
Salut !
Dans ton code ci-dessous :
Open(cur_win, Af_fcn_language("w_win"))
"w_win" est une chaine de caractères. Comme tu définis une variable w_win de type window, on dirait qu'il y a une confusion quelque part.
Est-ce que ta fonction af_fcn_language() prend en paramètre une fenetre ou une chaine ?
A+
Hors ligne
General Protection Fault a écrit:
Salut !
Dans ton code ci-dessous :
Open(cur_win, Af_fcn_language("w_win"))
"w_win" est une chaine de caractères. Comme tu définis une variable w_win de type window, on dirait qu'il y a une confusion quelque part.
Est-ce que ta fonction af_fcn_language() prend en paramètre une fenetre ou une chaine ?
A+
Exacte, la variable w_win ne sert a rien dans ton exemple Freewarefw.
window cur_win string ls_win = "w_win" Open(cur_win, Af_fcn_language(ls_win))
En revanche tu utilises la 2ème syntaxe de l'open pour ouvrir une instance d'une window : open( par1, par2)
par1 = variable de type window
par2 = chaine de caractère contenant le nom d'une window à affecter à la variable (elle même ou une window héritée)
Donc la fonction doit retourner une chaine de caractère. Est-ce le cas Freewarefw ?
Pour conclure, un exemple plus simple pour newbies
Imaginons que w_toto est un objet hérité de la classe PB window
window lw_mawindow string ls_lawindow_a_ouvrir ls_lawindow_a_ouvrir = "w_toto" open(lw_mawindow, ls_lawindow_a _ouvrir) //la variable lw_mawindow est un pointeur sur l'instance de w_toto que je viens d'ouvrir
Cette méthode permet d'ouvrir plusieurs instances d'une même window (surtout pratique dans le cas du opensheet)
Hors ligne
Bonjour,
voici le code que j'ai dû faire pour que cela passe sans erreur :
String l_st_objectname l_st_objectname = af_ObjectName("w_main") l_st_objectname = Right(RightTrim(l_st_objectname), 2) IF l_st_objectname = "_e" THEN Open ( cur_main, "w_main_e") ELSE Open ( cur_main, "w_main_f") End If
et cela sans erreur.
alors que si je fais le code comme en PB version 7:
/* Open Window */ Open( cur_win, Af_fcn_language("w_win")) cela ne marche pas.
voici le code de la fonction Af_fcn_language()
// change name of object depending on the user language object_name = object_name + "_" + Lower(user_int_language) user_int_language est une Global variable qui contient un code 'E' pour anglais, 'F' pour français. return object_name //object_name contiendra la variable : w_main_e
merci pour vos réponses
Hors ligne
Bonjour,
N'oublies pas le [RESOLU] dans le titre de ce topic
Hors ligne
OK, d'accord pour le [resolu] mais je ne sais toujours pas pourquoi mon script marche en PB7 et pas en PB11.5
Hors ligne
freewarefw a écrit:
OK, d'accord pour le [resolu] mais je ne sais toujours pas pourquoi mon script marche en PB7 et pas en PB11.5
Peux-tu nous copier le script source de ta fonction Af_fcn_language() pour avoir son entête complète et peut-être pourrons nous t'apporter une réponse. (Dans le Library Painter, click droit sur ta fonction ou ton objet contenant la fonction puis choisi edit source dans le menu contextuel.)
Hors ligne
my 2 cents : est-ce que ça fonctionne en passant par une variable :
window cur_win String ls_win ls_win = Af_fcn_language("w_win") Open(cur_win, ls_win)
Hors ligne
je pensais aussi à passer par une variable intermédiaire. À mon avis, ça devrait marcher.
Hors ligne
Bonjour,
voici le code PB de la fonction Af_fcn_language().
j'en ai fait un export.
$PBExportHeader$af_fcn_language.srf global type af_fcn_language from function_object end type forward prototypes global function string af_fcn_language (string object_name) end prototypes global function string af_fcn_language (string object_name);// change name of object depending on the user language object_name = object_name + "_" + Lower(user_int_language) return object_name end function
et maintenant ci-dessous le détail de la fonction comme je la vois dans PB.
Definition du prototype de la fonction:
description de la fonction :
Access = public Return type = String Function name = Af_fcn_language
Pass by : value Argument type : String argument name : object_name
puis vient le script :
// change name of object depending on the user language object_name = object_name + "_" + Lower(user_int_language) return object_name
pour General Protection Fault : NON, cela ne marche pas car 'ls_win' est de type string. j'avais déjà essayé.
merci pour les réponses
Hors ligne
Bonjour,
J'ai fait une petite application test sur PB 11.5.2506. J'ai réimporté ta fonction, créer une variable globale (string user_int_language = "e") et les fenêtres adéquates.
Je n'ai aucun problème particulier avec :
Open(cur_win, Af_fcn_language("w_win"))
As tu fais un full rebuild à tout hasard ?
Hors ligne
buck a écrit:
As tu fais un full rebuild à tout hasard ?
Hors ligne
bonjour,
oui, j'ai fait un full rebuild et est toujours le même problème.
par contre quand je crée une autre application, pas de problème.
merci pour les réponses.
Hors ligne
Bonjour,
Il m'est aussi arrivé d'avoir l'objet en doublon dans une librairie (w_win_e) mais de type différent d'où ton message d'erreur (PB prend le premier objet disponible).
Pour le voir, tu supprimes l'objet dans le browser. Tu fermes et tu rouvres le browser et tu regardes si l'objet est toujours présent (oui => doublon).
Hors ligne
Bonjour,
merci pour les réponses.
Après avoir contrôler dans le browser les variables, je n'ai pas trouver de doublon.
Hors ligne
Hello all,
problème est réglé.
quand dans ma fonction
object_name = object_name + "_" + Lower(user_int_language)
user_int_language contient la valeur "E ", il y a un blanc et c'est cela que PB11.5 n'aime pas.
j'ai rajouté Lower(TRIM(user_int_language)) et cela marche.
merci à tous ceux qui m'ont aidé.
Hors ligne