Quoi, tu ne connais pas PB ? Va falloir parcourir tout le forum alors !

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 24-02-2012 08:51:48

Saria  
Membre Geek
Lieu: Lille
Date d'inscription: 24-02-2012
Messages: 25
Pépites: 117
Banque: 0

Récupérer les sources de l'ensemble des DataWindow

Bonjour,

J'aurais une petite question concernant les sources des DW, et j'aimerais savoir si une solution existe SVP.

Tout d'abord, je précise que je travaille en PB12, et que les bases sont des bases DB2 ou AS400 (selon les clients).

On me demande de vérifier si toutes les colonnes de toutes les DW sont bien de même type et de même taille que les champs des tables de la base de données.
En effet, on rencontre parfois des erreurs SQL lors de l'enregistrement lorsque les tailles des champs différent (par exemple, certaines tables ont évolué et les DW n'ont pas forcément été modifiées derrière), surtout chez nos clients qui tournent en AS400 (plus restrictif que DB2).

Seulement, dans notre code source, il y a une 50aine de bibliothèques, et plusieurs centaines voire sûrement plus d'un millier de DW.

Je voudrais donc savoir SVP s'il existait quelque chose d'automatique pour récupérer l'intégralité des sources des DW d'un projet (ou même d'une bibliothèque), plutôt que de sélectionner une à une toutes les DW et faire pour chacune d'elle à la main : clic-droit, Edit Source, Copier, Coller dans un fichier.

Merci d'avance.

Hors ligne

 

#2 24-02-2012 09:02:30

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

Re: Récupérer les sources de l'ensemble des DataWindow

Bonjour,

Tu devrais regarder du côté des fonctions : Library... :
LibraryDirectory => permet d'obtenir la liste des objets d'une pbl
LibraryExport => permet d'extraire un objet de la pbl (syntaxe de l'objet)

Hors ligne

 

#3 24-02-2012 09:10:49

Saria  
Membre Geek
Lieu: Lille
Date d'inscription: 24-02-2012
Messages: 25
Pépites: 117
Banque: 0

Re: Récupérer les sources de l'ensemble des DataWindow

Bonjour,

Merci pour ta réponse.
Je ne connaissais pas encore ces fonctions (ça ne fait que 6 mois que je travaille sous PB), je vais m'y pencher.

Hors ligne

 

#4 24-02-2012 14:38:17

Saria  
Membre Geek
Lieu: Lille
Date d'inscription: 24-02-2012
Messages: 25
Pépites: 117
Banque: 0

Re: Récupérer les sources de l'ensemble des DataWindow

Re,

J'ai testé ces fonctions et elles semblent bien correspondre à ma demande.

En effet, j'ai réussi à récupérer la liste de toutes les librairies via la fonction getLibraryList().
Ensuite, j'ai traité la chaine en enlevant les virgules séparatrices pour récupérer le nom de chacune des librairies.
Pour chacune de ces librairies, j'ai récupéré la liste de toutes les DW lui appartenant via la fonction librarydirectory(nom_de_la_librairie,DirDataWindow!)

De même, j'ai traité la chaîne, pour ne récupérer que les noms des DW une à une.

Et là, maintenant que j'ai pu automatiquement récupérer mes noms de librairies et mes noms de DW, j'ai un petit souci :

Code:

string ls_ret, ls_lib, ls_dw
ls_lib = récup du nom de ma librairie
ls_dw = récup du nom de ma DW

Si je mets ceci :

Code:

ls_ret = LibraryExport (ls_lib, ls_dw, ExportDataWindow!)

Ca me retourne une chaîne vide qui, selon l'aide de LibraryExport, signifie qu'il y a une erreur.

Par contre, quand je mets ça :

Code:

ls_ret = LibraryExport (ls_lib, "dw_truc_muche", ExportDataWindow!)

Si j'écris le nom de la DW à la main directement dans le code, cela fonctionne, je récupère bien tout le contenu source de ma DW

J'ai testé, j'suis passée en mode DEBUG, rien à faire :
- avec le nom de la DW écrit à la main, ça fonctionne.
- avec le nom de la DW dans une variable, ça ne fonctionne pas.
Pourtant, ma variable ls_dw contient bien exactement dw_truc_muche, j'ai fait un Trim de la chaîne avant de la passer en argument de LibraryExport pour être sûre qu'aucun caractère (espace, tabulation, retour chariot) ne traîne à gauche ou à droite.

Auriez-vous une explication SVP ?

Merci d'avance.

Hors ligne

 

#5 24-02-2012 15:27:25

Geo  
Membre completement Geek
Lieu: Binche
Date d'inscription: 15-12-2008
Messages: 119
Pépites: 378
Banque: 0

Re: Récupérer les sources de l'ensemble des DataWindow

Bonjour,

pour ton problème de LibraryExport je ne sais pas.
Par contre, il existe l'outil PBL Peeper (Google est ton ami pour le trouver) qui permet d'avoir la liste des colonnes de tous les DWO d'un Workspace (onglet 'List' en haut et onglet 'DW Columns' à droite).
Tu auras des lignes du type :
Column Name(A)        Object(B)            PBL(C)            Col #(D)    DB Name(E)                Data Type(F)    Updateable(G)    Where Clause(H)    Key(I)
msgtitle                d_definedmessages    overloaded.pbl        2        swe_messages.msgtitle        char(255)        No                            Yes                        No
...

Tu peux l'exporter dans Excel.
A partir de là, quelques formule te permettent de construire un SELECT pour récupérer les infos de la DB.
Tu as besoin de (supposons pour la ligne 3):
NomTable(J) = SI(ESTNUM(TROUVE(".";E3));GAUCHE(E3;TROUVE(".";E3 )-1);E3)
NomColonne(K) = SI(ESTNUM(TROUVE(".";E3));DROITE(E3;NBCAR(E3)-TROUVE(".";E3 ));E3)
Select(L) = CONCATENER("select USER_TAB_COLUMNS.DATA_TYPE, USER_TAB_COLUMNS.DATA_LENGTH from USER_TAB_COLUMNS where upper(USER_TAB_COLUMNS.TABLE_NAME) = upper('";J3;"') and upper(USER_TAB_COLUMNS.COLUMN_NAME) = upper('";K3;"')")

Tu n'as plus qu'à exporter en Excel les résultats des selects (attention à l'ordre) et effectuer les comparaisons avec ceux de l'export de PBL Peeper.

Voilà une autre piste si tu ne t'en sors pas avec les LibraryExport.

J'espère que je ne me suis pas trop emmêlé les balises


Rien ne sert de courir, il faut partir à point .

Hors ligne

 

#6 24-02-2012 15:33:47

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: Récupérer les sources de l'ensemble des DataWindow

Bonjour,

Saria a écrit:

...

Code: pb

string ls_ret, ls_lib, ls_dw
ls_lib = récup du nom de ma librairie
ls_dw = récup du nom de ma DW

Si je mets ceci :

Code: pb

ls_ret = LibraryExport (ls_lib, ls_dw, ExportDataWindow!)

Ca me retourne une chaîne vide qui, selon l'aide de LibraryExport, signifie qu'il y a une erreur.

Par contre, quand je mets ça :

Code: pb

ls_ret = LibraryExport (ls_lib, "dw_truc_muche", ExportDataWindow!)

Si j'écris le nom de la DW à la main directement dans le code, cela fonctionne, je récupère bien tout le contenu source de ma DW
...
Auriez-vous une explication SVP ?

Merci d'avance.

juste pour être sûre, tu devrais essayer

Code: pb

string ls_dw
ls_dw = "dw_truc_muche"
ls_ret = LibraryExport (ls_lib, ls_dw, ExportDataWindow!)

Sinon en debug dans le Quick Watch, évalue  ( ls_dw = "dw_truc_muche" ) qui devrait répondre "true".
tu as fait quoi Trim( ls_dw ) ou Trim( ls_dw, TRUE ) ? (le dernier retire aussi les tabulations qui ne sont pas toujours visible...)

Dernière modification par xlat (24-02-2012 15:34:40)


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

www.ngs.ma

Hors ligne

 

#7 24-02-2012 15:49:02

Saria  
Membre Geek
Lieu: Lille
Date d'inscription: 24-02-2012
Messages: 25
Pépites: 117
Banque: 0

Re: Récupérer les sources de l'ensemble des DataWindow

Merci pour vos réponses.

Effectivement, si je mets :

Code:

boolean lb_test
lb_test = (ls_dw = "dw_truc_muche")

lb_test vaut false.

J'ai donc fait :

Code:

ls_dw = trim(ls_dw, TRUE)
lb_test = (ls_dw = "dw_truc_muche")

Et dans ce cas, lb_test vaut bien true, et LibraryExport fonctionne !

Merci beaucoup pour vos réponses rapides, j'avoue que je suis agréablement surprise (je pensais que PB n'était plus aussi utilisé et je ne pensais pas trouver un forum encore si actif).

Merci aussi pour l'outil PBL Peeper, je m'y pencherai dès lundi.

Bon week-end à tous !

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22