Un de nos clients, nous a fait un retour suite à un problème lors de l’utilisation de CVTRPGSRC. Le contexte :

  • Un move d’une variable Alpha dans un indicateur
  • L’indicateur utilisé en colonne 9-17 de conditionnement d’exécution des lignes
  • La variable alpha contenue dans un format d’un DSPF
  • Clear du format

Résultat, on se retrouve avec un indicateur à blanc ! Au lieu de 0 ou 1…

Dans le code RPG III recréé, la mise à blanc de la variable alpha est faite directement pour simuler le clear du format du DSPF.  J’ai rajouté des IF explicits pour compléter le test et le bon vieux DSPLY pour avoir un résultat rapide dans la joblog.
3 tests :

  • Ligne conditionnée : 86 / N86
  • IF 86 / Else
  • IF N86 / Else

Le code RPG IV généré par CVTRPGSRC :

Les résultats :

RPG III :

                 

RPG IV :

             

Nous avons une différence d’interprétation entre le RPG III et le RPG IV dans le cas d’utilisation des indicateurs en conditionnement de ligne. En RGP III, seule la ligne conditionnée par N86 est traitée.
En RPG IV, le conditionnement n’est tout simplement pas pris en compte et les deux groupes de lignes (86 et N86) sont prises en compte !
Si j’avais du parier, j’aurais parié pour qu’aucune ne soit exécutée…

Par contre, en cas d’utilisation dans un IF, c’est la même réaction, la clause else est exécutée, quelque soit le sens du test sur le IF, ce qui semble normal.

La commande n’est qu’un outils de conversion, pas de correction, mais il faut faire attention car le RPG IV est moins permissif que le RPG III. Le problème n’est pas la commande en elle même, mais tous les usages « borderline » qui étaient faits du move d’un type de variable dans un autre sans test au préalable que la valeur fait bien partie du type de destination.
Et même si en RPG III, exécuter les instructions en N86 allait bien d’un point vue métier, quand l’indicateur était à blanc, ça reste une erreur de programmation.
Rien ne dit, d’ailleurs, que de « vieux » bugs jamais résolu ne trainent pas du fait de ces usages…

Pour moi, la meilleure réaction à avoir lorsqu’on découvre de tels cas, est de profiter de l’occasion, pour identifier et corriger l’applicatif de ce type d’usage, qui reste même en RPG III des bugs potentiels.