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 09-07-2007 10:21:24

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

[ASTUCE] Privilégiez les fonction getItemX

Juste pour vous rappeler que les fonction GetitemX (getItemString, getItemDate, getItemDecimal, getItemNumber, ...) sont plus rapides que la notation pointée dont tout le monde est si friand ici


never let people work on more than one thing at once.

Hors ligne

 

#2 09-07-2007 12:16:47

Chrnico  
N2I Power
Award: bf
Lieu: Vanves
Date d'inscription: 05-06-2007
Messages: 1206
Pépites: 12,884,901,943
Banque: 9,223,372,036,854,776,000
Site web

Re: [ASTUCE] Privilégiez les fonction getItemX

Je suis d'accord avec toi.  Cependant, il est important de préciser que la notation pointée est l'équivalent d'un GetItemAny (qui n'existe pas en PB et c'est bien dommage). C'est plus souple pour les parties de script gérant des comportement dynamique (type de la colonne connue à l'exécution), mais d'aucune utilité si le type de la colonne est déterminé dès le dev voir même dangeureux dans ce dernier cas puisque les erreurs d'affectation ne seront connues qu'à l'exécution et non à la compil....


Tu dois donc tu peux (Kant)

Tu peux donc tu dois (N2i)
www.n2i.fr

Hors ligne

 

#3 09-07-2007 13:22:55

rincevent  
Modérateur
Award: bf
Lieu: Belgique
Date d'inscription: 06-02-2007
Messages: 722
Pépites: 100,002,023
Banque: 0

Re: [ASTUCE] Privilégiez les fonction getItemX

perso pour gagner 0.0000000000001 s par getitem je ne m'en tracasse pas du tout.

l'argument "type de données" me parait bien plus important


http://img114.imageshack.us/img114/8519/userbar175801nb.gif
Pourquoi ne puis-je vivre comme n'importe quel être humain ? Pourquoi mon destin est-il de ne pouvoir cesser de me battre ?

Hors ligne

 

#4 31-07-2007 10:12:37

Tonio  
Membre
Lieu: Lille
Date d'inscription: 30-07-2007
Messages: 10
Pépites: 30
Banque: 0

Re: [ASTUCE] Privilégiez les fonction getItemX

Autre inconvénient de la notation pointée (en plus d'être moins rapide que les getitem..) :
il faut éviter de les utiliser dans des expressions trop complexes sans quoi on s'expose à des comportements bizarres. En fait la bonne pratique c'est de passer par une variable (affecter dw.object.macolonne[i] dans une variable et ensuite l'utiliser pour votre traitement)

Hors ligne

 

#5 10-08-2007 14:52:33

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [ASTUCE] Privilégiez les fonction getItemX

Quelles sont les réelles différences entre ces deux notations ? On m'avait parlé d'une différence de comportement dans l'évènement ItemChanged, à savoir que la notation dw_1.Object.monchamp[1] retournait la valeur saisie (le data) alors que la notation dw_1.getItemX(1, "monChamp") retournait la valeur du buffer Primary!, à savoir la valeur précédant la modification... mais je crois que c'est une légende urbaine...

Hors ligne

 

#6 10-08-2007 15:07:47

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: [ASTUCE] Privilégiez les fonction getItemX

sbouvetJD a écrit:

... mais je crois que c'est une légende urbaine...

OUI !

L'autre différence (la première a été exposée par Chrnico) est que la notation pointée te permet de récupérer un bloc de données d'un seul coup (une ligne, plusieurs lignes, une colonne, un bloc...)


never let people work on more than one thing at once.

Hors ligne

 

#7 10-08-2007 15:11:52

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: [ASTUCE] Privilégiez les fonction getItemX

sbouvetJD a écrit:

Quelles sont les réelles différences entre ces deux notations ? On m'avait parlé d'une différence de comportement dans l'évènement ItemChanged, à savoir que la notation dw_1.Object.monchamp[1] retournait la valeur saisie (le data) alors que la notation dw_1.getItemX(1, "monChamp") retournait la valeur du buffer Primary!, à savoir la valeur précédant la modification... mais je crois que c'est une légende urbaine...

Ben moi dernièrement j'ai codé l'evenement itemchanged pour une datawindow qui contient entre autre des radio buttons. Avec la notation dw_1.Object.monchamp[1] j'obtenais la valeur du buffer Primary!, celle d'avant la modification. Je peut dire que ça m'a vraiment fait ch... de ne pas comprendre pourquoi le code executé était toujours celui de l'autre option (j'ai deux options dans mon radio button).

Pour ma part la solution que j'ai trouvé c'est de declencher en post un evenement de la fenêtre (qui contiendra mon script) où se trouve la datawindow pour être sur que l'evenement itemchanged soit bien fini (et donc que les valeurs que je retrouve soient bien mises à jour)

PS : Je n'ai pas essayé avec la methode getItemX(1, "monChamp"), je la testerais surement la semaine prochaine (en ce moment je suis sur mon projet java)


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#8 10-08-2007 15:16:58

sbouvetJD  
Chasseur d'y voir ?
Lieu: LYON
Date d'inscription: 29-03-2007
Messages: 185
Pépites: 147,483,921
Banque: 13,317,684,827,902,405
Site web

Re: [ASTUCE] Privilégiez les fonction getItemX

Une solution (pas très clean, mais au point où on en est), est de faire un AcceptText() dans ton ItemChanged avant de récupérer tes valeurs. C'est sale, mais ça marche (enfin je crois ).
Ou, mieux, tester la valeur de dwo.name et ton data. C'est bien si tu as 3 champs sur ta DW, mais (comme on a le cas présentement) quand tu en as une vingtaine, no way

Hors ligne

 

#9 10-08-2007 15:44:14

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: [ASTUCE] Privilégiez les fonction getItemX

sbouvetJD a écrit:

C'est sale, mais ça marche (enfin je crois ).

Pas vraiment ->

PowerBuilder HELP a écrit:

AcceptText in the ItemChanged event Calling AcceptText in the ItemChanged event has no effect.

sbouvetJD a écrit:

Ou, mieux, tester la valeur de dwo.name et ton data.

OUI !!!!

sbouvetJD a écrit:

C'est bien si tu as 3 champs sur ta DW, mais (comme on a le cas présentement) quand tu en as une vingtaine, no way

CHOOSE CASE dwo.name.... c'est pas tres compliqué


Nephtis, tu auras le même comportement avec getItemX. En effet, PB déclenche l'evt ItemChanged pour TE permettre (en tant que développeur) de vérifier la validité de la donnée saisi par l'utilisateur ?A ce moment elle n'a pas été validée.  Il est donc logique que getItemX (ou la notation pointée) ne te renvoie pas la nouvelle valeur, mais l'actuelle.

Il y a une solution un tout petit peu plus simple que ton "post_Itemchanged", c'est d'utiliser la variable "data" que PB met gracieusement à ta disposition.

Messieurs


never let people work on more than one thing at once.

Hors ligne

 

#10 10-08-2007 15:51:19

Nephtis  
Bienfaiteur du site
Award: bf
Lieu: Longjumeau
Date d'inscription: 29-06-2007
Messages: 665
Pépites: 17,189,873,958
Banque: 9,223,372,036,854,776,000

Re: [ASTUCE] Privilégiez les fonction getItemX

shahin a écrit:

Messieurs,

La honte , j'ai déjà eu une formation sur PowerBuilder et j'ai même pas pensé à l'argument data (je sens que je lundi je vais modifier tout de suite le code pour être plus propre )


Qui sème des problèmes, récolte des réponses.
PB 6.5 || ASE 12.5.4 || XP SP3

Hors ligne

 

#11 10-08-2007 15:53:55

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: [ASTUCE] Privilégiez les fonction getItemX

N'ait pas honte. Quand on sort de formation, l'idéal est de plonger à 100%. Or, tu est à 50% sur PB et à 50% sur Java


never let people work on more than one thing at once.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22