Miklix

Hoe u over de elementen van een enum kunt itereren vanuit X++-code in Dynamics AX 2012

Gepubliceerd: 15 februari 2025 om 23:10:47 UTC
Laatst bijgewerkt: 12 januari 2026 om 08:42:02 UTC

Dit artikel legt uit hoe u de elementen van een basis-enumeratie in Dynamics AX 2012 kunt doorlopen en er doorheen kunt itereren, inclusief een voorbeeld met X++-code.


Deze pagina is machinaal uit het Engels vertaald om hem voor zoveel mogelijk mensen toegankelijk te maken. Helaas is machinevertaling nog geen geperfectioneerde technologie, dus er kunnen fouten optreden. Als je dat liever hebt, kun je hier de originele Engelse versie bekijken:

How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012

De informatie in dit bericht is gebaseerd op Dynamics AX 2012 R3. Deze informatie is mogelijk niet geldig voor andere versies.

Ik was onlangs bezig met het maken van een formulier dat een waarde moest weergeven voor elk element in een enum. In plaats van de velden handmatig aan te maken (en vervolgens het formulier te moeten onderhouden als de enum ooit wordt gewijzigd), besloot ik het dynamisch te implementeren, zodat de velden automatisch aan het ontwerp worden toegevoegd tijdens de uitvoering.

Ik ontdekte echter al snel dat het doorlopen van de waarden in een enum, hoewel eenvoudig genoeg als je eenmaal weet hoe het moet, toch een beetje verwarrend is.

Je moet uiteraard beginnen met de DictEnum-klasse. Zoals je zult zien, heeft deze klasse verschillende methoden om informatie zoals naam en label te verkrijgen, zowel uit de index als uit de waarde.

Het verschil tussen index en waarde is dat de index het nummer van een element in de enum is, als de elementen van de enum sequentieel genummerd zouden zijn vanaf nul, terwijl de waarde de daadwerkelijke "waarde" van het element is. Omdat de meeste enums waarden hebben die sequentieel genummerd zijn vanaf 0, zullen de index en de waarde van een element vaak hetzelfde zijn, maar zeker niet altijd.

Maar hoe weet je welke waarden een enum heeft? Dat is waar het verwarrend wordt. De klasse DictEnum heeft een methode genaamd values(). Je zou verwachten dat deze methode een lijst met de waarden van de enum retourneert, maar dat zou natuurlijk te makkelijk zijn. Daarom retourneert de methode in plaats daarvan het aantal waarden dat de enum bevat. Het aantal waarden heeft echter niets te maken met de werkelijke waarden, dus je moet dit aantal gebruiken als basis voor het aanroepen van de indexgebaseerde methoden, niet de waardegebaseerde methoden.

Hadden ze deze methode maar indexes() genoemd, dan was het een stuk minder verwarrend geweest ;-)

Houd er ook rekening mee dat enum-waarden (en blijkbaar ook deze "indexen") beginnen bij 0, in tegenstelling tot array- en containerindexen in X++, die beginnen bij 1. Om door de elementen in een enum te itereren, zou je zoiets kunnen doen:

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)));
}

Dit zal het symbool en label van elk element in de enum naar de infolog uitvoeren.

Verder lezen

Als je dit bericht leuk vond, vind je deze suggesties misschien ook interessant:


Delen op BlueskyDelen op FacebookDelen op LinkedInDelen op TumblrDelen op XDelen op LinkedInPin op Pinterest

Mikkel Christensen

Over de auteur

Mikkel Christensen
Mikkel is de bedenker en eigenaar van miklix.com. Hij heeft meer dan 20 jaar ervaring als professioneel computerprogrammeur/softwareontwikkelaar en werkt momenteel fulltime voor een groot Europees IT-bedrijf. Als hij niet blogt, besteedt hij zijn vrije tijd aan een breed scala aan interesses, hobby's en activiteiten, die tot op zekere hoogte weerspiegeld kunnen worden in de verscheidenheid aan onderwerpen op deze website.