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
Hierdie artikel verduidelik hoe om die elemente van 'n basisopsomming in Dynamics AX 2012 op te noem en oor te loop, insluitend 'n X ++ -kodevoorbeeld.
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
Die inligting in hierdie pos is gebaseer op Dynamics AX 2012 R3. Dit mag al dan nie geldig wees vir ander weergawes nie.
Ek het onlangs 'n vorm geskep wat 'n waarde vir elke element in 'n opsomming moes vertoon. In plaas daarvan om die velde handmatig te skep (en dan die vorm in stand te hou as die opsomming ooit gewysig word), het ek besluit om dit dinamies te implementeer sodat dit die velde outomaties by die ontwerp sou voeg.
Ek het egter gou ontdek dat dit 'n bietjie verwarrend is om die waardes in 'n opsomming te herhaal, hoewel dit maklik genoeg is as u eers weet hoe.
Jy moet natuurlik met die DictEnum-klas begin. Soos u sal sien, het hierdie klas verskeie metodes om inligting soos naam en etiket van beide indeks en waarde te bekom.
Die verskil tussen indeks en waarde is dat indeks 'n element se nommer in die opsomming is, as die opsomming se elemente opeenvolgend vanaf nul genommer is, terwyl waarde die element se werklike "waarde" -eienskap is. Aangesien die meeste enums waardes het wat opeenvolgend vanaf 0 genommer is, sal die indeks en waarde van 'n element dikwels dieselfde wees, maar beslis nie altyd nie.
Maar hoe weet jy watter waardes 'n opsomming het? Dit is waar dit verwarrend raak. Die DictEnum-klas het 'n metode genaamd waardes (). U kan verwag dat hierdie metode 'n lys van die waardes van die opsomming sal teruggee, maar dit sal natuurlik te maklik wees, dus gee dit eerder die aantal waardes terug wat die opsomming bevat. Die aantal waardes het egter niks met die werklike waardes te doen nie, dus moet u hierdie getal as basis gebruik om die indeksgebaseerde metodes te noem, nie die waardegebaseerde metodes nie.
As hulle maar net hierdie metode indekse () genoem het, sou dit minder verwarrend gewees het ;-)
Hou ook in gedagte dat opsommingwaardes (en blykbaar hierdie "indekse") by 0 begin, anders as skikkings- en houerindekse in X ++, wat by 1 begin, so om die elemente in 'n opsomming oor te loop, kan jy so iets doen:
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 opsomming na die infolog uitvoer.