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.
  • Index
  •  » Powerscripts
  •  » Accéder à une propriété d'une structure via un paramètre
  • 1 évaluations, moyenne 5

#1 21-06-2012 16:00:06

jordel  
Membre completement Geek
Lieu: Creil
Date d'inscription: 06-05-2011
Messages: 133
Pépites: 286
Banque: 0
Site web

Accéder à une propriété d'une structure via un paramètre

Bonjour à tous... et vive l'été

Alors... j'ai un léger contretemps et je viens vers vous, oui vous devant votre écran, pour m'aider (ou essayer) ;)
Donc, revenons-en à mes moutons... je m'égare, je m'égare, foufou que je suis !

J'ai donc un joli bout de code que j'aimerai optimiser...
J'ai une fonction à laquelle je passe 2 paramètres : le nom d'une propriété et un indice. Et je souhaite savoir si la propriété de ma structure globale est nulle :

Code:

boolean lb_retour
lb_retour = false

if trim(gstruct_maStructure[alIndice].asChamp) <> "" then
  lb_retour = true
end if
        
return lb_retour

Hélas, cela ne convient guère à PB qui ose m'insulter après de si nombreuses et joyeuses lignes de codes fournies !

Qu'ai-je donc fait pour mériter son mépris ?

Merci d'avance et portez-vous bien ! (Vale bien pour les Latins)


J'ai le bras long... et au bout de ce bras, il y a Chuck Norris !

Hors ligne

 

#2 21-06-2012 17:21:29

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Accéder à une propriété d'une structure via un paramètre

Tu n'as pas publié le prototype de ta fonction.

Mais si j'ai bien compris, si tu passes "x" dans asChamp tu voudrais accéder à tastructure[tonindice].x ?
Ca n'est pas possible en pb de base.

Par contre ça l'est via CWGetField(), une fonction de l'extension PbniCW chez moi


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#3 21-06-2012 18:45:39

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: Accéder à une propriété d'une structure via un paramètre

Bonjour,

Ou alors, de façon indigeste :

Code: pb

CHOOSE CASE as_champ
  CASE "as_param1"
     IF trim(gstruct_maStructure[alIndice].as_param1) <> "" THEN  lb_retour = true
  CASE "as_param2"
     IF trim(gstruct_maStructure[alIndice].as_param2) <> "" THEN  lb_retour = true
END CHOOSE

Hors ligne

 

#4 22-06-2012 07:19:03

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: Accéder à une propriété d'une structure via un paramètre

Ah oui, c'est comme cela qu'on faisait avant que xlat ne code CWGetField.

C'est assez lourd à maintenir (il faut penser à modifier le code chaque fois qu'on modifie la structure) mais ça peut être une solution acceptable ne nécessitant aucune extension.


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#5 22-06-2012 08:15:52

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: Accéder à une propriété d'une structure via un paramètre

Une autre méthode pour compléter serait de décrire la structure dans un datastore, puis d'alimenter la datastore par la structure.

Datawindow Reference / Accessing Data in Code / Techniques for accessing data / About DataWindow data expressions / Getting and storing the data from a DataWindow data expression

F1 a écrit:

...
A structure that matches DataWindow columns   In this example, a DataWindow object has four columns:

An ID (number)
A name (string)
A retired status (boolean)
A birth date (date)

A structure to hold these values has been defined in the Structure painter. It is named str_empdata and has four elements whose datatypes are integer, string, boolean, and date. To store the values of an expression that accesses some or all the rows, you need an array of str_empdata structures to hold the data:

str_empdata lstr_currdata[]

lstr_currdata = dw_1.Object.Data

After this example executes, the upper bound of the array of structures, which is variable-size, is equal to the number of rows in the DataWindow control.
...

J'ai testé çà fonctionne (sauf que j'ai pas réussi à mappé le type boolean en datawindow, si quelqu'un sait!)

çà pourrait donner çà :

Code: pb

boolean lb_retour
lb_retour = false
datastore lds
lds = create datastore
lds.dataobject = "dw_mastructure"  //il faut la définir avec les colonnes dans le bon order et bon type de données
lds.insertrow(0)
lds.object.data[1] = gstruct_maStructure[alIndice]
if trim(lds.GetItemString( 1, asChamp)) <> "" then
  lb_retour = true
end if
destroy lds
return lb_retour


le truc avec cette méthode c'est le GetItemXXX sur la datastore; il faudrait par exemple se coder un GetItemAny( row, column ) { return object.data[row, long(describe(column+".id"))] } sur un heritier de datastore par exemple.


https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 

#6 05-07-2012 12:49:01

arkiane  
Membre
Date d'inscription: 03-03-2008
Messages: 4
Pépites: 100,009
Banque: 0

Re: Accéder à une propriété d'une structure via un paramètre

(sauf que j'ai pas réussi à mappé le type boolean en datawindow, si quelqu'un sait!)

En SQL, ce qui se rapproche le plus serait le type BIT [NULL, 0, 1] mais il faut bien gérer le NULL.
Cela correspond au type Number dans les datawindows.

Pour les checkbox ( Checked = 1 [True] et UnChecked = 0 [False])

Lorsque nous en avons besoin de boolean dans les scripts,  nous effectuons la convertion avec 2 functions :

Code:

global type f_bittoboolean from function_object
end type

forward prototypes
global function boolean f_bittoboolean (any aa_value)
end prototypes

global function boolean f_bittoboolean (any aa_value);boolean lb_return
if isnull(aa_value) then
  setnull(lb_return)
else
  if integer(aa_value) = 0 then
    lb_return = false
  else
    lb_return = true
  end if
end if

return lb_return
end function

Code:

global type f_booleantobit from function_object
end type

forward prototypes
global function integer f_booleantobit (boolean ab_value)
end prototypes

global function integer f_booleantobit (boolean ab_value);integer li_return
if isnull(ab_value) then
  setnull(li_return)
else
  if  ab_value = true then
    li_return = 1
  else
    li_return = 0
  end if
end if

return li_return
end function

Il faut également utiliser le paramètre de connexion à la BdD "StaticBind=0"

C'est ce que nous utilisons mais il y a peut-être mieux.

Dernière modification par arkiane (05-07-2012 13:17:57)

Hors ligne

 

#7 05-07-2012 13:40:43

xlat  
0xc0000005
Award: bf
Lieu: Tanger (طنج)
Date d'inscription: 04-12-2010
Messages: 720
Pépites: 11,343
Banque: 100,221,387,868,884,300
Site web

Re: Accéder à une propriété d'une structure via un paramètre

arkiane a écrit:

(sauf que j'ai pas réussi à mappé le type boolean en datawindow, si quelqu'un sait!)

En SQL, ce qui se rapproche le plus serait le type BIT [NULL, 0, 1] mais il faut bien gérer le NULL.
Cela correspond au type Number dans les datawindows.
...

Oui mais j'ai déjà tenté ma chance avec le type number pour le champ boolean et la *magie* de powerbuilder fait que l'exemple fournit dans la doc plante en runtime au moment de faire l'affectation :

Code: pb

lds.object.data[1] = gstruct_maStructure[alIndice]

https://lut.im/eJINqa9o/vAtyxD0h "Don't believe everything you read on the Internet"
    -- Abraham Lincoln

www.ngs.ma

Hors ligne

 
  • Index
  •  » Powerscripts
  •  » Accéder à une propriété d'une structure via un paramètre
  • 1 évaluations, moyenne 5

Pied de page des forums

Propulsé par FluxBB 1.2.22