From armonie-ibmi-skills
Expert RPG ILE et developpement IBM i AS400. Genere du code RPG full free moderne, SQLRPGLE, consommation de webservices REST, SQL embarque, ecrans 5250 et sous-fichiers. Use when user asks to write RPG code, create DSPF PF LF files, call REST APIs from IBM i, build subfile screens, manipulate JSON, write SQL embedded in RPG, design 5250 interfaces, or troubleshoot RPG compilation errors. Trigger phrases - programme RPG, code RPG, ecran 5250, sous-fichier, SFL, webservice IBM i, SQLRPGLE, appel API REST, fichier PF, fichier LF, DSPF, pagination SFL, full free RPG. Do NOT use for general SQL queries without RPG context, PHP or Java development on IBM i, or IBM i system administration.
How this skill is triggered — by the user, by Claude, or both
Slash command
/armonie-ibmi-skills:rpg-ile-expertThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Skill de reference pour le developpement RPG ILE moderne sur IBM i.
references/algorithmes.mdreferences/ecrans-sfl.mdreferences/fichiers-dds.mdreferences/rpg-full-free.mdreferences/sql-embedded.mdreferences/webservices.mdscripts/agregation_par_categorie.rpglescripts/asyntaxfre.rpglescripts/calcul_cle_iban.rpglescripts/crud_api_example.sqlrpglescripts/jcborg-example/racedile.dspfscripts/jcborg-example/racel1.lfscripts/jcborg-example/racep.pfscripts/jcborg-example/racerile.rpgleSkill de reference pour le developpement RPG ILE moderne sur IBM i. Base sur les travaux de Jean-Christophe Borg (Formateur expert Notos) et Sylvain Aktepe (IBM Champion 2025).
Analyser la demande et classifier :
| Type de besoin | Reference a lire EN PREMIER | Exemple de script |
|---|---|---|
| Appeler une API REST | references/webservices.md | scripts/crud_api_example.sqlrpgle |
| Requetes SQL embarquees | references/sql-embedded.md | — |
| Tableaux, tri, recherche, agregation | references/algorithmes.md | scripts/agregation_par_categorie.rpgle |
| Syntaxe RPG moderne / full free | references/rpg-full-free.md | scripts/asyntaxfre.rpgle |
| Ecrans 5250 et sous-fichiers (SFL) | references/ecrans-sfl.md | scripts/jcborg-example/ |
| Creer PF / LF / DSPF | references/fichiers-dds.md | scripts/jcborg-example/ |
| Validation IBAN | references/algorithmes.md | scripts/calcul_cle_iban.rpgle |
CRITICAL: Toujours lire le guide de reference correspondant AVANT de generer du code. Si le besoin couvre plusieurs domaines (ex: ecran SFL + module externe), lire TOUS les guides concernes.
Fichiers de reference disponibles :
references/rpg-full-free.md — Syntaxe RPG full free, dcl-f, dcl-s, dcl-ds, prototypes, BIFreferences/sql-embedded.md — Curseurs, EXEC SQL, fetch, insert/update/deletereferences/webservices.md — QSYS2.HTTP_GET/POST, JSON_TABLE, parsing JSONreferences/algorithmes.md — dim(*auto), %list, sorta, %lookup, agregation, IBANreferences/ecrans-sfl.md — DSPF, SFL, SFLCTL, pagination, READC, fenetres, system(), QCMDEXCreferences/fichiers-dds.md — PF, LF, DDS DSPF, compilationRegles OBLIGATOIRES dans tout code genere :
**FREE en premiere ligne — Jamais de format fixe ou /freectl-opt obligatoire — Au minimum dftactgrp(*no) actgrp(*caller)compteurLignes plutot que i, wNomClient plutot que w1const sur les parametres non modifies — Systematiquementind avec noms explicites via renommage pointeur// Calcul du montant TTC*inlr = *on — Pour liberer les ressourcesdcl-ds pour likeds() — JAMAIS dcl-s avec likeds (erreur RNF3438)setll uniquement sur fichier keyed — Sinon close/open pour repositionner32 SFLDSP dans le DSPF, PAS N32 SFLDSPsystem('?...') pour commandes interactives — QCMDEXC ne supporte pas le prompting ?SflEnd avant ROLLUP — Eviter pagination infiniepageStart pour SRRN — Ne pas coder SRRN = 1 en durChecklist de qualite :
**FREE en premiere lignectl-opt avec les options approprieesdcl-ds (pas dcl-s) pour tout likeds() ou likerec()setll utilise UNIQUEMENT sur fichiers keyed — sinon close/open*inlr = *on en fin de programme32 pas N32), pageStart pour SRRN, test SflEnd avant ROLLUPsystem('?...') au lieu de QCMDEXCUtilisateur dit : "Je veux appeler une API REST qui retourne des produits en JSON"
Actions :
references/webservices.md pour les patterns HTTP_GET et JSON_TABLEscripts/crud_api_example.sqlrpgle pour un exemple completCRTSQLRPGI OBJ(MABIB/MONPGM) SRCFILE(MABIB/QSOURCES) COMMIT(*NONE) DBGVIEW(*SOURCE)Resultat : Programme SQLRPGLE compilable qui consomme l'API et traite la reponse JSON.
Utilisateur dit : "Je veux un ecran de gestion d'objets avec sous-fichier"
Actions :
references/ecrans-sfl.md pour les patterns SFL/SFLCTL et les regles critiquesreferences/fichiers-dds.md pour la creation du DSPFscripts/jcborg-example/ pour l'exemple complet32 SFLDSP logique positive, touches CA au niveau format, pas d'accents)pageStart variable, test SflEnd avant ROLLUP)dcl-ds pour retour likeds)system('?...') pas QCMDEXCResultat : Application 5250 complete avec liste paginee, couleurs, et actions sur les enregistrements.
Utilisateur dit : "Je dois trier et agreger des donnees par categorie"
Actions :
references/algorithmes.md pour dim(*auto), sorta, agregationscripts/agregation_par_categorie.rpgle pour l'exempleCRTBNDRPG et DBGVIEW(*SOURCE)Resultat : Programme RPG performant avec traitement des donnees en memoire.
Cause : dcl-s wVar likeds(maDS) — likeds est interdit sur dcl-s.
Solution : Utiliser dcl-ds wVar likeds(maDS). Regle : dcl-s = variable simple, dcl-ds = structure.
Cause : setll *loval MONFMT sur un fichier sans mot-cle keyed (ex: sortie DSPOBJD, OUTFILE).
Solution : Fermer et rouvrir le fichier (close puis open). Voir references/ecrans-sfl.md section "Fichier non-keyed".
Cause : BIF ou syntaxe non supportee par la version IBM i.
Solution : Verifier version avec DSPDTAARA DTAARA(QSS1MRI). %list, %range, for-each necessitent IBM i 7.4+.
Cause : CA03/CA12 declare au niveau fichier ET format avec INDARA.
Solution : Avec INDARA, declarer les touches UNIQUEMENT au niveau format (record level).
Cause : Accents (e, e, a, c) dans les constantes DSPF.
Solution : Pas d'accents dans les DDS. Ecrire Bibliotheque pas Bibliothèque.
Cause : N32 SFLDSP (logique negative) alors que RPG met *in32 = *on (logique positive).
Solution : Utiliser 32 SFLDSP (logique POSITIVE). Convention : 32=SFLDSP, N31=SFLDSPCTL, 31=SFLCLR, 90=SFLEND.
Cause 1 : SRRN = 1 code en dur avant chaque exfmt.
Cause 2 : Pas de test SflEnd avant ROLLUP.
Solution : Variable pageStart + if not SflEnd avant pagination. Voir references/ecrans-sfl.md.
Cause : CRTBNDRPG avec bnddir('MONDIR') mais BNDDIR inexistant ou module absent.
Solution : Ordre : 1. CRTRPGMOD 2. CRTBNDDIR 3. ADDBNDDIRE 4. CRTBNDRPG
Cause : QCMDEXC ne supporte pas le prefixe ? pour le prompting. Commandes CRTDUPOBJ, RNMOBJ, CHGOBJD echouent silencieusement.
Solution : Utiliser system() C (bnddir QC2LE) avec prefixe ?. Voir references/ecrans-sfl.md.
Cause : Fonctions HTTP QSYS2 non disponibles. Solution : Verifier PTF installees. Contacter admin IBM i.
Cause : FETCH sur curseur non ouvert ou deja ferme.
Solution : Verifier sequence DECLARE, OPEN, FETCH, CLOSE. Voir references/sql-embedded.md.
DSPDTAARA DTAARA(QSS1MRI))npx claudepluginhub sylvainarmonie/armonie-group-armonie-ibmi-skills --plugin armonie-ibmi-skillsCreates new ABAP programs (Report, CRUD, ALV, Batch) with Main+Include structure supporting OOP or Procedural paradigms using a multi-phase coding and QA pipeline.
Assists with ABAP code for SAP systems: internal tables, structures, ABAP SQL, OOP, RAP, CDS views, EML statements, ABAP Cloud, strings, dynamic programming, RTTI/RTTC, field symbols, data references, exceptions, unit testing.
Queries a plugadvpl index to look up ADVPL metadata (functions, callers/callees, table usage, MV_ params, SX3 fields, SX7 chains) before reading full source files, reducing token usage 10-50x.