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.
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:
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:
- Het SysExtension Framework gebruiken om erachter te komen welke subklasse u moet instantiëren in Dynamics AX 2012
- Documentklasse en query identificeren voor AIF-service in Dynamics AX 2012
- Een rechtspersoon (bedrijfsrekeningen) verwijderen in Dynamics AX 2012
