Description des fichiers dans une application.
Bonsoir,
Ce soir, je vais aborder la description des données d'une application. Cette méthode est valable quelque soit la version du RPG que vous utilisez (du RPG3 au …). Cette méthode de description est même valable pour le RPG2 qui ne supporte pas les descriptions externes des fichiers. Mais au travers de la clause /COPY , il était possible de la simuler.
La contrainte de base (j'en ai déjà parlé) concerne le nom de la zone résultat limité à 6 caractères en RPG3.
Le RPG3 est à la base de ILE et Free format. Donc, si le compilateur a évolué, il n'en reste pas moins que ses contraintes restent proches. D'ailleurs, la phase de compilation depuis ILE se passe en deux étapes (CRTRPGMOD puis CRTPGM) au lieu d'une seule en RPG3 (CRTPGM).
Pour comprendre le problème (et la solution que je propose) regardez une carte C en RPG3.
Pour faire un MOVE d'une zone écran dans une zone fichier (facteur résultat), le nom de la zone résultat (donc celle du fichier, si c'est le cas) est limité à 6 caractères.
Pour faire un Z-ADD, un TIME et tout autre code opération ou le facteur résultat est obligatoire, c'est pareil.
Alors comment faire ?
Voici la solution que je propose et qui est valable en ILE ou autre :
Chaque fichier physique (PF) aura un nom de 6 caractères au maximum. Le nom des fichiers logiques auront 8 caractères (Nom du physique suivi d'un n° de séquence de 00 à 99). :D Condate (seul à me suivre il me semble)
Les 2 premiers caractères de chaque fichier physique (PF) seront différents.
Exemple : Si vous avez un fichier "commandes" et un fichier "colis", le nom du fichier des commandes sera COMMAN et celui des colis sera KOLIS. Ce qui compte, c'est que les 2 premiers caractères de chaque fichier soient différents.
Créer un fichier physique "répertoire" (nom REP dans cet exemple) qui ne contiendra aucune données, mais juste la description des données de l'application. Dans ce fichier, chaque donnée sera décrite par son nom (maximum 4 caractères), son type, sa longueur et nombre de décimales au besoin.
Exemple du répertoire des données (Fichier physique REP) :
0001.00 A*****************************************************************
0002.00 A* REPERTOIRE GENERAL DES DONNEES *
0003.00 A*****************************************************************
0004.00 A*REPERTOIRE GENERAL DES DONNEES
0005.00 A*****************************************************************
0006.00 A R REPF1 TEXT('REPERTOIRE GENERAL')
0007.00 A*
0008.00 A OPT1 1 TEXT('ZONE OPTION 1 DE LONG')
0009.00 A COLHDG('ZONE OPTION')
0010.00 A OPT2 2 TEXT('ZONE OPTION 2 DE LONG')
0011.00 A COLHDG('ZONE OPTION')
0012.00 A CCLI 5 TEXT('CODE CLIENT')
0013.00 A COLHDG('CODE CLIENT')
0014.00 A NCLI 25 TEXT('NOM CLIENT')
0015.00 A COLHDG('NOM CLIENT')
0016.00 A NTEL 10 TEXT('NUMERO DE TELEPHONE')
0017.00 A COLHDG('NUMERO DE TELEPHONE')
0018.00 A AD35 35 TEXT('ADRESSE 35 DE LONG')
0019.00 A COLHDG('ADRESSE 35 DE LONG')
0020.00 A CP 5 TEXT('CODE POSTAL')
0021.00 A COLHDG('CODE POSTAL')
0022.00 A VILL 35 TEXT('NOM VILLE')
0023.00 A COLHDG('NOM VILLE')
0024.00 A NPAY 25 TEXT('NOM PAYS')
0025.00 A COLHDG('NOM PAYS')
0026.00 A CPAY 3 TEXT('CODE PAYS')
0027.00 A COLHDG('CODE PAYS')
0028.00 A REM 40 TEXT('REMARQUE')
0029.00 A COLHDG('REMARQUE')
0030.00 A CCDE 12 TEXT('CODE CDE')
0031.00 A COLHDG('CODE CDE')
0032.00 A USER 10 TEXT('UTILISATEUR')
0033.00 A COLHDG('UTILISATEUR')
0034.00 A TIME 14 0 TEXT('DATE ET HEURE')
0035.00 A COLHDG('DATE ET HEURE
0036.00 A DATE 8 TEXT('AAAAMMJJ')
0037.00 A COLHDG('AAAAMMJJ')
0038.00 A HMS 6 0 TEXT('HHMMSS')
0039.00 A COLHDG('HH:MM:SS')
0040.00 A ANNE 4 TEXT('ANNEE')
0041.00 A COLHDG('ANNEE')
0042.00 A MOIS 2 TEXT('MOIS')
0043.00 A COLHDG('MOIS')
0044.00 A JOUR 2 TEXT('JOUR')
0045.00 A COLHDG('JOUR')
0046.00 A HEUR 2 0 TEXT('HEURE')
0047.00 A COLHDG('HEURE')
0048.00 A MINU 2 0 TEXT('MINUTE')
0049.00 A COLHDG('MINUTE')
0050.00 A SECO 2 0 TEXT('SECONDE')
0051.00 A COLHDG('SECONDE')
Remarque : le nom de chaque données fait au max 4 caractères
Maintenant nous avons : Des fichiers physiques avec des noms qui différent sur les 2 premiers caractères et un "répertoire des données" avec des noms de 4 caractères au max.
Passons à la description de chaque fichier … Chaque zone de fichier sera composée comme suit :
2 premiers caractères du nom du fichier + nom de la zone du répertoire (avec un REFFLD pointant sur le répertoire).
Création de la DDS du fichier "des commandes". Nom : CDE
0001.00 REF(REP)
0002.00 R CDEF1
0003.00 CDCCDE R REFFLD(CCDE) CDCCDE = CD (2 premiers caractères du fichier CDE) + CCDE (venant du répertoire REP)
0004.00 TEXT('CODE COMMANDE'
0005.00 CDCCLI R REFFLD(CCLI) CDCCLI = CD (2 premiers caractères du fichier CDE) + CCLI (venant du répertoire REP)
0006.00 TEXT('CODE CLIENT')
0007.00 CDDCDE R REFFLD(DATE)
0008.00 TEXT('DATE CDE')
0009.00 CDHCDE R REFFLD(HMS)
0010.00 TEXT('HEURE CDE')
0011.00 CDREM1 R REFFLD(REM)
0012.00 TEXT('REMARQUE')
0013.00 CDREM2 R REFFLD(REM)
0014.00 TEXT('REMARQUE')
0015.00 CDTIME R REFFLD(TIME)
0016.00 TEXT('DATE MAJ')
0017.00 CDUSER R REFFLD(USER)
0018.00 TEXT('USER MAJ')
0019.00 K CDCCDE
Création de la DDS du fichier "des clients". Nom : CLIENT
0001.00 REF(REP)
0002.00 R CLIENTF1
0003.00 CLCCLI R REFFLD(CCLI) CLCCLI = CD (2 premiers caractères du fichier CLIENT) + CCLI (venant du répertoire REP)
0004.00 TEXT('CODE CLIENT')
0005.00 CLNCLI R REFFLD(NCLI)
0006.00 TEXT('NOM CLIENT')
0007.00 CLNTEL R REFFLD(NTEL)
0008.00 TEXT('TELEPHONE')
0009.00 CLADR1 R REFFLD(AD35)
0010.00 TEXT('LIG 1 ADRESSE')
0011.00 CLADR2 R REFFLD(AD35)
0012.00 TEXT('LIG 2 ADRESSE')
0013.00 CLCP R REFFLD(CP)
0014.00 TEXT('CODE POSTAL')
0015.00 CLVILL R REFFLD(VILL)
0016.00 TEXT('VILLE')
0017.00 CLCPAY R REFFLD(CPAY)
0018.00 TEXT('PAYS')
0019.00 CLREM1 R REFFLD(REM)
0020.00 TEXT('REMARQUE')
0021.00 CLREM2 R REFFLD(REM)
0022.00 TEXT('REMARQUE')
0023.00 CLTIME R REFFLD(TIME)
0024.00 TEXT('DATE MAJ')
0025.00 CLUSER R REFFLD(USER)
0026.00 TEXT('USER MAJ')
0027.00 K CLCCLI
RESULTAT :
Le nom de chaque zone de fichier fait 6 caractères au maximum (résolution de la longueur du nom en facteur résultat).
Chaque nom de zone est unique.
Toutes les zones font référence au répertoire des données : Donc il suffit de modifier la description d'une zone dans le répertoire et de "tout recompiler" pour que ça fonctionne.
La description est unique et elle est faite au niveau du répertoire.
Pour les zones des fichiers écrans (DSPF), les 2 premières lettres seront WS (pour WorkStation): Exemple WSCCLI pour code client d'un écran … Donc pas de nom de fichier physique commençant par WS.
Les MOVE sont EXPLICITES !!! "Je n'aime pas l'implicite" car c'est illisible, donc les noms des zones écrans sont différentes des noms des zones de fichier.
On fait MOVE zone-de-fichier dans zone-écran et MOVE zone-écran dans zone-de-fichier (les noms sont différents)
Exemple MOVE WSCCLI CLCCLI
ou MOVE CLCCLI WSCCLI
Toujours pareil : Si vous avez des remarques, suggestions/propositions/autres solutions , critiques, avis, questions ou autre, n'hésitez pas à répondre et à vous exprimer.
Demain je vous parlerai d'une façon de lancer et faire tourner une application. Mais je ne suis pas satisfait de ce que je vais vous exposer car il y a un problème. Alors, si vous pouvez m'aider, ça sera très sympa.
En attendant, je vous souhaite une bonne soirée.