Après windows pour les nuls, voici PB pour les bons (ou presque).

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 13-09-2006 08:31:17

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Astuces Powerbuilder

-    Afin d'éviter tout problème de concurrence sur les objets d'une même application développée par plusieurs personnes, PowerBuilder propose les options Check-In/Check-Out qui recopie les objets utilisés du répertoire partagé vers le répertoire local en interdisant leur accès à tout autre développeur. Dans l'autre sens l'objet est déplacé.

-    Les formats de date (date/datetime) ne se gèrent pas de la même manière en Sybase et en PowerBuilder. Pour passer outre ces incompatibilités, il faut recevoir la date (datetime) dans une variable déclarée en string et faire la conversion de string à datetime directement dans PowerBuilder.

-    Pour faire une DropDownDataWindow qui n'a aucun lien avec une autre DataWindow et donc qui ne peut être remplie par l'intérmédiaire d'un retrieve/ShareData sur une DataWindow mère, il suffit de faire un InsertRow et ensuite de la manipuler comme une DataWindow. Ceci peut servir lorsque on veut afficher une liste de champs provenant d'une table.

-    Il est parfois intéressant de ramener plusieurs colonnes dans un format DropDownDataWindow, pour résoudre ce problème il faut faire un champ Compute (concaténation des colonnes demandées) dans la requête ramenant les infos et ensuite le traiter comme s'il ne s'agissait que d'une seule colonne.

-    Pour qu'un ShareData fonctionne, il faut:
1.    Le même nombre de colonnes dans les deux DataWindow
2.    Le même type pour chaque colonne dans les deux DataWindow
3.    La même longueur de colonne dans les deux DataWindow

-    Ne pas employer de  RowsCopy avec les ShareData.

-    La fonction RowsCopy insére des lignes et les remplis dans une DataWindow à partir d'une autre DataWindow ayant la même définition(taille,longueur, type des colonnes). Les nouvelles lignes auront le statut NewModified.

-    Pour vérifier la valeur d'un champ d'une DataWindow, il est nécessaire de savoir que à chaque champ d'une DataWindow correspondent deux buffers:
1.    Celui qui contient du champ au moment ou on le remplit. Pour obtenur la valeur de ce champ, on utilisera l'instruction GetText()
2.    Celui qui contient la valeur une fois que le focus a quitter le champ. Cette valeur sera alors disponible dans l'événement ItemChanged, après un Retrieve ou encore après un AcceptText de la DataWindow. Pour obtenir la valeur de ce champ on utilisera les instructions GetItem.

-    Pour vérifier l'absence de valeur dans un champ, outre l'instruction IsNull(), on comparera aussi la valeur du champ à '' si on teste une valeur alphanumérique et à 0 si celle-ci est numérique.

-    En PowerBuilder, len(Null)=Null

-    Ne pas ouvrir une fenêtre de type Response dans le script Open d'une fenêtre Response, cela génère un blocage  et perd la fenêtre Main irrémediablement.

-    Avec InsertRow() la ligne insérée n'est pas nécessairement sélectionnée.

-    Les informations renvoyées par l'intérmédiaire de l'instruction CloseWithReturn() sont récupées dans le scriptqui a ouvet la fenêtre concernée. Ces informations se trouve dans l'objet message.Xparm de la fenêtre dans lequel on a l'open de la fenêtre en cours de fermeture.

-    La fonction GetNextModified() peut également ramener les lignes supprimées. Il suffit de préciser le buffer DELETE. On peut également récupérer des infos des lignes supprimées en utilisant les fonctions habituelles GetItem() avec le buffer DELETE également précisé. Par défaut ces instructions se basent sur le buffer PRIMARY, il ne faut donc pas oublier de spécifier le flag à FALSE obligatoire lorsque l'on spécifie le buffer (FALSE renvoie les valeurs actuelles, TRUE les valeurs d'origine).

-    l'évenement Open d'une fenêtre est celui qui prend le plus de temps, de plus la fenêtre ne s'ouvre qu'à la fin de ce script. C'est pour cette raison que nous ne mettrons pas de Retrieve() dans ce script.

-    Il est possible que l'emploi de Modify() sur  DropDownDataWindow change la référence de cette DataWindow. Dès lors, les fonctions telles que Find(), Filter() ne donneront pas les résultats escomptés. Pour corriger cette perte de référence, on insérera un GetChild juste avant leur emploi.

-    La fonction UPDATE s'inspire du SELECT pour former les requêtes de mise à jour. Les crièteres sont modifiés lorsque le SELECT est modifiés. Pour empecher cela il faut aller dans le menu Rows --> Update.

-    Il est possible de gérer chaque erreur avec un traitement particulier. Celle-ci activent l'événement systemerror application. Pour ce qui est des erreurs rendues par une procédures stoquées, seules les erreurs 'raised' sont interceptées dans cet événement. Les autres(mauvais formats de variables...) seront traités avant l'appel au serveur.

-    L'événement systemerror peut être aussi généré par la fonction SignalError().

-    Une DataWindow se  base sur l'ordre des valeurs que lui ramène la procédure ou l'ordre SQL, et donc associe ses champs aux valeurs ramenées.

-    Une fonction externe se déclare dans External Global Fonction en précisant ce qu'elle renvoie ainsi que ses différents paramètres.

-    La fonction GetSelectedRow() renvoie la première ligne sélectionnée après celle spécifiée comme pramètre. La ligne séléctionnée ou courante est donné par la fonction GetRow().

-    Afin d'avoir une bonne régénération des objets, il faut veiller à n'avoir qu'un seul exemplaire de chaque objet. Il faut aussi savoir que lors de l'exécution de l'application, c'est le premier trouvé qui est pris.

-    Pour mettre une valeur par défaut dans une colonne d'une DataWindow, il suffit de la mettre dans Initial values de row du menu du painter de la DataWindow.

-    Pour ouvrir une fenêtre dont on a le nom sous forme de chaîne de caractères, d'abord on déclare une variable de type fenêtre et on assignz à une variable de type string, la chaîne contenant le nom de la fenêtre. On utilise la fonction OpenWithParm() de la manière suivante: OpenWithParm(variable de type fenêtre, paramètre,nom de la fenêtre).

-    La fonction GetSqlPreview() donne l'instruction SQL correspondant à la DataWindow sur laquelle porte la fonction.

-    Si l'on veut créer un executable sans passer par la création d'un projet, il faut:
1.    Selectionner un fichier *.exe.
2.    Dans la liste des Pbls(basée sur la librairy-list de l'application), on sélectionnera celle qui seront crées en Pbd et on laisse celles que l'on veut mettre à l'intérieur de l'exe.
3.    Préciser le fichier *.pbr (fichier contenant les chemins des différents fichiers utilisés dans le Bmp.
4.    Construire les Pbds.

-    Il est préférable de ne pas spécifier l'autoHeight pour une DataWindow affichant les données sous forme de groupe.

-    Les hauteurs(h) des barres header-detail-footer d'une DataWindow doivent être positive.

-    La majorité des attributs d'une DataWindow sont modifiables dynamiquement, c'est à dire qu'il est possible pour une même colonne d'afficher une entrée tantôt en gras, tantôt en italique suivant un test.

-    Il est également possible de surcharger les fonctions en PowerBuilder, on appèlera la fonction d'un objet ancêtre en utilisant la syntaxe: super::NomDeFonction.

-    L'objet SQLCA renvoie plusieurs codes:
1.    SQLCODE: code renvoyé par les instructions SQL .
2.    SQLDBCODE: code renvoyé par le DBMS (raised errors).
3.    SQLERRTEXT: message associé au SQLDBCODE.

-    La fonction FindRequired() teste la présence de valeur dans tout les champs marqués Required.

-    Afin de pouvoir manipuler les données de la vase à partir de PowerBuilder ( Insert/Update/Delete), il faut que les tables contenant ces données soient indéxées.

-    La fonction GetColumnName() renvoie la colonne sur laquelle on arrive lorsqu'elle est utilisée dans l'événement ItemFocusChanged, alors qu'elle renvoie la colonne de laquelle on part lorsqu'elle est utilisée dans l'événement ItemChanged.

-    PowerBuilder fournit deux outils permettant de débugger le code. D'une part, toutes les instructions SQL passant de l'application client au serveur, et d'autre part les instructions PowerBuilder par lesquelles passe l'application:
1.    Pour obtenir dans un fichier(pbtrace.log) tout les accès avec le serveur, on spécifiera dans le *.ini, dans la ligne spécifiant le DBMS l'option Trace. Par exemple, DBMS=syc --> dbms= trace sycs
2.    Pour obtenir dans un fichier(appli.dbg) le tracé de toutes les instructions PowerBuilder, on lancera l'application en mentionnant l'option \pbdbug. Par exemple: appli.exe --> appli.exe /pbdebug


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#2 14-11-2006 13:56:49

Gaouargas  
Membre
Lieu: BINCHE
Date d'inscription: 14-11-2006
Messages: 3
Pépites: 13
Banque: 0

Re: Astuces Powerbuilder

Bonjour,

je vois que vous parlez de source contrôl dans votre première astuce (celle intégrée dans PB je suppose).  Ce source contrôl est il fiable ? A l'époque de PB6.5 nous avions rencontré des problèmes (dead lock) sur certains objets (sans trop savoir pourquoi...). Nous sommes actuellement en PB 10.2.1 mais avec un autre source contrôl.

Merci

Hors ligne

 

#3 15-11-2006 14:52:10

Doctor Z  
Moderador
Award: PanchoeNacho
Lieu: Vale Figueira (Lisbonne)
Date d'inscription: 30-05-2006
Messages: 756
Pépites: 1,003,082
Banque: 877,135,234,297,804

Re: Astuces Powerbuilder

Bonjour,

Tu peux être confronté à ce cas de figure si par exemple, le poste
sur lequel tu as checké ton objet, tu le formate ... Sur ton serveur,
il sera toujours checké, mais comme la référence n'existe plus de
l'autre côté, et bien tu as un dead lock.

D'autres cas de figures existent où tu peux être confronté à ce
genre de phénomène ...

Sur les versions plus récentes de PB (9, 10, ...), le source control
me semble effectivement plus robuste. Comme toi, je n'utilise pas
le source control de PB, mais Microsoft Visual SourceSafe qui
fonctionne très bien et apporte pas mal de fonctionnalités
supplémentaires.


http://www.userbars.com/i/543606.gif
Olivença, l'oubliée
Si tu es alentejane, que Dieu te bénisses, si tu ne l'es pas, que Dieu te pardonnes.

Hors ligne

 

#4 16-11-2006 14:24:01

Doctor Z  
Moderador
Award: PanchoeNacho
Lieu: Vale Figueira (Lisbonne)
Date d'inscription: 30-05-2006
Messages: 756
Pépites: 1,003,082
Banque: 877,135,234,297,804

Re: Astuces Powerbuilder

// ********************
Message de modération :

Merci de créer un nouveau sujet afin de poser
cette question.

Cordialement.

Doctor Z
// ********************


http://www.userbars.com/i/543606.gif
Olivença, l'oubliée
Si tu es alentejane, que Dieu te bénisses, si tu ne l'es pas, que Dieu te pardonnes.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22