Comment parcourir les éléments d'une énumération à partir du code X++ dans Dynamics AX 2012
Publié : 15 février 2025 à 23:10:36 UTC
Dernière mise à jour : 12 janvier 2026 à 08:41:56 UTC
Cet article explique comment énumérer et parcourir les éléments d'une énumération de base dans Dynamics AX 2012, et comprend 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 cet article sont basées sur Dynamics AX 2012 R3. Elles peuvent ne pas être valides pour d'autres versions.
J'ai récemment créé un formulaire qui devait afficher la valeur de chaque élément d'une énumération. Plutôt que de créer les champs manuellement (et de devoir ensuite modifier le formulaire si l'énumération venait à changer), j'ai opté pour une implémentation dynamique afin que les champs soient automatiquement ajoutés au formulaire lors de l'exécution.
Cependant, j'ai rapidement découvert que l'itération sur les valeurs d'une énumération, bien qu'assez simple une fois qu'on sait comment faire, est en réalité un peu déroutante.
Il vous faut évidemment commencer par la classe DictEnum. Comme vous le verrez, cette classe possède plusieurs méthodes permettant d'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 réside dans le fait que l'index correspond au numéro de l'élément dans l'énumération, si les éléments de cette dernière sont numérotés séquentiellement à partir de zéro, tandis que la valeur représente la propriété « valeur » de l'élément. Comme la plupart des énumérations ont des valeurs numérotées séquentiellement à partir de 0, l'index et la valeur d'un élément sont souvent identiques, mais pas toujours.
Mais comment connaître les valeurs d'une énumération ? C'est là que les choses se compliquent. La classe DictEnum possède une méthode `values()`. On pourrait s'attendre à ce que cette méthode renvoie la liste des valeurs de l'énumération, mais ce serait trop simple. Elle renvoie donc le nombre de valeurs que contient l'énumération. Cependant, ce nombre est indépendant des valeurs elles-mêmes ; il faut donc utiliser ce nombre comme base pour appeler les méthodes indexées, et non les méthodes basées sur les valeurs.
Si seulement ils avaient appelé cette méthode indexes(), cela aurait été moins confus ;-)
Il faut également noter que les valeurs d'énumération (et apparemment ces « index ») commencent à 0, contrairement aux index des tableaux et des conteneurs en X++, qui commencent à 1. Ainsi, pour parcourir les éléments d'une énumération, vous pouvez procéder comme suit :
Counter c;
;
for (c = 0; c < dictEnum.values(); c++)
{
info(strFmt('%1: %2', dictEnum.index2Symbol(c), dictEnum.index2Label(c)));
}
Cela affichera le symbole et l'étiquette de chaque élément de l'énumération dans le journal d'informations.
Lectures complémentaires
Si vous avez apprécié cet article, vous aimerez peut-être aussi ces suggestions :
- Appel des services de documents AIF directement depuis X++ dans Dynamics AX 2012
- Présentation rapide de Dynamics AX 2012 SysOperation Framework
- Identification de la classe de document et de la requête pour le service AIF dans Dynamics AX 2012
