Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bien le bonsoir z'amis powerbuildiens, avant toute chose moults merci à ce forum d'exister (même si je suis loin de tout comprendre aux conseils qui y sont donnés).
Donc pour situer, je ne connais pas grand chose à PB (ou encore une néophyte totale), mais mon client me fait depuis quelques temps maintenir des applis codées sous Sysbase PB11. Plus habituée à du Java et à des projets web je galère un peu.
Et en ce moment je suis confrontée à un souci qui doit sûrement être très facile à résoudre, mais je tourne en rond, d'où mon appel à l'aide : Help >_< Il s'agit d'une fenêtre découpée en onglets, laquelle récupère des champs en String dans un fichier texte. (tous les champs à la suite sur la même ligne, dans le fichier texte. D'où la nécessité d'une appli dédiée. Et donc, dans un de ces onglets, j'affiche des champs, que je souhaiterai désormais pour des histoires de place disponible visuellement déplacer dans une autre fenêtre, qui s'affiche au clic sur un bouton positionné dans mon onglet.
Pas de souci pour créer ma nouvelle fenêtre et l'ouvrir avec mon nouveau bouton, cependant je n'arrive pas à correctement faire passer mon buffer string en cours en paramètre vers ma nouvelle fenêtre. (et donc à correctement afficher les champs que j'ai déplacés dans la nouvelle fenêtre). J'utilise openwithparm.
En fait, ma chaîne de caractères du buffer "en cours de traitement sur l'onglet" est définie en local dans le constructeur de l'onglet, et fait un message.StringParm pour récupérer ce qu'on lui passe en paramètre. Hors, l'évènement "clicked" de mon bouton ne voit pas ce String. Et lorsque je fais un message.StringParm à ce niveau, forcément ça me renvoie n'importe quoi.
Je pense que je fais fausse route et que je n'ai pas la bonne logique PowerBuilder pour aborder le problème. Dois-je définir au niveau de mon constructeur un autre objet plus "permanent" (datastore..?) pour stocker mon buffer et pouvoir y faire appel depuis le clicked du bouton ? Ou alors définir tous les champs de cet onglet, aujourd'hui définis en String et récupérés via la fonction mid(), sous forme d'une datawindow, plus facile à manipuler pour ce que je veux en faire ?
J'espère que je ne me suis pas trop embrouillée en expliquant mon problème
D'avance merci pour toute piste ou idée !
Dernière modification par TigerTigerTiger (17-08-2010 16:42:50)
Hors ligne
Bonjour et
Dans ton constructeur ta variable est locale ?
Pour qu'elle soit accessible n'importe où dans la fenêtre, il faut la définir en variable d'instance de la fenêtre (String is_param).
Hors ligne
Merci pour ta réponse erasorz !
A ta réponse + quelques petits recherches je viens de comprendre que les préfixe des variables conditionnaient largement leur type/scope en PB .. d'où le is_param !
Je teste ça dès demain
Hors ligne
Non pas du tout il ne faut pas confondre avec vb6, où tu peux marquer les types avec des signes comme $.
Il s'agit de convention de nommage, destinée à faciliter la lecture de code.
<portée><type>_nom
où portée :
l : local
i : instance
s : shared
g : global
type : attention, plusieurs conventions coexistent.
l : long
d : date
dt : datetime
x ou dc : decimal
s : string
pour en revenir à ton problème de base, je ne peux que paraphraser erasorz.
A savoir, déclare ta variable dans l'onglet "declare instance variable" de ta fenêtre.
Hors ligne