Lexique
Rappel général
[F4] : sans doute la touche la plus utilisée, avec [F1], de l’AS/400. IBM l’appelle "invite", parfois elle est nommée guide. Sa fonction essentielle est de proposer une liste des choix possibles. Toutes les commandes AS/400 ont leur invite qui donne la liste des paramètres nécessaires que l’on ne connaît pas forcément par cœur.
QGPL : General Purpose Library. Surnommée souvent Grande Poubelle, parce que tout ce que le système ne sait pas où mettre, ce sur quoi l’on n’a rien spécifié de particulier atterrit là. Très rapidement il s’ensuit un fouillis indescriptible d’objets hétéroclites dont personne ne connaît l’usage. Si par erreur, c’est toujours une erreur, un programmeur met quelque chose dans QGPL, il y a de fortes chances que l’ingénieur système, détruise purement et simplement l’objet qui n’a rien à faire là.
JOBD : description de travail associée à un profil utilisateur (interactif) ou à un travail en BATCH (SBMJOB).
QTEMP : l’AS/400 attribue à chaque JOB une bibliothèque temporaire. Cette bibliothèque porte le même nom, QTEMP, pour tous les travaux. Toutefois, les objets qui sont dans cette bibliothèque ne sont accessibles qu’au travail...
Les commandes
Les commandes qui commencent par RTV ne sont, en principe, utilisables que dans un CL.
1. Commandes de base
GO * : afficher la liste de tous les menus disponibles pour en sélectionner un.
GO ZZ* : afficher tous les menus dont le nom commence par ZZ pour en sélectionner un.
GO MAIN : menu de base AS/400 alias AS/400 alias iSeries et désormais System i.
GO CMDDSP : afficher toutes les commandes qui contiennent DPS (afficher).
2. Informations générales
ADDAJE : ajouter un poste de travail automatique à un sous-système.
ADDJOBQE : ajouter une JOBQ à un sous-système.
CRTJOBQ : créer une JOBQ (file de travaux).
DSPNETA : afficher le nom du système et les attributs réseau.
DSPMSGD : afficher la description détaillée d’un message (messages d’erreur système).
WRKSYSVAL : gérer les valeurs système (éviter de modifier l’heure ou la date).
WRKSBSD : gérer la description des sous-systèmes.
RTVSYSVAL : récupérer les valeurs système.
RMVJOBQE : supprimer un poste de JOBQ.
D’une manière générale, tout ce qui peut être ajouté peut être supprimé, cela ne supprime pas l’objet, mais son affectation. Pour supprimer l’objet il faut faire DLT.
3. Tâches et activités du système
PWRDWNSYS : arrêter et éventuellement redémarrer l’ordinateur, à éviter.
ENDSYS : passage en mode restreint, à éviter également.
STRSBS : démarrer un sous-système.
ENDSBS : arrêter un sous-système, moins grave, mais risqué.
WRKACTJOB : afficher les travaux actifs.
DSPLOG : afficher l’historique du système, [F4] est fortement recommandé.
DSPMSG QSYSOPR : afficher les messages systèmes.
DSPMSG : afficher les messages de l’utilisateur.
DSPUSRJOB : afficher l’état de son travail (cela permet en peu de temps de savoir où on en est)
SNDMSG, SNDBRKMSG : envoyer un message (interruptif). Attention par défaut les messages sont envoyés à tous les utilisateurs connectés.
WRKJOBQ : gérer les files de travaux. Faire une sélection est préférable, si vous trouvez 150 JOBS en attente dans une file, regarder si par hasard ce n’est pas vous-même qui bloquez la file avec un test qui est planté.
SBMJOB : au lieu de faire un call d’un programme (vous allez dévorer 30 % de la CPU), faites un SBMJOB. Même si votre programme est très gourmand on ne pourra rien vous reprocher.
Votre profil
CHGPWD : changer son mot de passe. Attention, il faut faire [F4], sinon l’AS/400 vous dira "Mot de passe modifié", mais en fait n’aura rien fait.
SIGNOFF : terminer une session. 90 sur l’écran principal a le même effet.
EDTLIBLE : éditer la liste des bibliothèques de la session.
ADDLIBLE, RMVLIBLE : ajouter ou enlever un poste à la liste des bibliothèques. [F4] est très utile.
RTVJOBA : récupérer des attributs du travail.
4. Les objets en général
CRTLIB, DLTLIB : créer ou supprimer une bibliothèque et son contenu définitivement, donc attention.
DSPOBJD : afficher la description d’un objet (on peut aussi créer un spoule ou un fichier pour lire le détail à tête reposée).
WRKOBJ : gérer les objets et les retrouver.
MOVOBJ : déplacer un objet d’une bibliothèque à une autre, quand on a compilé dans QGPL par exemple.
CRTDUPOBJ : dupliquer un objet (avec ou sans le contenu), très utile pour créer des fichiers de travail dans QTEMP.
ALCOBJ : allouer un objet. Attention si vous verrouillez très fort plus personne ne pourra utiliser l’objet. Éviter de le faire sur le fichier du personnel à partir de votre session et de vous absenter pendant 2 heures en laissant la session ouverte
DLCOBJ : déverrouiller un objet, sans danger.
WRKOBJLCK : gérer les verrouillages d’objet. Cela permet de voir qui bloque le fichier du personnel depuis 2 heures.
5. Gestion de base de données, fichiers, données
STRCMTCTL : démarrer le contrôle de validation (voir la journalisation et COMMIT/ROLLBACK).
ENDCMTCTL : arrêter le contrôle de validation.
CRTSRCPF : créer un fichier source.
CHGPF : modifier les attributs d’un fichier. Utile quand on se rend compte que le fichier du personnel ne comporte que 10 000 enregistrements et que l’on est dans une multinationale qui emploie 100 000 personnes.
DLTF : supprimer un fichier. Redoutable car on peut écrire DLTF F*, tous les fichiers dont le nom commence par F seront supprimés.
DSPFD : afficher la description d’un fichier.
DSPFFD : afficher la description des zones d’un fichier.
DSPPFM : afficher le contenu d’un membre de fichier physique à l’état brut.
DSPDBR : afficher les fichiers logiques attachés à un physique. Parfois surprenant.
RGZPFM : réorganiser un membre de PF, cela permet de récupérer de la place.
CLRPFM : effacer un membre de fichier physique, opération définitive.
CPYF : copier un fichier, une des commandes favorites des développeurs qui se prononce "C’est PIF".
OVRDBF : substituer un fichier à un autre, aux entrées clavier ou sorties écran et imprimante. Donne parfois des résultats inattendus.
DSPOVR : afficher les substitutions. Permet de comprendre pourquoi la commande précédente ne donne pas les résultats attendus.
OPNQRYFILE : ouvrir un fichier (index) de requête. Comme pour OVRDBF, la syntaxe est parfois difficile...
Principales instructions RPG
Toutes les instructions ne sont pas réunies ici, il ne sera question que des plus usitées ou des plus importantes.
1. Lecture et écriture des fichiers
Dans les ordres de lecture, deux indicateurs seront allumés indiquant si la lecture n’a pas abouti et si l’enregistrement est verrouillé. Il est important que la clé de lecture soit correctement renseignée pour que les opérations se passent bien.
Noter que ces opération de lecture et d’écriture s’appliquent également lorsqu’il s’agit de fichiers écran ou de spoules.
CHAIN : lecture sur clé. Si la clé n’est pas unique , par défaut c’est l’enregistrement le plus ancien qui est lu en premier.
SETLL : positionner avant l’enregistrement dont la clé est en paramètre.
READE : lecture sur égalité de clé. Cette instruction doit toujours suivre une des deux précédentes. À noter que SETLL suivi de READE est équivalent à CHAIN.
READ : lecture séquentielle d’un fichier. Si la lecture se fait sur un logique, l’ordre de lecture sera celui de la clé. Sur un fichier physique l’ordre sera celui de la création des enregistrements.
READC : lecture des enregistrements modifiés. Utilisé essentiellement dans la gestion des sous-fichiers.
WRITE : écriture d’un enregistrement dans un fichier. Cet ordre échoue en cas de création d’une clé en double.
UPDATE : mise à jour d’un enregistrement. Échec en cas de création d’une clé en double ou si l’enregistrement n’a pas été lu préalablement ou s’il est verrouillé.
DELETE : suppression d’un enregistrement. Échec si l’enregistrement n’a pas été lu préalablement ou s’il est verrouillé.
Il existe d’autres ordres de lecture nettement moins utilisés, en cas de besoin ne pas oublier la touche [F1] pour en savoir plus.
2. Boucles et instructions conditionnelles
Instructions qui permettent d’exécuter certaines parties du programme de façon répétitive ou si une condition est remplie ou non. En principe ce groupe d’instructions doit se terminer par END.
IF/ELSE : si la condition est remplie les instructions suivant le IF seront exécutées, dans le cas contraire ce seront celles qui suivent le ELSE.
DOxx : plusieurs options possibles dans ce type de boucle dont on ne sort que si la condition est remplie ou non. Ne pas oublier de vérifier que la condition permettra à un moment ou un autre de sortir de la boucle. DOW A=B risque de durer fort longtemps...