Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. RPG et CL
  3. L'AS/400
Extrait - RPG et CL Maîtrisez la programmation sur AS/400
Extraits du livre
RPG et CL Maîtrisez la programmation sur AS/400
1 avis
Revenir à la page d'achat du livre

L'AS/400

Les principes de base

1. Le microcode

Le principe de base de l’AS/400 est l’indépendance technologique. La partie que l’on voit de l’extérieur, RPG ou autre, est immuable et évolutive. Il y a des programmes qui tournent sur AS/400 depuis 20 ans et dont pas une ligne de code n’a été changée alors que les processeurs utilisés sont passés de CISC à RISC, de 1 à 8 processeurs ou plus. Pour les objets, programmes, fichiers et commandes, peu importe le hardware, entre, il y a le microcode (SLIC System Licenced Internal Code ou LIC Licenced Internal Code). Si IBM change de processeur, le microcode est réécrit et le programme tourne exactement de la même façon sans aucune recompilation, les programmes ne connaissent et ne voient que le microcode. Et ça fonctionne aussi dans l’autre sens presque aussi bien. On peut, sans recompilation, passer un programme vers un AS/400 plus ancien à condition que la version d’OS ne soit pas plus éloignée que de deux niveaux.

J’ai testé personnellement le cas suivant : la compilation se faisait sur un petit AS/400 guère plus gros qu’un PC, mais dont la version était à son maximum. La machine de production avait 4 niveaux d’écart. J’avais écrit un CL permettant d’envoyer un objet (programme) sur la précédente machine de production qui n’avait que les deux niveaux fatidiques d’écart. Lorsque l’entreprise a changé de machine, le premier objet que j’ai...

L’ergonomie

1. Les touches de fonction

L’AS/400, depuis ses origines, utilise des terminaux passifs, écrans noirs et lettres vertes et un clavier comportant deux rangées de touches de fonction de 1 à 24. C’est très rustique, mais suffisant. Quand il n’y a ni boutons, ni menus déroulants, les touches de fonction sont nécessaires pour effectuer de nombreuses opérations, le reste se faisant par commandes.

Les touches standard AS/400 sont :

[F1] Aide, normalement un écran doit apparaître avec les explications idoines, l’AS/400 en fournit toujours une.

[F3] Exit, équivalent de "quitter" sur un PC, attention, dans beaucoup de cas, rien n’est enregistré.

[F4] Invite, la bouée de sauvetage par excellence, [F1] ou [F4] sur les zones permet d’en savoir plus.

[F5] Rafraîchir. Contrairement au PC, il faut toujours demander à rafraîchir l’écran, pour savoir si l’opération a été faite, regarder l’heure affichée avant et après.

[F6] Créer. On se sent très puissant soudain.

[F9] Refaire la commande précédente. L’AS/400 stocke les 50 dernières commandes saisies, la touche [F9] les rappelle une par une en commençant par la fin. Ne jamais oublier qu’un AS/400 enregistre beaucoup de choses, il ne faut pas être surpris de voir arriver quelqu’un qui vous demande "Pourquoi avoir lancé le programme de nettoyage à 9H12. D’autant que c’était sur la production". Quand on sait cela, on réfléchit avant de taper CLRLIB PRDLIB (traduction : vider la bibliothèque de production de tout son contenu, cette action est irréversible).

[F12] Annuler ou précédent. Quand on sent qu’on est sur le point de faire une manipulation critique, faire [F12], réfléchir quelques minutes, faire [F9] et recommencer ou non. Pendant le temps de réflexion, il est prudent de taper EDTLIBL afin de vérifier sur quels fichiers on va effectuer l’opération.

[F23] Autres options. Si la touche est active, fait apparaître d’autres options. Petit détail amusant, lorsqu’on est sur un menu AS/400, si l’on fait [F23] (bien que la touche ne soit pas signalée) il apparaît...

Les bibliothèques

La notion de bibliothèque est très importante car, à un instant donné, un JOB ne voit que ce qui se trouve dans les bibliothèques, et, comme sur un PC, un nom d’objet peut parfaitement cohabiter dans des bibliothèques différentes et avoir des fonctionnalités complètement différentes. Il est quand même déconseillé d’avoir un même objet, avec des niveaux différents, éparpillé un peu partout sur la machine.

Une bibliothèque peut contenir au maximum 360 000 objets (environ selon IBM), du moins dans les systèmes récents, auparavant ce n’était que 32 766. Cela paraît assez énorme, mais on peut atteindre ce nombre, je le sais j’ai essayé. Ce qui est un peu plus compliqué ensuite c’est de faire le ménage, cf. le piège à découvrir dans le chapitre Trucs, astuces et anecdotes.

1. Bibliothèques système

Les bibliothèques système sont implicites, QGPL et QTEMP sont toujours présentes, et, selon son profil, on aura une *LIBL (Library List/Liste de bibliothèques) adaptée à son travail.

Toutes les bibliothèques sont dans QSYS, la bibliothèque des bibliothèques.

Il y en a d’autres, mais les plus utilisées sont les suivantes : QSYS, QSYS2, QHLPSYS, QUSRSYS....

Les sous-systèmes

Chaque travail s’exécute dans un sous-système, BATCH ou interactif. Il y a au minimum un sous-système de chaque type, QBATCH et QINTER. Pour simplifier, tout ce qui comporte un écran s’exécute dans QINTER et est prioritaire, le reste dans QBATCH. Pour tout un tas de raisons, l’importance des tâches en particulier, l’ingénieur système répartira les travaux dans divers sous-systèmes, chacun ayant des caractéristiques particulières selon les besoins.

Pour le programmeur, l’important est de savoir si le sous-système dans lequel s’exécute son programme ou sa compilation est actif ou non et, le cas échéant, de pouvoir gérer par programme la bonne répartition en accord avec l’ingénieur système.

Tout ceci peut paraître assez obscur, mais un AS/400 mal paramétré peut devenir une machine poussive ressemblant à un vieux minitel. Il faut le savoir, mais ce n’est pas à proprement parler de la programmation.

On évoque souvent la CPU utilisée par un JOB, la forme la plus fréquente est : "Quel est ce JOB qui occupe 20 % de CPU ?"

Que se passe-t-il exactement ? Le sous-système dans lequel le JOB est exécuté dispose d’un certain temps d’utilisation de la CPU qui représente...

La compilation

Tous les objets sont compilés soit à partir d’un source, soit directement en définissant les caractéristiques de l’objet. Les programmes et les fichiers données sont toujours compilés avec un source, les objets les plus simples à partir de la description saisie à l’écran. D’une façon générale, la compilation consiste à traduire en microcode les fonctionnalités que l’on veut utiliser.

Il n’y a que quelques cas où ce qui se passe est exécuté au moyen d’un interpréteur. Les fichiers REXX sont un exemple et il n’y a pas de BASIC sur AS/400, donc peu de cas où on ne soit pas obligé de passer par une compilation.

Une compilation est un JOB comme un autre, soumis ou interactif. L’invite de compilation permet de choisir différentes manières de compiler un source.

1. La compilation des fichiers

Pour compiler un fichier, il n’y a aucune nécessité d’avoir une *LIBL particulière. On spécifie où se trouve le source et dans quelle bibliothèque l’objet, le fichier, sera créé. Se méfier au début des valeurs par défaut.

Saisir la commande suivante :

CRTPF FILE(TBIBDTA/FIC00P) SRCFILE(TBIBSRC/QDDSSRC) SIZE(10001) 

La valeur SIZE(10001) est là pour indiquer qu’un fichier peut comporter un nombre d’enregistrements maximum différent de la valeur par défaut, 10 000. Nous verrons plus loin l’importance que peut avoir cette valeur.

Si votre source se trouve...

Le débogage

1. Le CL

STRISDB, c’est très joli, il y a plein de couleurs, et surtout on peut déboguer les CL. Dans la plupart des cas l’erreur est vite repérée et on n’a guère besoin de cet outil pour corriger. La rusticité du CL fait que l’on peut aboutir à des résultats curieux dès que l’on essaie de faire des choses trop compliquées.

Dans une époque, pas si lointaine, on ne pouvait pas mettre énormément de logiques sur un AS/400 sous peine de saturer la machine très rapidement. Pour parer à cet inconvénient, de nombreux programmes utilisaient la commande OPNQRYFILE qui permet de substituer au fichier physique de l’AS/400, une extraction d’une partie du fichier (le QRY) afin que le programme ne travaille que sur ces données extraites. Cette façon de faire permettait d’optimiser fortement les temps de traitements et de simplifier les programmes. La difficulté était d’écrire la requête voulue de façon dynamique. Nous verrons au chapitre Le langage CL et les commandes un exemple de cette façon de faire.

Il faut savoir qu’actuellement, il vaut mieux écrire la requête en SQL, nettement plus optimisé et plus simple à manipuler, ou alors rajouter le logique qui fera cela bien proprement et simplement avec des performances encore...

Les utilisateurs

Lorsque l’on se connecte sur un AS/400, le premier écran qui apparaît est la mire d’accueil.

Pour entrer réellement dans le système il faut saisir son nom utilisateur et le mot de passe qui va avec. Par défaut, le mot de passe est égal au nom, et, si le QSECOFR fait bien les choses, ce mot de passe ne sert qu’une fois et l’on doit en inventer un avant de pouvoir enfin entrer. Dans certains environnements sécurisés, ce mot de passe peut également avoir une durée de vie limitée. Au bout de 30 jours on doit changer de mot de passe, qui ne doit pas être le même qu’un des deux précédents. On peut également modifier à tout instant son mot de passe en tapant la commande CHGPWD.

Le profil utilisateur contient divers éléments utiles, une liste de bibliothèques *LIBL, une bibliothèque courante *CURLIB, une description de travail *JOBD, une file d’attente de messages *MSGQ. Deux autres éléments qui ne sont pas paramétrables sont également importants et très utilisés, la bibliothèque QTEMP et la zone de données LDA. Chaque utilisateur voit également ses fichiers spoule (WRKSPLF) et l’état de son travail (WRKUSRJOB). Il y a bien d’autres paramètres, mais ils relèvent plus du domaine de l’organisation...

Les utilisateurs au travail

1. La *LIBL

Par défaut cette liste contient le minimum vital, les bibliothèques système qui permettent d’utiliser les commandes AS/400, QGPL et QTEMP. Autant dire qu’avec cela on ne peut faire que de l’AS/400, on a également droit à une bibliothèque courante toujours placée en tête des bibliothèques, mais qui, par défaut, ne contient pas grand-chose non plus. Par contre, lorsqu’on travaille sur un logiciel quelconque, il y a toujours au moins deux bibliothèques nécessaires, une bibliothèque qui contient les données de l’application et une autre contenant la partie programme. Ce cas est assez rare et le plus souvent la *LIBL contient une dizaine de bibliothèques.

Par habitude QTEMP et QGPL sont en fin de liste. On peut, par programme ou par une action de l’utilisateur, modifier cette liste.

ADDLIBLE UNELIB, ajoute en première position la bibliothèque UNELIB, si elle existe. En faisant [F4], on constate qu’il y a plusieurs choix quant à la position de la bibliothèque.

RMVLIBLE UNELIB fait l’opération inverse.

EDTLIBL permet de visualiser la liste et de la modifier, il faut juste essayer d’enlever la QTEMP pour voir que tout n’est pas possible.

02ep05.png

Le programmeur manipule souvent sa *LIBL, mais il faut quand même être assez attentif dans son utilisation.

Prenons un cas assez courant. Il y a un programme de production qui fonctionne plutôt bien, mais les utilisateurs réclament une nouvelle fonctionnalité. Ce programme affiche la liste du personnel, on a une sélection sur le nom, mais il faudrait aussi pouvoir sélectionner sur la fonction. Le programmeur va modifier le programme afin de réaliser l’opération souhaitée. Passé les premiers tests unitaires, il va falloir vérifier si tout se passe bien sur la base de données réelle. Le programme et son écran se trouvent dans la bibliothèque de test TBIBPGM. Pour faire la vérification, il suffit d’entrer dans le logiciel de production (cette option n’est pas toujours possible, par exemple dans une banque), puis d’ajouter la bibliothèque TBIBPGM dans sa *LIBL, en masquant le programme de production, et de choisir l’option qui lance le programme....

Exercices

À ce stade de vos connaissances, les exercices vont se limiter à :

  • Apprendre à naviguer en AS/400, en évitant de faire des modifications. User et abuser de [F1], [F4] et [F12].

  • Chercher à comprendre comment dialoguer avec cette machine.

  • Vérifier ce que vous voyez (la *LIBL) et ce que le programme qui s’exécute voit.

Le reste viendra au fil des pages suivantes.