Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
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
Hors ligne
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....
Hors ligne
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
Hors ligne
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
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
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...)
Hors ligne
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)
Hors ligne
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
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
Hors ligne
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 )
Hors ligne
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
Hors ligne