Miklix

Com iterar sobre els elements d'una enumeració del codi X++ a Dynamics AX 2012

Publicat: 5 de març del 2025, a les 19:30:34 UTC
Última actualització: 12 de gener del 2026, a les 8:42:31 UTC

Aquest article explica com enumerar i repetir els elements d'una enumeració base al Dynamics AX 2012, incloent-hi un exemple de codi X++.


Aquesta pàgina es va traduir automàticament de l'anglès per tal de fer-la accessible al màxim de persones possible. Malauradament, la traducció automàtica encara no és una tecnologia perfeccionada, de manera que es poden produir errors. Si ho prefereixes, pots veure la versió original en anglès aquí:

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

La informació d'aquesta publicació es basa en el Dynamics AX 2012 R3. Pot ser vàlida o no per a altres versions.

Recentment estava creant un formulari que havia de mostrar un valor per a cada element d'una enumeració. En lloc de crear els camps manualment (i després haver de mantenir el formulari si l'enumeració es modifica), vaig decidir implementar-lo dinàmicament perquè afegeixi automàticament els camps al disseny en temps d'execució.

No obstant això, aviat vaig descobrir que iterar sobre els valors d'una enumeració, tot i que és prou fàcil un cop saps com, és una mica confús.

Evidentment, heu de començar amb la classe DictEnum. Com veureu, aquesta classe té diversos mètodes per obtenir informació com ara el nom i l'etiqueta tant de l'índex com del valor.

La diferència entre index i value és que index és el número d'un element a l'enum, si els elements de l'enum es numeren seqüencialment començant per zero, mentre que value és la propietat "value" real de l'element. Com que la majoria d'enums tenen valors numerats seqüencialment des de 0, l'índex i el valor d'un element sovint seran els mateixos, però certament no sempre.

Però com saps quins valors té una enumeració? Aquí és on es torna confús. La classe DictEnum té un mètode anomenat values(). Potser espereu que aquest mètode retorni una llista dels valors de l'enumeració, però això evidentment seria massa fàcil, així que en comptes d'això retorna el nombre de valors que conté l'enumeració. Tanmateix, el nombre de valors no té res a veure amb els valors reals, per la qual cosa heu d'utilitzar aquest nombre com a base per cridar els mètodes basats en índexs, no els basats en valors.

Si haguessin anomenat aquest mètode indexes(), hauria estat menys confús ;-)

També tingueu en compte que els valors de les enumeracions (i aparentment aquests "índexs") comencen a 0, a diferència dels índexs de matrius i contenidors a X++, que comencen a 1, de manera que per recórrer els elements d'una enumeració podeu fer alguna cosa així:

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

Això mostrarà el símbol i l'etiqueta de cada element de l'enumeració a l'infolog.

Lectures addicionals

Si t'ha agradat aquesta publicació, també et poden agradar aquests suggeriments:


Comparteix a BlueskyComparteix a FacebookComparteix a LinkedInComparteix a TumblrComparteix a XComparteix a LinkedInPin a Pinterest

Mikkel Christensen

Sobre l'autor

Mikkel Christensen
Mikkel és el creador i propietari de miklix.com. Té més de 20 anys d'experiència com a programador/desenvolupador de programari informàtic professional i actualment treballa a temps complet per a una gran corporació informàtica europea. Quan no fa blocs, dedica el seu temps lliure a una gran varietat d'interessos, aficions i activitats, que fins a cert punt es poden reflectir en la varietat de temes tractats en aquest lloc web.