J’avais créé le programme DESCFIC, il y a une dizaine d’années, dans le but de disposer d’un programme d’édition de description de fichier DB2/400. Ce programme, dont je me sers encore aujourd’hui, avait besoin d’un sérieux toilettage, je l’ai donc réécrit en RPG au format libre (free). J’ai conservé dans le fichier ZIP joint à cet article l’ancienne version écrite en RPG délimité, car elle constitue un excellent moyen de se familiariser avec les différences de syntaxe relatives à ces 2 versions du langage RPG.
Si vous avez déjà utilisé la commande standard de l’AS/400 DSPFD, vous savez comme moi combien elle est indigeste dans sa présentation et difficile à utiliser au quotidien. La commande DESCFIC permet donc d’imprimer un spoule contenant la description d’un fichier base de données AS/400. Merci à Christian Kraemer qui m’a transmis une nouvelle version de cet utilitaire, version à laquelle il a ajouté l’édition des critères de sélection dans le cas des fichiers logiques sélectifs.
Cette commande, associée à la touche F4, fait apparaître l’écran suivant :
DESCRIPTION DE FICHIER (DESCFIC)
Indiquez vos choix, puis appuyez sur ENTREE.
NOM FICHIER . . . . . . . . . . __________ Nom
BIBLIOTHEQUE . . . . . . . . . *LIBL Nom, *LIBL
Exemple de description de fichier éditée par la commande DESCFIC (le fichier décrit
est complètement bidon) :
Fichier : FCL510L1 Bibl. : QGPL Type : LF
Desc. : fichier logique client
Format : ENRFCL Membre : FCL510L1
Fichier sous-jacent : QGPL/FCL510P
Clé. Nom champ. Lg. D. T Description de la zone............ Pos.Buff.
1 A CFONUM 7 0 S N° DE CLIENT 1 6
CFODTS 30 A RAISON SOCIALE 7 36
CFOSTT 1 A STATUT 37 37
CFOUSC 10 A UTILISATEUR DE CREATION 38 47
CFODTC 8 0 S DATE DE CREATION 48 55
CFODTR 8 0 S DATE Rà‰CEPT. COMP 56 63
Commentaires :
Le type « LF » indique qu’il s’agit d’un fichier logique, le type « PF » apparaîtrait s’il s’agissait d’un fichier physique.
Le fichier « sous-jacent » est le fichier physique auquel est rattaché le fichier logique FCL510L1. Si on avait édité la description du fichier FCL510P, on aurait obtenu la liste des fichier logiques dépendants du physique.
la colonné « Clé » indique la position de la zone dans la clé du fichier. Le caractère qui suit, qui peut être « A » ou « D », indique s’il s’agit d’une clé « Ascendante » ou « Descendante ».
la colonne « D. » indique le nombre de décimales pour les zones numériques uniquement.
la colonne « T » indique le type de zone qui peut être « A » pour « Alphanumérique », « S » pour numérique « étendu » ou « P » pour numérique « paqué ».
la colonne « Pos. Buff. » indique les positions de début et de fin de chaque zone dans le buffer de fichier.
ATTENTION : Les informations données par la commande DESCFIC ne proviennent pas du fichier source qui a servi à créer l’objet fichier. Les informations sont en fait prélevées directement au niveau de l’objet fichier au moyen des commandes AS/400 DSPFD (pour les informations de base), DSPFFD (pour la liste des zones), DSPDBR (pour les dépendances), etc… Elles sont par la même occasion stockées dans des fichiers temporaires (créés dans la bibliothèque QTEMP) pour être ensuite relues par le programme d’impression RPG (DESFICP).
Objet | Type | Attribut | Description |
DDSBAS | *FILE | PF-DTA | Sortie de DSPFD TYPE(*BASATR) |
DDSDBR | *FILE | PF-DTA | Sortie de DSPDBR |
DDSDEP | *FILE | PF-DTA | Sortie de DSPFD TYPE(*MBR) |
DDSFMT | *FILE | PF-DTA | Sortie de DSPFD TYPE(*RCDFMT) |
DDSKEY | *FILE | PF-DTA | Sortie de DSPFD TYPE(*ACCPTH) |
DDSMBR | *FILE | PF-DTA | Sortie de DSPFD TYPE(*MBRLIST) |
DDSSEL | *FILE | PF-DTA | Sortie de DSPFD TYPE(*SELECT) |
DDSZON | *FILE | PF-DTA | Sortie de DSPFFD |
Enchaînement des programmes :
CMD DESCFIC --> CLP DESCFIC --> RPG DESFICP (impression)
Par rapport à l’ancienne version, la nouvelle version écrite en RPG Free offre quelques améliorations :
elle édite la liste intégrale des fichiers physiques sous-jacents d’un fichier logique joint (l’ancienne version n’éditait que le premier fichier)
en plus du nom DDS des colonnes, elle édite également le nom long Adelia des dites colonnes : pas de miracle, cette information n’existe dans la table DB2 que parce qu’elle a été codée dans les « entêtes de colonnes » lors de la création de la table (il s’agit d’une convention liée aux normes et standards d’une application sur laquelle je travaille en ce moment, si vous n’appliquez pas de convention de ce genre, cette colonne ne vous servira à rien et vous pourrez la retirer).
La compilation du pgm RPG se fait très simplement en retirant les marqueurs de commentaires sur la commande CRTBNDRPG du programme CLP DESCFIC. Lors du premier appel de la commande DESCFIC, le programme RPG va se compiler. Il suffira de remettre cette commande en commentaire et de recompiler le programme CLP pour les appels suivants de la commande DESCFIC. (penser à personnaliser le contenu de la variable &BIBCMP avant compilation du CL).
Parmi les améliorations possibles, on peut ajouter une partie décrivant les sélections / omissions d’un fichier logique sélectif. On peut aussi enrichir la présentation de la liste des fichiers logiques d’un fichier physique en ajoutant la description de chaque logique, éventuellement ses clés, etc… On peut aussi remplacer les accès BD natifs par des requêtes SQL. On peut enfin récupérer les descriptions de fichier dans les fichiers systèmes (cf. article de Didier Encinas) pour éliminer la mécanique d’extraction des informations se trouvant dans le pgm CLP. On le voit, les possibilités d’amélioration et de personnalisation sont nombreuses.