Moder­ni­ser votre code RPG avec Agi­li­té – Par­tie 1

Moder­ni­ser votre code RPG avec Agi­li­té – Par­tie 1

lun 30 décembre 2019 4 Par Ibmiiste
Moder­ni­ser votre code RPG avec Agi­li­té – Introduction
Moder­ni­ser votre code RPG avec Agi­li­té – Par­tie 1
Moder­ni­ser votre code RPG avec Agi­li­té – Par­tie 2
Moder­ni­ser votre code RPG avec Agi­li­té – Par­tie 3
Moder­ni­ser votre code RPG avec Agi­li­té – Par­tie 4

Du RPG III au RPG IV – CVTRPGSRC

Vous savez que plu­sieurs ver­sions de lan­gages RPG peuvent coha­bi­ter sur IBM i et qui sont pré­sent depuis OS400 (Voir IBM 36, mais ici nous n’i­rons pas si loin). C’est pour­quoi sur ces OS, vous trou­vez du RPG III, RPG IV, RPG Ile, RPG Free-form ou du RPG Full-free.
Aujourd’­hui, il n’existe pas encore de pro­duit gra­tuit qui va vous conver­tir un source de RPG III à RPG Full-free. Il va fal­loir mon­ter pro­gres­si­ve­ment de version.

Les dif­fi­cul­tés sont mul­tiples, la struc­ture de codage dif­fère, mono­bloc sur les plus vieilles ver­sions vers du refac­to­ring de plus en plus fin avec les plus modernes. L’u­sage de sous-rou­tines est rem­pla­cé par celui de sous-pro­cé­dure par exemple qui seront exter­na­li­sées dans d’autres membres sources ou fichiers texte héber­gés sur l’IFS. Les mots-clefs des anciennes ver­sions de RPG n’au­ront pas tou­jours d’é­qui­valent dans les plus récentes. Et il y a bien sûr d’autres rai­sons.
Le pre­mier niveau que nous allons voir est le plus simple, pas­ser de RPG III à RPG IV. Par chance, IBM a four­ni une com­mande CL pour le faire simplement :

CVTRPGSRC

Voi­ci une exemple d’u­ti­li­sa­tion de cette com­mande sur le source ci-dessous.

CVTRPGSRC FROMFILE(BIBORI/QRPGSRC) FROMMBR(PGM0001R) TOFILE(BIBDEST/QRPGLESRC)
     H
      * FICHIER CLIENT
      *---------------
     FBNCLTL01IF  E           K        DISK
      *
      * ADRESSE CLIENT
      *---------------
     FBACLTL02IF  E           K        DISK
      *----------------------------------------------------*
      * PARAMETRES                                         
      *----------------------------------------------------*
     C           *ENTRY    PLIST                           
     C                     PARM           $ODCLI  8        
     C                     MOVE $ODCLI    CODCLI           
      *----------------------------------------------------
      * CLES                                               
      *----------------------------------------------------
     C           CLTL02    KLIST                           
     C                     KFLD           CODCLI           
     C                     KFLD           ACATEG           
      *                                                    
      *----------------------------------------------------
      * INITIALISATIONS                                    
      *----------------------------------------------------
     C                     Z-ADD20        SATJOU           
     C                     Z-ADDUYEAR     AATJOU           
     C                     Z-ADDUMONTH    MATJOU           
     C                     Z-ADDUDAY      JATJOU           
     C                     MOVE '/'       SLASH1           
     C                     MOVE '/'       SLASH2           
     C                     MOVE '-'       TIRET1           
     C                     MOVE '/'       SLASH3           
       * RECHERCHE CLIENT                                  
     C           CODCLI    CHAINBNCLTL01             60    
      * RECHERCHE ADRESSE CLI                              
     C                     MOVE 'CLI'     ACATEG           
     C           CLTL02    CHAINBACLTL02             60    
     C  N60      NIDEAD    CHAINBACISL01             60    
     C           *IN60     IFEQ '0'                        
     C                     MOVE ALIGN3    CLIGN3           
     C                     MOVE ALIGN4    CLIGN4           
     C                     MOVE ALIGN5    CLIGN5           
     C                     MOVE ALIGN6    CLIGN6           
     C                     ENDIF                           

Voi­ci la ver­sion RPG IV résul­tante, vous remar­que­rez assez peu de dif­fé­rence car les mots du RPG III ont leurs équi­va­lents en RPG IV.

La posi­tion des colonnes aura chan­gé, les mot-clefs seront un peu dif­fé­rents mais vous ne serez pas « encore » dépay­sé. Vous retrou­vez les colonnes, les indi­ca­teurs, le cycle etc…

    H
      * FICHIER CLIENT
      *---------------
     FBNCLTL01  IF   E           K DISK
      *
      * ADRESSE CLIENT
      *---------------
     FBACLTL02  IF   E           K DISK
      *----------------------------------------------------*
      * PARAMETRES                                         
      *----------------------------------------------------*
     C     *ENTRY        PLIST                               
     C                   PARM                    $ODCLI            8     
     C                   MOVE      $ODCLI        CODCLI                  
      *----------------------------------------------------
      * CLES                                               
      *----------------------------------------------------
      *                                                    
     C     CLTL02        KLIST                                        
     C                   KFLD                    CODCLI               
     C                   KFLD                    ACATEG               
      *----------------------------------------------------
      * INITIALISATIONS                                    
      *----------------------------------------------------
     C                   Z-ADD     20            SATJOU          
     C                   Z-ADD     UYEAR         AATJOU          
     C                   Z-ADD     UMONTH        MATJOU           
     C                   Z-ADD     UDAY          JATJOU            
     C                   MOVE      '/'           SLASH1             
     C                   MOVE      '/'           SLASH2            
     C                   MOVE      '-'           TIRET1          
     C                   MOVE      '/'           SLASH3                     
       * RECHERCHE CLIENT                                   I
     C     CODCLI        CHAIN     BNCLTL01                           60     
      * RECHERCHE ADRESSE CLI                              I
     C                   MOVE      'CLI'         ACATEG                         
     C     CLTL02        CHAIN     BACLTL02                           60       
     C  N60NIDEAD        CHAIN     BACISL01                           60        
     C     *IN60         IFEQ      '0'                                          
     C                   MOVE      ALIGN3        CLIGN3                         
     C                   MOVE      ALIGN4        CLIGN4                         
     C                   MOVE      ALIGN5        CLIGN5                         
     C                   MOVE      ALIGN6        CLIGN6                         
     C                   ENDIF                                                 

Il n’y a plus qu’à…