Miklix

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++.


Cette page a été traduite de l'anglais afin de la rendre accessible au plus grand nombre. Malheureusement, la traduction automatique n'est pas encore une technologie parfaite, et des erreurs peuvent donc se produire. Si vous préférez, vous pouvez consulter la version originale en anglais ici :

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 :

DictEnum dictEnum = new DictEnum(enumNum(SalesStatus));
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.

Partager sur BlueskyPartager sur FacebookPartager sur LinkedInPartager sur TumblrPartager sur XPartager sur LinkedInÉpingler sur Pinterest

Mikkel Bang Christensen

A propos de l'auteur

Mikkel Bang Christensen
Mikkel est le créateur et le propriétaire de miklix.com. Il a plus de 20 ans d'expérience en tant que programmeur informatique professionnel/développeur de logiciels et travaille actuellement à plein temps pour une grande entreprise européenne de TI. Lorsqu'il ne blogue pas, il consacre son temps libre à un large éventail d'intérêts, de passe-temps et d'activités, ce qui peut se refléter dans une certaine mesure dans la variété des sujets abordés sur ce site web.