Enumération typée
Depuis décembre 2025, le compilateur RPG permet la déclaration d’une énumération typée, ainsi que de variables de même type que l’énumération.
Prérequis
Avoir les PTFs :
7.5:
- ILE RPG compiler: 5770WDS SJ08375
7.6:
- ILE RPG compiler: 5770WDS SJ08384
- ILE RPG compiler, TGTRLS(V7R5M0): 5770WDS SJ08394
Syntaxe
Par exemple :

Il faut indiquer le type précis de l’énumération, ici CHAR(3). Les valeurs des constantes énumérées doivent correspondre au type.
DFT indique une valeur par défaut : 1 et 1 seule, facultatif.
Il est impossible de définir une énumération comme une autre énumération :

Par contre, vous pouvez définir des variables comme une énumération typée :

Quelques règles
- une valeur par défaut supportée par énumération
- initialisation des variables ou zone de DS par une valeur de l’énumération :
dcl-s myCall1 like(CALL_TYPE) inz(CALL_TYPE.DISPLAY): OKdcl-s myCall2 like(CALL_TYPE) inz('DSP'): Erreur, même si la valeur existe dans l’énumération
- si
inzest indiqué sans valeur, la valeur par défaut de l’énumération est utilisée - de même pour l’affectation d’une nouvelle valeur, doit se faire via l’énumération, quelque soit le type de valeur :
myCall1 = CALL_TYPE.UPDATE: OKmyCall1 = 'UPD'oumyCall1 = ('U' + 'PD'): Erreur
- Les fonctions
%hivalet%lovalfonctionnent

- Contrairement à
*hivalet*loval
En tant que tableau ou liste
Il est possible d’utiliser une énumération partout où un tableau est utilisable, sauf avec :
- SORTA
- %elem
- %lookup
- %subarr
Par exemple en tant que liste :

Domaine de validité
Seules les valeur de l’énumération sont utilisables, toute autre valeur provoque une erreur de compilation.
Toutefois, il est possible de contourner ce fonctionnement.
Pour les variables de type numérique, les calculs sont autorisés :

En passant avec un pointeur :

En paramètre de procédure
Cela permet d’indiquer explicitement les valeurs autorisés pour les paramètres définis comme une énumération :

- la valeur de retour est définie par
like(ERROR)et ne pourra avoir que les valeurs définies - le paramètre p_callType est défini par
like(CALL_TYPE)pour lequel les valeurs sont également définies
C’est beaucoup plus pertinent qu’un commentaire, le compilateur effetuant le contrôle.
Précompilateur SQL
Les valeurs énumérées sont reconnues en tant que constantes, et les variables définies depuis une énumération sont utilisables :

Par contre, l’affectation d’une valeur non énumérée est possible :

L’utilisation en tant que liste de valeurs dans un IN SQL n’est pas supportée :

option de compilation CCSID(*EXACT)
Si votre énumération est définie en CHAR ou VARCHAR et contient des valeurs non définies par des constantes hexadécimales, c’est à dire la plupart des cas, vous devez indiquer ctl-opt ccsid(*exact).
C’est une obligation afin que le compilateur ne fasse pas de supposition incorrecte sur le CCSID des littéraux pour comparaison avec les variables de vos programmes. Aucune conversion implicite n’est effectuée et cela évote les incohérences que l’on peut avoir, particulièrement avec des fichiers source dans l’IFS, généralement encodés en UTF-8.
Références
https://www.ibm.com/docs/en/i/7.6.0?topic=enumerations-typed
https://www.ibm.com/support/pages/rpg-cafe
https://ibm.biz/rpgcafe_fall_2025_fld_like_enum
https://www.ibm.com/docs/en/i/7.6.0?topic=keyword-ccsidexact


