Maintenance des Macros par rapport aux lignes de code spécifique

Pour maintenir les Macros, vous devez comprendre comment les lignes de Macro sont gérées par rapport aux lignes de code spécifique. Vous devez aussi connaître les règles pour remplacer une Macro par une autre. Si, suite à des mises à jour, l'emplacement initial de certaines lignes de code spécifique n'existe plus, des avertissements sont générés. Vous pouvez alors savoir comment les gérer avec des correctifs rapides.

Cas simple d'insertion de lignes de code spécifique

Si vous ajoutez une ligne de code spécifique dans le COBOL généré d'un Programme, Ecran ou Serveur appelant la Macro, cette ligne est affichée dans la vue Structure du Code Généré. Elle conserve sa place lors des générations suivantes entre l'étiquette qui la précède et l'étiquette qui la suit.
Exemple : La Macro AAASQ2 contient, dans la sous-fonction F56BB, une ligne de traitement 100100 et une ligne de traitement 200200. Dans le Programme appelant cette Macro, une ligne de code spécifique est ajoutée entre ces deux lignes de traitement. Le contenu de cette nouvelle ligne est affiché en tant que code spécifique dans la vue Structure du Code Généré, entre les deux étiquettes (F56BB100100 et F56BB210200) correspondant aux deux lignes de traitement entre lesquelles la ligne a été insérée.
Figure 1. Ligne de code spécifique ajoutée entre deux lignes de Macro dans le Programme appelant
Cet exemple montre une Macro dans l'éditeur Rational Programming Patterns, les lignes de Macro dans le Programme appelant et la vue Structure du Code Généré. Leur contenu est décrit dans les explications qui précédent.
Si vous insérez des lignes dans un numéro de ligne existant, ces nouvelles lignes ne créent pas de nouvelles étiquettes dans la vue Structure du Code Généré. L'étiquette de la ligne de l'insertion correspond alors à la ligne existante et aux lignes insérées. Si des lignes de code spécifique existent dans l'instance appelante, elles conservent leur position. Ceci est vrai même si les Macros sont fusionnées dans l'instance appelante.
Exemple : La Macro AAASQ2 contient, dans la sous-fonction F56BB, une ligne de condition 010 et une ligne de traitement 100100. Dans l'étape précédente, une ligne de code spécifique a été ajoutée sous la ligne 100100 dans le COBOL du Programme appelant la Macro. Vous ajoutez maintenant dans la Macro une ligne de condition sous la ligne 010 et une ligne de traitement sous la ligne 100100, sans préciser de numéro de ligne. Après génération du Programme appelant, la nouvelle ligne de condition est générée sous la ligne 010. La ligne de condition suivante provient d'une autre Macro, fusionnée dans le Programme. La nouvelle ligne de traitement est générée sous la ligne 100100. Dans la vue Structure du Code Généré, la nouvelle ligne de condition est incluse dans l'étiquette F56BB010 et la nouvelle ligne de traitement est incluse dans l'étiquette F56BB100100. La ligne de code spécifique est conservée à la même place. Il n'y a pas de problème d'imbrication des Macros.
Figure 2. Insertion d'une ligne de condition et de traitement dans une Macro
Cet exemple montre une Macro dans l'éditeur Rational Programming Patterns, les lignes de Macro dans le Programme appelant et la vue Structure du Code Généré. Leur contenu est décrit dans les explications qui précédent.

Ventilation de lignes de Macros dans un bloc de code spécifique

Pour ventiler des lignes de Macros à l'intérieur d'un bloc de code spécifique d'un Programme, Ecran ou Serveur, vous devez insérer des balises dans ce code spécifique. Ces balises vous permettent d'encadrer les lignes de code spécifique pour guider le placement des lignes provenant de Macros. Vous assurez ainsi le bon placement des lignes de Macro dans le code spécifique lors de la ventilation, même après l'ajout, le remplacement ou la modification d'un appel de Macro. Ces balises évitent les erreurs de réconciliation lors de la génération de l'instance et de la fusion des Macros.

Pour indiquer qu'un bloc de code spécifique doit apparaître avant une ligne de Macro, vous devez encadrer ce bloc par deux lignes. Sur la première ligne, vous indiquez la balise *{BEFORE FFFSSLIN, où FFSS représente la fonction ou sous-fonction et LIN le numéro de ligne sur 3 ou 6 caractères. Sur la dernière ligne, vous indiquez la balise *}. Le bloc de code spécifique encadré par ces balises s'affichera donc avant la ligne LIN de la sous-fonction FFSS indiquée dans la Macro.

Pour indiquer qu'un bloc de code spécifique doit apparaître après une ligne de Macro, vous devez encadrer ce bloc par deux lignes. Sur la première ligne, vous indiquez la balise *{AFTER FFFSSLIN, où FFSS représente la fonction ou sous-fonction et LIN le numéro de ligne sur 3 ou 6 caractères. Sur la dernière ligne, vous indiquez la balise *}. Le bloc de code spécifique encadré par ces balises s'affichera donc après la ligne LIN de la sous-fonction FFSS indiquée dans la Macro.

Exemple : La Macro CLMACR insère une ligne 100 dans la sous-fonction F33RC. Cette ligne 100 apparaît dans le COBOL généré du Programme CLPROG qui appelle cette Macro. Un bloc de code spécifique de 2 lignes est inséré dans la sous-fonction F33RC du Programme, à la suite de la ligne provenant de la Macro.
Figure 3. Appel d'une Macro dans un Programme contenant un bloc de code spécifique dans la même sous-fonction
Cet exemple montre le code source de la Macro puis le code généré du Programme. Leur contenu est décrit dans les explications qui précédent.
Vous ajoutez une ligne 200 dans la Macro.
Figure 4. Ajout d'une ligne dans la Macro
Cet exemple montre le code source de la Macro avec la nouvelle ligne.
Pour insérer cette ligne 200 entre les 2 lignes de code spécifique du Programme, vous devez insérer des balises dans le code spécifique. Vous indiquez que la première ligne de code spécifique doit apparaître avant la ligne 200 de la Macro dans le code spécifique. Ainsi, vous encadrez cette première ligne de code spécifique par les balises *{BEFORE F33RC200 et *}. Vous indiquez aussi que la deuxième ligne de code spécifique doit apparaître après la ligne 200 de la Macro dans le code spécifique. Ainsi, vous encadrez cette deuxième ligne de code spécifique par les balises *{AFTER F33RC200 et *}.
Figure 5. Insertion des balises dans le code spécifique
Cet exemple montre l'insertion des balises dans le code du Programme. Le contenu est décrit dans les explications qui précédent.
Quand vous regénérez le Programme, la ligne 200 de la Macro s'affiche alors bien entre les 2 lignes de code spécifique.
Figure 6. Affichage de la ligne de Macro à l'intérieur du bloc de code spécifique
Cet exemple montre l'affichage de la ligne 200 à l'intérieur du bloc de code spécifique du Programme. Le contenu est décrit dans les explications qui précédent.

Remplacement d'une Macro

Cette action n'est pas recommandée car des incohérences peuvent apparaître lors de la regénération de l'instance appelante. Si vous devez néanmoins l'effectuer, vous devez sélectionner une nouvelle Macro dont le contenu est proche de celui de la Macro initiale. Si vous remplacez une Macro qui insère des lignes de traitement dans une sous-fonction, utilisez, dans la nouvelle Macro, les mêmes numéros de ligne que dans la Macro initiale pour les lignes qui entourent des lignes de code spécifique.

Pour remplacer une Macro, ouvrez l'onglet Lignes -CP de l'instance appelante et remplacez un appel de Macro par une autre Macro directement depuis la colonne Macro. Les paramètres de la Macro initiale sont alors conservés dans la nouvelle Macro. Les lignes de code spécifique dans l'instance appelante conservent leur place après regénération si la nouvelle Macro contient les mêmes numéros de ligne que la Macro initiale.
Exemple : La Macro AAASQ2 est appelée dans un Programme. Les Macros AAASQ2 et AAASQ6 insèrent toutes les deux des lignes dans la sous-fonction F56BB. Elles contiennent chacune deux lignes de traitement 100100 et une ligne de traitement 200200.
Figure 7. Remplacement d'une Macro
Cet exemple montre deux Macros dans l'éditeur Rational Programming Patterns. Leur contenu est décrit dans les explications qui précédent.
Une ligne de code spécifique est insérée dans le code généré du Programme appelant, entre les lignes correspondant aux lignes de traitement 100100 et 200200 de la Macro AAASQ2. La ligne de code spécifique est donc placée entre les étiquettes F56BB100100 et F56BB200200 dans la vue Structure du Code Généré.
Figure 8. Code généré avant le remplacement
Cet exemple montre le code généré de la sous-fonction dans le Programme et les étiquettes de la vue Structure du Code Généré. Leur contenu est décrit dans les explications qui précédent.
L'appel de la Macro AAASQ2 est remplacé par l'appel de la Macro AAASQ6 dans le Programme. Après le remplacement et une nouvelle génération, les lignes correspondant aux lignes de traitement 100100 et 200200 sont maintenant celles de la Macro AAASQ6. La ligne de code spécifique a été conservée à la même place, entre les étiquettes F56BB100100 et F56BB200200 dans la vue Structure du Code Généré.
Figure 9. Code généré après le remplacement
Cet exemple montre le code généré de la sous-fonction dans le Programme et les étiquettes de la vue Structure du Code Généré. Leur contenu est décrit dans les explications qui précédent.

Utilisation du correctif rapide pour replacer des lignes de code spécifique

Des erreurs sont détectées lorsque l'emplacement initial de certaines lignes de code spécifique n'existe plus. Ce cas se produit lorsque les étiquettes de la Macro ont été modifiées (code de la sous-fonction ou numéro de ligne). La vue Erreurs affiche alors un avertissement par bloc de code spécifique mal placé. L'avertissement indique que les modifications de l'utilisateur ne peuvent pas être reconduites dans le code réconcilié car la position n'existe plus. Le même avertissement s'affiche aussi dans l'éditeur de COBOL PDP sur les lignes du bloc de code spécifique mal placé.

Pour corriger le problème, procédez de la façon suivante :
  • Placez votre curseur sur l'avertissement. Pour cela, double-cliquez sur l'avertissement dans la vue Erreurs. Vous pouvez aussi accéder à l'avertissement directement dans l'éditeur de COBOL PDP. Dans les deux cas, le symbole de l'avertissement est décoré par le symbole du correctif rapide Correctif rapide pour les avertissements de réconciliation et de migration.
  • Cliquez sur l'avertissement. La liste des correctifs rapides s'affiche. Double-cliquez sur Insérer le code spécifique à cette position. Le bloc de lignes de code spécifique concerné est inséré.
  • Coupez et collez les lignes pour les replacer au bon endroit. Dans la vue Erreurs, le numéro de ligne de l'avertissement traité est modifié.
  • Cliquez sur l'avertissement et double-cliquez sur le correctif Laisser le code en l’état (Supprimer le problème). L'avertissement disparaît alors.
Vous devez procéder ainsi pour tous les avertissements de ce type.

Vos commentaires