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
Cet article explique comment énumérer et parcourir les éléments d'une énumération de base dans Dynamics AX 2012, y compris 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 ou non être valables pour d'autres versions.
J'ai récemment créé un formulaire qui devait afficher une valeur pour chaque élément d'une énumération. Plutôt que de créer manuellement les champs (et de devoir ensuite maintenir le formulaire si l'énumération est modifiée), j'ai décidé de l'implémenter de manière dynamique afin qu'il ajoute automatiquement les champs à la conception au moment de l'exécution.
Cependant, j'ai vite découvert qu'effectuer une itération sur les valeurs d'une énumération, bien que cela soit assez simple une fois que vous savez comment procéder, est un peu déroutant.
Vous devez é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 à la fois à partir de l'index et de la valeur.
La différence entre index et valeur est que index est le numéro d'un élément dans l'énumération, si les éléments de l'énumération ont été numérotés séquentiellement à partir de zéro, tandis que value est la propriété « valeur » réelle 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 seront souvent les mêmes, mais certainement pas toujours .
Mais comment savoir quelles valeurs possède une énumération ? 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'énumération, mais ce serait évidemment trop facile, donc à la place elle renvoie le nombre de valeurs que contient l'énumération. Cependant, le nombre de valeurs n'a rien à voir avec les valeurs réelles, vous devez donc utiliser ce nombre comme base pour appeler les méthodes basées sur les index, et non celles basées sur les valeurs.
Si seulement ils avaient nommé cette méthode indexes(), cela aurait été moins déroutant ;-)
Gardez également à l'esprit que les valeurs d'énumération (et apparemment ces « index ») commencent à 0, contrairement aux index de tableau et de conteneur dans X++, qui commencent à 1, donc pour boucler sur les éléments d'une énumération, vous pouvez 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 affichera le symbole et l'étiquette de chaque élément de l'énumération dans l'infolog.