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


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 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 :

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 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 :


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

Mikkel Christensen

À propos de l'auteur

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