, Plugin Isphere pour RDI

Isphere est un plugin open-source qui vous apportera quelques fonctionnalités intéressantes. Vous pourrez le télécharger grâce au lien ci-dessous :

https://isphere.sourceforge.io/

Pour l’installer, il faut tout d’abord télécharger et extraire l’archive en local puis lancer RDI. Cliquez ensuite sur l’onglet Aide > Installer un nouveau logiciel.

Cliquez sur local, sélectionnez le dossier que vous avez précédemment extrait puis faites OK.

Vous pouvez tout sélectionner et faire suivant jusqu’au bout.

Afficher les intitulés

Plus besoin de cliquer sur un objet / membre et de regarder la vue propriété pour avoir le texte.

Pour activer l’affichage des intitulés, cliquez sur Affichage > Préférences puis activez les deux rubriques isphere dans Général > Apparence > Décorations d’intitulés.

Résultat :

Recherche de chaine de caractères

Vous pouvez déjà le faire dans RDI en faisant un clic droit sur un fichier source / bibliothèque « Rechercher la chaine ». Mais cette option peut prendre du temps. Utilisez plutôt « Isphere source file search ».

Saisir la chaine à recherche et faites OK.

Si vous faites un double-clic sur la ligne ça ouvrira le source en édition.

Gestion des MSGF

Comme pour la recherche de chaine, on peut déjà modifier un fichier de message mais ce n’est pas très pratique. Il faut déplier le fichier de message, faire un clic droit modifier sur le message et modifier le texte.

Avec Isphere vous pouvez faire un clic droit « Isphere Message File Editor ».

Il va ouvrir le fichier de message et vous pourrez effectuer des recherches de texte, double cliquer sur un message pour l’éditer etc…

Gestion des postes d’un répertoire de liage

Clic droit sur le répertoire de liage puis « Isphere Binding Directory Editor ».

Dans l’onglet qui vient de s’ouvrir, vous pouvez ajouter un programme de service au répertoire de liage avec un simple clic droit / New (équivalent de la commande ADDBNDDIRE).

Vous avez également la possibilité d’en supprimer.

Copier un membre source

Très pratique si vous voulez copier un source d’un système à un autre (ou sur le même).

Clic droit sur un membre (ou plusieurs), puis « Copy Member’s to ».

Choisissez le système / fichier source / bibliothèque de destination et cliquez sur « Copy ».

Comparer des sources

Déjà disponible dans RDI mais Isphere permet de le faire plus facilement. Très pratique si l’on veut comparer deux sources sur deux systèmes (ou le même).

Faites un clic droit sur le source puis « Isphere compare Editor ».

, , , Une commande méconnue FNDSTRPDM2

On utilise de moins en moins PDM et SEU, pour le remplacer par du RDI ou Visual studio code, ce qui est le sens de l’histoire, mais cette commande peut vous aider, surtout si vous ne disposez pas d’outils d’analyse (Arcad, X-Analysis, Grefer, etc…)

Cette commande permet de faire un FNDSTRPDM (option 25 dans la gestion des membres) sur une liste de fichiers sources, FNDSTRPDM étant limité à un seul fichier source par recherche

Vous devez définir la liste des fichiers à analyser
Pour ceci, vous avez un fichier modèle QAUOSR2 dans la bibliothèque QPDA
Il est conseillé de le dupliquer sous un nouveau nom dans votre bibliothèque

C’est un fichier source que vous pouvez éditer facilement par SEU, RDI, VSCODE, ou SQL

Il est composé de 3 zones de 10 caractères

Exemple :

Notre fichier s’appellera souvent FNDSTRPDM2 membre FNDSTRPDM2 et on choisira une bibliothèque.

£lib       £file      £member   
GDATA      QCLSRC     *ALL       
GDATA      QRPGLESRC  *ALL       
GDATA      QDDSSRC    *ALL       
GDATA      QCMDSRC    *ALL
GDATA      QSQLSRC    M* 


Dans les membres vous pouvez indiquer *ALL ou un nom générique

Vous pouvez ensuite lancer la commande de recherche avec le paramétrage que vous désirez

Exemple

FNDSTRPDM2 STRING(DCL)
FILE(GDATA/FNDSTRPDM2)
MBR(FNDSTRPDM2)
OPTION(NONE) PRTMBRLIST(YES)

Ici on a demandé une liste que vous retrouvez dans votre spool, c’est un fichier QPUOPRTF, il y en a un par fichier source

Exemple :

  Nb d'occurrences  . . :   102 
                                 
                          Création  Dernière modif              
  Membre      Type        Date      Date      Heure     Enreg   
  ----------  ----------  --------  --------  --------  ------- 
  AAAA        CLLE        01/07/21  15/01/24  15:28:17  0000006 
  AAAA2       CLLE        10/01/24  16/09/23  10:25:24  0000009 
  AAA1        CLLE        16/05/23  06/06/23  10:24:58  0000017 
  AADB        CLLE        02/01/24  02/01/24  10:59:24  0000005 
  AAPF2CL     CLLE        03/07/23  03/07/23  13:53:03  0000008  
            

Vous pouvez également demandé la liste des enregistrements comportant votre chaine, PRTRCDS(*ALL) vous obtenez également à une autre liste dans vos spools

Exemple :

 Membre  . . . . . . . :   AAAA2                                               
 Type  . . . . . . . . :   CLLE                                                
 Texte . . . . . . . . :   Liste des touches de fonction d'un RPG              
 Longueur d'enreg  . . :   92                                                  
     SEQNBR  *...+....1....+....2....+....3....+....4....+....5....+....6....+...
                          DCL                                                    
          4               DCL        VAR(&TXT) TYPE(*CHAR) LEN(80)               
                          DCL                                                    
          5               DCL        VAR(&id ) TYPE(*CHAR) LEN(7)                
 Nombre d'enregistrements explorés . . . . . . . . :   9                         
 Nombre d'enregistrements à trouver  . . . . . . . :   *ALL                      
 Nombre d'enregistrements trouvés  . . . . . . . . :   2                         
 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _   F I N   D U   M E M B R E 

On rencontre 2 usages principalement

Pour rechercher dans tous les sources d’une bibliothèque

£lib       £file      £member   
GDATA      QCLSRC     *ALL       
GDATA      QRPGLESRC  *ALL       
GDATA      QDDSSRC    *ALL       
GDATA      QCMDSRC    *ALL 

Pour rechercher dans tous les sources RPGLE de plusieurs bibliothèques

£lib       £file      £member
GDATA      QRPGLESRC  *ALL   
GDATA1     QRPGLESRC  *ALL       
GDATA2     QRPGLESRC  *ALL       
GDATA3     QRPGLESRC  *ALL 

Remarques :

Vous pouvez facilement générer cette liste dynamiquement si vous le désirez en utilisant SQL et les vues de QSYS2.

Exemple :

INSERT INTO GDATA/FNDSTRPDM2 VALUES((select max(srcseq) + 1 from
gdata/fndstrpdm2), 0, ‘Biblio ‘ concat ‘ ‘ concat
‘Fichier ‘ concat ‘ ‘ concat ‘Membre ‘)

Il existe d’autres solutions pour scanner vos fichier sources, mais celle ci est simple à mettre à œuvre, et vous avez de grande chance d’avoir QPDA sur vos machines.

, Superposition dans les DSPF OVERLAY

Afficher des formats en superposition

Vous voulez afficher 3 formats en même temps

Premier point
Les formats ne doivent pas se chevaucher

Deuxième point
les formats qui devront s’afficher en plus d’un format affiché devront avoir le mot clé OVERLAY

Troisième points
Pour que le contenu d’un format soit lu il faut

Exfmt + ou touche CF
ou
Write + Read

Notre écran a 3 formats (Haut , Milieu, Bas)
c’est le milieu qui doit être en exfmt (reçoit le focus)

Le DSPF

A                                      DSPSIZ(24 80 *DS3) 
A          R HAUT                                         
A            ZONE1         10A  B  6  3                   
A                                  4  3'Format haut'      
A          R MILIEU                                       
A                                       OVERLAY           
A                                       CA03(03)          
A            ZONE2         10A  B 12  3                   
A                                 10  3'Format milieu'    
A          R BAS                                          
A                                       OVERLAY           
A                                 22 10'F3 = Exit'        
A                                 21  3'Format bas'       
**free                          
Ctl-Opt DFTACTGRP(*NO);         
Dcl-f overlay  WORKSTN;         
  dou *in03       ;             
    write haut      ;           
    write bas       ;           
    exfmt milieu    ;           
    if not *in03    ;           
      read haut       ;         
      dsply zone1     ;         
      dsply zone2     ;         
    endif ;                     
  enddo ;                       
*inlr = *on; 

Remarque :

cette règle s’applique dans les formats Fenêtres (WINDOW)
par contre les règles de chevauchement pour les fenêtres sont différentes

, , Convertir les carte H, D et F sous RDI

Vous utilisez RDI pour éditer vos programmes RPGLE et vous avez des cartes de déclaratives

H,D,F et vous voulez les convertir en free , voici 2 solutions simples

Solution 1, en ligne sur notre site

https://www.volubis.fr/convertisseur.html

Collez votre sélection dans le formulaire et appuyer sur le bouton Convert

Il vous faudra recopier votre sélection.

Solution 2, installez un plugin Eclipse

Craig Rutledge en a créé un bien il est disponible ici

https://jcrcmds.sourceforge.net/eclipse/rdi8.0/

Suivez la procédure pour paramétrer le plugin dans RDI et l’installation de la bibliothèque JCRCMDS s’il elle n’existe pas sur votre partition, c’est la commande JCRHDF qui sera utilisée, vous pouvez également l’utiliser en 5250, si vous le désirez

L’utilisation est très simple dans un source de type RPGLE ou SQLRPGLE , vous avez une nouvelle option sur le clic droit, JCRCMDS.

.

.

.

Voila , simple et efficace

Il est difficile de déboguer un watcher parce qu’on ne maitrise pas son lancement.

Voici une méthode en utilisant RDI, qui va vous permet de le faire :

  1. Trouver le nom du programme à analyser :

WRKWCH WCH(*ALL) :

  • 5 pour le détail
  • Dans RDI, clic droit sur le programme à déboguer => débogage ou couverture de code (entrée de service) => définir un point d’entrée de service

Le message d’affiche :

Pour tester, on peut simuler un traitement qui va planter. Dans notre cas, on fait un call d’un programme qui n’existe pas, et donc ça va faire un plantage dans QSYSOPR.

SBMJOB CMD(CALL PGM(GAIA/ERREURA)) 

        JOB(ERREURA)                

        JOBQ(QSYSNOMAX)         

Une fois le programme a été lancé, sur RDI s’affichera le message suivant :

Cliquer sur « Afficher *LISTING »

Pour avancer d’un pas on peut utiliser la touche F5 ou en cliquant sur la flèche :

Pour afficher les valeurs des variables il suffit de passer la souris sur le nom de la variable :

Conclusion : c’est une solution simple pour déboguer un watcher ou un programme dont vous ne maitrisez pas le lancement.

Le programme doit être compilé avec le source.

Vous devrez avoir le droit pour faire ce type d’opération. Soit au niveau de profil, soit par les fonctions usages.

, Debug RDi : conditionner un point d’arrêt

Vous savez peut-être déjà comment créer un point d’arrêt conditionné en Débogage RPG 5250 (commande STRDBG).

Le mode Débogage RDi offre la même possibilité.

Cette fonctionnalité est particulièrement intéressante pour réaliser un Débogage ciblé dans un programme batch qui traite un gros volume de données.

Nous allons le vérifier avec l’exemple ci-dessous :

Considérons une table CLIENTS contenant les colonnes et lignes suivantes :

Le programme PROGTEST lit la tables CLIENTS et exécute la procédure traitement_CLIENTS pour chacun des clients de la table :

Nous allons utiliser le Débogage pour créer un point d’arrêt conditionné sur la ligne d’exécution de la procédure traitement_CLIENTS, afin de pouvoir déboguer ce traitement uniquement pour le client dont le code est 69002.

Point d’arrêt conditionné en Débogage 5250

On crée un point d’arrêt conditionné par une commande BREAK n°ligne WHEN condition

La condition peut utiliser toutes les variables connues du programme, ici le code client = variable CODE

On exécute le programme :

Point d’arrêt juste avant le traitement du client souhaité :

Si on demande la reprise par F12, le programme se poursuit et se termine sans autre point d’arrêt

Point d’arrêt conditionné en Débogage RDi

On crée notre point d’entrée de service pour le programme PROGTEST

On ouvre la perspective Débogage sous RDi puis on exécute le programme en 5250 :

On crée tout d’abord notre point d’arrêt :

Clic droit sur le point d’arrêt + Editer le point d’arrêt :

La condition d’arrêt doit être indiquée sur la ligne « Expression » :

On reprend ensuite l’exécution du programme :

Le programme s’arrête sur notre point d’arrêt pour le client 69002 :

F8=Reprendre –> le programme s’exécute jusqu’à la fin sans nouveau point d’arrêt
, , , Comment gérer les options de compile des PRTF

On se demande souvent comment gérer les paramètres de compile sur les PRTF et les DSPF, il existe plusieurs solutions comme créer des CL de compile par exemple, ou utiliser des ALM qui intègrent cette possibilité. Mais comment faire pour que ca marche tout le temps sans avoir à modifier les commandes de compile

Voici une solution qui a été mise au point pour nos clients du centre de service.

On va utiliser le programme d’exit QIBM_QCA_CHG_COMMAND qui, à chaque fois qu’il verra un CRTPRTF l’interceptera.

Pour éviter que cela ne boucle on devra dupliquer la commande CRTPRTF dans une autre bibliothèque et renvoyer sur celle de QSYS quand on aura fait le paramétrage complémentaire.

Cette bibliothèque devra donc être devant QSYS dans la liste des bibliothèques, imaginons que cette bibliothèque s’appelle GDDS.

CHGSYSLIBL LIB(GDDS)

soit DSPLIBL

dans le source de votre PRTF vous allez indiquer des lignes commençant par A*<COMP> et terminées par </COMP>

+ votre mot clé exemple SAVE(*YES)
Vous pouvez indiquer plusieurs paramètres sur une seule ligne.

Nous avons 2 programmes que vous pouvez retrouver ici, il vous suffit des les compiler et de les ajouter à la bibliothèque GDDS que vous avez placée en tête de liste

Vous avez donc dans votre bibliothèque 2 programmes et une duplication de la commande CRTPRTF et (du CRTDSPF si vous l’ajoutez)

RTVMBRSRC qui va retrouver à partir de la commande le membre source à compiler
GDDS qui prendra la commande et qui lui ajoutera les informations lues dans le fichier source
c’est ce programme qu’on devra ajouter au programme d’exit comme ceci :
ADDEXITPGM EXITPNT(QIBM_QCA_CHG_COMMAND) FORMAT(CHGC0100) PGMNBR(92)
PGM(GDDS/GDDS) TEXT(‘Paramétrage GDDS’) PGMDTA(*JOB 20
‘CRTPRTF GDDS ‘)

Attention au paramètre PGMDTA, la commande fois faire 10 de long pour que le système la trouve

idem pour les DSPF voire les PF et LF.

Vous trouverez le source des 2 programmes ici https://github.com/Plberthoin/PLB/tree/master/GTOOLS/RPG

Vous avez un programme CLLE INITGDDS qui peut vous aider dans le répertoire CLP

==>WRKREGINF QIBM_QCA_CHG_COMMAND puis option 8


Avec cette commande, on prendra en compte désormais les CRTPRTF.
A partir de ce moment là, quand vous passerez la commande CRTPRTF, vos paramètres indiqués dans le sources seront ajoutés à la commande.

Par exemple en demandant l’invite sur la commande :
CRTPRTF FILE(GDATA/PRTF198) SRCFILE(GDATA/QDDSSRC) SRCMBR(*FILE)
Vous aurez vos paramètres

Remarque :
Vous pouvez indiquer un programme d’exit pour les DSPF (CRTDSPF), et même si vous avez encore quelque PF (CRTPF), les LF (CRTLF)
Bien sûr, tous les mots clés que vous indiquez doivent syntaxiquement être justes et correspondre au type de fichier que vous créez.
Cette solution marche en interactif, en batch, par RDI et par Vs Code, dans vos CL de compile etc …

, , Visual studio code IBM i Snippets

Vous connaissez tous, au moins de nom l’extension « code for i » qui vous permet d’éditer vos sources RPGLE dans votre éditeur favori qui est publié par notre Ami Liam Allan

Si voulez en savoir plus une vidéo très bien faite de notre ami de Yvon est disponible sur la chaine youtube de Volubis ici

Mais il existe également des extensions créé par d’autres contributeurs en voici une qui est apparu en 2022 « IBM i Snippets », elle a été créée par Andy Youens.

L’installation est très simple à partir de la gestion des extensions

Le principe de cette extension est de vous proposer des exemples de codes (par exemple des squelettes pour du RPGLE ou CLLE).

Son usage est très simple vous devez saisir « !i » dans votre éditeur favori .


Cette extension bouge beaucoup depuis sa sortie et les dernières contributions sont récentes, n’hésitez pas à proposer des exemples de codes si vous en avez qui soit présentable

Nous pensons qu’il y aura de plus en plus de extensions disponibles pour l’IBMI et une amélioration de celle exitantes extensions existantes, il est donc important d’avoir un œil ce mode de développement , en sachant que les « JEUNNNNES » connaissent déjà cet interface

, RDi : configurer et déployer les Actions de l’utilisateur

Les actions utilisateur vous permettent d’exécuter des commandes préformatées sur les objets ou sur les membres de vos filtres, en utilisant le clic droit pour exécuter l’action.

Elles sont équivalentes aux options définies par l’utilisateur que l’on peut gérer par F16 sous PDM.

Gérer les actions de l’utilisateur

La gestion des actions utilisateur est accessible par clic droit sur les objets ou membres des filtres.

Créer une action objet

Nous allons créer une action pour exporter une table vers l’IFS au format CSV.

L’action utilisera la commande CPYTOIMPF que nous allons préformater.

Le bouton « Insérer une variable » affiche la liste des variables que nous allons pouvoir utiliser dans les paramètres de la commande pour substituer les attributs de l’objet sur lequel l’action s’exécute :

Le bouton « Invite » permet d’afficher l’invite de commande pour compléter les paramètres :

La case « Interroger d’abord » permettra d’afficher l’invite de commande lors de l’utilisation de l’action.

Enfin, il est conseillé d’indiquer les types de ressources pour lesquelles cette action sera proposée dans le clic droit :

Une fois créée, l’action apparait dans le catalogue des actions Objet :

Elle peut être utilisée par clic droit sur un objet de type fichier :

L’invite de commande est affichée avec les valeurs de substitution des variables utilisées :

Le message d’exécution de l’action s’affiche dans l’historique des commandes de RDI :

Le fichier CSV est créé dans l’IFS :

Créer une action membre

Nous allons créer une action permettant de convertir un membre source RPG 4 en RPG FREE.

Pour cela, nous avons créé une commande CVTRPGFREE basée sur un convertisseur Open Source auquel GAIA contribue.

Pour limiter l’action au membres sources de type RPGLE et SQLRPGLE, nous allons Editer la liste des Types définis et créer un Type défini que nous nommerons RPGLE et qui rassemblera les types de membre RPGLE et SQLRPGLE :

Le fenêtre « Gérer les types nommés » s’ouvre :

Le bouton « Parcourir » permet de choisir les types de membre existants pour les ajouter à la liste :

Le nouveau Type défini « RPGLE » s’affiche dans la liste des types de membres définis :
On peut maintenant l’utiliser pour notre action :

Une fois créée, l’action apparait dans le catalogue des actions Membre :

Elle peut être utilisée par clic droit sur un membre de type RPGLE ou SQLRPGLE pour le convertir en RPG FREE :

Le message d’exécution de l’action s’affiche dans l’historique des commandes de RDI :
Le membre PGMRPGFREE a été créé avec la conversion en RPG FREE du membre initial PGMRPG4 :

Notons qu’en effectuant une sélection de plusieurs ressources dans un filtre, on peut exécuter une action utilisateur sur toutes ces ressources par un seul clic droit.

Exemple ci-dessous : on peut exporter 4 fichiers vers l’IFS au format CSV en un seul clic

Exporter/Importer les actions utilisateur

Les actions utilisateur peuvent être exportées vers un fichier de configuration à partir du menu

Fichier > Exporter > Rational Developer for i :

2 modes d’exportation sont possibles :

  • l’export « Fichier de configuration » permet d’exporter la configuration vers un fichier local, qui pourra si on le souhaite être partagé et importé par d’autres utilisateurs vers leur Workspace.
  • l’export « Fichier de configuration pour distribution automatique » permet d’exporter la configuration pour la distribuer automatiquement aux autres utilisateurs

Exporter Fichier de configuration pour distribution automatique

Pour exporter les actions utilisateur, décocher toutes les cases et ne conservez que la configuration « Artefacts de systèmes distants ».

Les filtres sont exportés, lors de l’import vous perdrez donc les filtres de votre Workspace.

Ca peut être gênant, mais ça peut aussi être l’occasion de faire du ménage dans vos filtres….

Le fichier de configuration sera généré dans le répertoire suivant de l’IFS :

/QIBM/ProdData/Devtools/clientconfig

Choisissez un numéro de version pour identifier le fichier de configuration :

Avant de Terminer, assurez-vous d’avoir les droits d’écriture dans le répertoire de destination.

Le fichier de configuration est généré dans l’IFS pour une distribution automatique de cette configuration :

Lorsque les utilisateurs se connecteront à l’IBM i, une fenêtre d’importation leur sera automatiquement proposée :

L’import peut être accepté (OK) ou pas (Annuler) mais tant qu’il n’aura pas été accepté, il sera reproposé à chaque connexion à l’IBM i par RDI.

C’est terminé !

PS :

Si le fichier de configuration a été exporté vers un fichier local par l’export Fichier de configuration au lieu de Fichier de configuration pour distribution automatique, il peut être importé de la même manière par le menu Fichier > Importation > Rational Developer for i > Fichiers de configuration. Il suffit d’indiquer l’emplacement du fichier de configuration, ensuite la procédure est identique à celle de la distribution automatique :