Miklix

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

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é automatiquement traduite de l'anglais afin de la rendre accessible au plus grand nombre. Malheureusement, la traduction automatique n'est pas encore une technologie au point, des erreurs peuvent donc survenir. 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. Cela peut être valable ou non 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 ce soit assez simple une fois que vous savez comment faire, est un peu déroutant.

Vous devez évidemment commencer par la classe DictEnum. Comme vous le verrez, cette classe dispose de 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'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 la valeur 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(). Vous pourriez vous attendre à ce que cette méthode retourne une liste des valeurs de l'énumération, mais ce serait évidemment trop facile, donc à la place, elle retourne le nombre de valeurs contenues dans 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 l'index, et non celles basées sur la valeur.

Si seulement ils avaient nommé cette méthode indexes(), ça 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

À propos de l'auteur

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