Miklix

Hoe om die elemente van 'n opsomming van X ++ -kode in Dynamics AX 2012 te herhaal

Gepubliseer: 15 Februarie 2025 om 23:11:24 UTC
Laas opgedateer: 12 Januarie 2026 om 08:42:23 UTC

Hierdie artikel verduidelik hoe om die elemente van 'n basis-enum in Dynamics AX 2012 te enumereer en oor te loop, insluitend 'n X++-kodevoorbeeld.


Hierdie bladsy is masjienvertaal uit Engels om dit vir soveel mense moontlik toeganklik te maak. Ongelukkig is masjienvertaling nog nie 'n volmaakte tegnologie nie, dus kan foute voorkom. As jy verkies, kan jy die oorspronklike Engelse weergawe hier sien:

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

Die inligting in hierdie plasing is gebaseer op Dynamics AX 2012 R3. Dit mag dalk geldig wees vir ander weergawes, maar ook nie.

Ek het onlangs 'n vorm geskep wat 'n waarde vir elke element in 'n enum moes vertoon. Eerder as om die velde handmatig te skep (en dan die vorm te onderhou as die enum ooit gewysig word), het ek besluit om dit dinamies te implementeer sodat dit outomaties die velde tydens looptyd by die ontwerp sou voeg.

Ek het egter gou ontdek dat dit eintlik maklik genoeg is om oor die waardes in 'n enum te itereer sodra jy weet hoe, maar dit is 'n bietjie verwarrend.

Jy moet natuurlik met die DictEnum-klas begin. Soos jy sal sien, het hierdie klas verskeie metodes om inligting soos naam en etiket van beide indeks en waarde te verkry.

Die verskil tussen indeks en waarde is dat indeks 'n element se nommer in die enum is, as die enum se elemente opeenvolgend genommer is vanaf nul, terwyl waarde die element se werklike "waarde"-eienskap is. Aangesien die meeste enums waardes het wat opeenvolgend genommer is vanaf 0, sal die indeks en waarde van 'n element dikwels dieselfde wees, maar beslis nie altyd nie.

Maar hoe weet jy watter waardes 'n enum het? Dis waar dit verwarrend raak. Die DictEnum-klas het 'n metode genaamd values(). Jy sou dalk verwag dat hierdie metode 'n lys van die enum se waardes sou teruggee, maar dit sou natuurlik te maklik wees, so in plaas daarvan gee dit die aantal waardes wat die enum bevat terug. Die aantal waardes het egter niks met die werklike waardes te doen nie, so jy moet hierdie getal as basis gebruik om die indeksgebaseerde metodes aan te roep, nie die waardegebaseerde metodes nie.

As hulle hierdie metode net indexes() genoem het, sou dit minder verwarrend gewees het ;-)

Hou ook in gedagte dat enumwaardes (en blykbaar hierdie "indekse") by 0 begin, anders as skikking- en houerindekse in X++, wat by 1 begin, so om oor die elemente in 'n enum te loop, kan jy iets soos hierdie 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 sal die simbool en etiket van elke element in die enum na die infolog uitvoer.

Verdere Leeswerk

As jy hierdie plasing geniet het, sal jy dalk ook van hierdie voorstelle hou:


Deel op BlueskyDeel op FacebookDeel op LinkedInDeel op TumblrDeel op XDeel op LinkedInSpeld op Pinterest

Mikkel Christensen

Oor die skrywer

Mikkel Christensen
Mikkel is die skepper en eienaar van miklix.com. Hy het meer as 20 jaar ondervinding as 'n professionele rekenaarprogrammeerder/sagteware-ontwikkelaar en is tans voltyds in diens van 'n groot Europese IT-korporasie. Wanneer hy nie blog nie, spandeer hy sy vrye tyd aan 'n groot verskeidenheid belangstellings, stokperdjies en aktiwiteite, wat tot 'n mate weerspieël kan word in die verskeidenheid onderwerpe wat op hierdie webwerf gedek word.