Comment parcourir les éléments d'une énumération à partir du code X++ dans Dynamics AX 2012
Publié : 15 février 2025 à 23 h 18 min 34 s UTC
Dernière mise à jour : 12 janvier 2026 à 08 h 42 min 34 s UTC
Cet article explique comment énumérer et boucler les éléments d’un enum de base dans Dynamics AX 2012, incluant un exemple de code X++.
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
Les informations contenues dans ce billet sont basées sur le Dynamics AX 2012 R3. Cela peut être valide ou non pour d’autres versions.
J’étais récemment en train de créer un formulaire qui devait afficher une valeur pour chaque élément dans un enum. Plutôt que de créer manuellement les champs (et ensuite de devoir maintenir le formulaire si l’enum était modifié), j’ai décidé de l’implémenter dynamiquement pour que les champs s’ajoutent automatiquement à la conception à l’exécution.
Cependant, j’ai vite découvert que titér réellement sur les valeurs d’un enum, même si c’est facile une fois qu’on sait comment faire, c’est un peu déroutant.
Tu dois évidemment commencer par le cours DictEnum. Comme vous le verrez, ce cours propose plusieurs méthodes pour obtenir des informations telles que le nom et l’étiquette, à partir de l’index et de la valeur.
La différence entre l’index et la valeur est que l’indice est le nombre d’un élément dans l’enum, si les éléments de l’enum étaient numérotés séquentiellement à partir de zéro, tandis que la valeur est la propriété réelle de « valeur » de l’élément. Comme la plupart des enums ont des valeurs numérotées séquentiellement à partir de 0, l’indice et la valeur d’un élément seront souvent les mêmes, mais certainement pas toujours.
Mais comment savoir quelles valeurs possède un enum? C’est là que ça devient confus. La classe DictEnum possède une méthode appelée values(). On pourrait s’attendre à ce que cette méthode renvoie une liste des valeurs de l’enum, mais ce serait évidemment trop simple, donc elle retourne plutôt le nombre de valeurs que contient l’enum. Cependant, le nombre de valeurs n’a rien à voir avec les valeurs réelles, donc vous devez utiliser ce nombre comme base pour appeler les méthodes basées sur l’index, et non celles basées sur la valeur.
Si seulement ils avaient nommé cette méthode indexes() à la place, ça aurait été moins confus;-)
Gardez aussi en tête que les valeurs d’enum (et apparemment ces « indices ») commencent à 0, contrairement aux indices de tableaux et conteneurs dans X++, qui commencent à 1, donc pour boucler les éléments d’un enum, vous pourriez faire quelque chose comme ceci :
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
Cela va envoyer le symbole et l’étiquette de chaque élément de l’enum dans l’infolog.
Lectures complémentaires
Si vous avez apprécié cet article, vous aimerez peut-être aussi ces suggestions :
- Aperçu rapide de Dynamics AX 2012 SysOperation Framework
- Convertir un réel en chaîne avec toutes les décimales dans Dynamics AX 2012
- Utilisation d'une requête dans une classe de contrat de données SysOperation dans Dynamics AX 2012
