Lors de la génération des DDL, dans le cas où le DDM correspondant comporterait un MU ou un PE, il y aura création des programmes NATURAL permettant la mise à plat des données sources, en tenant compte du format des tables cible. Dans le cas contraire (pas de MU et pas de PE), le fichier pourra être mis à plat par l’intermédiaire de l’utilitaire ADACMP. Dans le cas où le même FNR contiendrait des DDM totalement indépendants, et où l’on veut utiliser ADACMP, il faudra spécifier la liste des champs de chaque DDM.

1.3.1     Cas de DDM avec MU et/ou PE

1.3.1.1    Génération des programmes NATURAL

Lors de la création des DLL pour la cible, il y aura génération d’un JCL permettant la création d’un programme NATURAL ayant en entrée le DDM du fichier ADABAS traité et en sortie le ou les structures des fichiers à remonter dans la cible.

Exemple :

Fichier ADABAS 001 constitué des champs

AA (D)

AB

AC

AD (MU)

 

Ce fichier contenant un MU, il va donc y avoir 2 tables cible.

T001 constituée des champs

 

T00101 constituée des champs

AA

 

AA

AB

 

AD

AC

 

 

On supposera que AA est unique

1.3.1.2    Exemple de programme NATURAL généré par JCL

Le programme correspondant sera remonté dans NATURAL par JCL :

//JOBNAME  JOB ...                              

//NATU    EXEC PGM=NATxxxx,REGION=5000K,                          

// PARM=('FDIC=(50,11),FNAT=(50,8),FUSER=(50,209)',                

//       'FSEC=(50,210),INTENS=1,AUTO=ON,IM=F,DU=ON')              

//STEPLIB   DD DSN=...,DISP=SHR                     

//DDCARD  DD *                                                     

ADARUN MODE=MULTI,PROGRAM=USER,DB=??,SVC=???                       

//CMPRINT   DD SYSOUT=*                                             

//CMSYNIN   DD *                                                   

LOGON CS

E

DEFINE DATA LOCAL

01 DDM001 VIEW OF DDM001

02 AA

02 AB

02 AC

02 C*AD

02 AD(*)

01 T00101

02 AA

02 AB

02 AC

01 T00102

02 AA

02 AD

01 £CPT-LU

01 £CPT-ECRIT-01

01 £CPT-ECRIT-02

01 £CPT-OCC

END –DEFINE

READ DDM001 BY AA

ADD 1 TO £CPT-LU

MOVE BY NAME DDM001 TO T00101

FOR £CPT-OCC = 1 TO C*AD

            MOVE DDM001.AA to T00102.AA

            MOVE DDM001.AD(£CPT-OCC) TO T00102.AD

            ADD 1 TO £CPT-ECRIT-02

            WRITE WORK FILE 02 T00102

END-FOR

ADD 1 TO £CPT-ECRIT-01

WRITE WORK FILE 01 T00101

END –READ

DISPLAY         ‘Nombre de records lus          dans DDM001 ‘ £CPT-LU

/                       ‘Nombre de records écrits      dans T00101 ‘ £CPT-ECRIT-01

/                       ‘Nombre de records écrits      dans T00102 ‘ £CPT-ECRIT-02

END

.E

SAVE pgm1          /* si le nom existe déjà, le SAVE ne se fait pas   

STOW

*                                         

FIN

/*

1.3.1.3    Identification des Pgm sur PC

Les programmes de mise à plat de la source seront générés dans le répertoire

<projet>\SOURCE\JCL\PGMUNLD

et auront comme nom

Paaaabb.pgm aaaa : correspondant au FNR du DDM traité, bb : chrono dans le cas où plusieurs DDM existe pour ce FNR.

1.3.1.4    Identification des JCL créant les Pgm NATURAL sur HOST

Les Pgm générés seront transférés sur le host dans des PDS équivalents aux directories du PC.

CS.JCL.PGM.NATURAL(<pgmname>)

1.3.1.5    Exemple de STEP de JCL pour exécution d’un programme NATURAL de déchargement

//MAPnnn EXEC NATURAL2,TIME=5

//CMPRINT DD SYSOUT=*

//CMWKF01 DD DSN= CS.ADABAS.Taaaabb.Duaammjj,

//                      SPACE=(TRK,(100,20),RLSE),RECFM=FB,

//                      LRECL=lrecl de WKF01,BLKSIZE= blksize du WKF01,

//                      DISP=(NEW,CATLG,DELETE)

//CMWKF02 DD DSN= CS.ADABAS.Taaaabb.Duaammjj,

//                      SPACE=(TRK,(100,20),RLSE),RECFM=FB,

//                      LRECL=lrecl de WKF02,BLKSIZE= blksize du WKF02,

//                      DISP=(NEW,CATLG,DELETE)

//SYSIN DD *

LOGON CS

Nom pgm de déchargement

FIN

/*

//

1.3.1.6    Identification des JCL mettant en séquentiel les fichiers ADABAS sur HOST

Les JCL générés seront transférés sur le host dans des PDS équivalents aux directories du PC.

CS.JCL.PGM.NATURAL(<pgmname>)

1.3.1.7    Schéma de Principe de mise à plat de fichier ADABAS par programme NATURAL

 

 1.3.2    Cas de DDM sans  MU ni PE ni SUPER-DESCRIPTEUR

1.3.2.1    Mise à plat des fichiers ADABAS sans MU ni PE ni SUPER DESCRIPTEUR

Dans un soucis de gain de temps, l’utilitaire ADACMP permet de mettre à plat des fichiers ADABAS de gros volume dans un minimum de temps.

1.3.2.2    Exemple de STEP pour le  JCL de déchargement

 

//ADACMP EXEC ADACMP,BASE=dbid,FILE=fnr,MODE=MULTI,INDEX=userid,

//         INDEXIN= userid,BASEIN= dbid,TYPIN=CMP,TYPOUT=DEC,      

//         SPP=5,SPS=5,DISK=disk_travail,INFILE='DUMMY,'            

//*

//ADACMP.DDAUSBA DD DSN= CS.ADABAS.Taaaabb.Duaammjj,     

//            DISP=(NEW,CATLG,DELETE),                   

//            UNIT=unit_work,VOL=(,,,vol),                     

//            RECFM=VB,LRECL=lrecl,BLKSIZE=blksize           

//*

//ADACMP.DDKARTE DD *                

ADACMP  DECOMPRESS INFILE= fnr

Les cartes suivantes permettent de changer l’ordre des champ lors du déchargement (facultatif si 1 FNR = 1 DDM, obligatoire dans le cas contraire (1 FNR = N DDM)).

ADACMP  FORMAT='AB,AA,AC,AD,AE,AF,'  

ADACMP  FORMAT='AH,AG.'        

La carte suivant permet de mettre le fichier à plat suivant le tri donné.

ADACMP  SORTSEQ=AA,NU                

/*                                   

//*

1.3.2.3    Schéma de Principe de mise à plat de fichier ADABAS par utilitaire

Identification des fichiers séquentiels sur HOST

Les fichiers générés par ces programmes NATURAL auront comme nom

CS.ADABAS.Taaaabb.Duaammjj

 

1.3.4    Remarque

Dans le cas où des fichiers ADABAS contiendraient le champ *ISN, cette donnée sera transformée en S9(8) COMP. En parallèle, une table « Chrono » devra être créé pour répondre au changement de structure. La valeur de cette table sera l’ISN le plus grand trouvé dans la colonne ISN du fichier ADABAS.  Les programme COBOL qui créeront des record dans la table DB2 devront accéder à cette table « Chrono » pour incrémenter ce numéro.