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++.
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í:
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:
- Converteix un real a cadena amb tots els decimals al Dynamics AX 2012
- Ús del marc SysExtension per esbrinar quina subclasse s'ha d'instanciar al Dynamics AX 2012
- Format de cadena amb macro i strFmt al Dynamics AX 2012
