Miklix

Cómo iterar sobre los elementos de una enumeración desde el código X++ en Dynamics AX 2012

Publicado: 15 de febrero de 2025, 23:10:09 UTC

Este artículo explica cómo enumerar y recorrer los elementos de una enumeración base en Dynamics AX 2012, incluido un ejemplo de código X++.


Esta página ha sido traducida automáticamente del inglés para hacerla accesible al mayor número de personas posible. Lamentablemente, la traducción automática no es todavía una tecnología perfeccionada, por lo que pueden producirse errores. Si lo prefiere, puede consultar la versión original en inglés aquí:

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

La información de este artículo se basa en Dynamics AX 2012 R3. Puede que sea válida o no para otras versiones.

Recientemente, creé un formulario que debía mostrar un valor para cada elemento de una enumeración. En lugar de crear manualmente los campos (y luego tener que mantener el formulario si alguna vez se modifica la enumeración), decidí implementarlo de forma dinámica para que agregara automáticamente los campos al diseño en tiempo de ejecución.

Sin embargo, pronto descubrí que iterar sobre los valores de una enumeración, si bien es bastante fácil una vez que sabes cómo, es un poco confuso.

Obviamente, debes comenzar con la clase DictEnum. Como verás, esta clase tiene varios métodos para obtener información, como el nombre y la etiqueta, tanto del índice como del valor.

La diferencia entre índice y valor es que índice es el número de un elemento en la enumeración, si los elementos de la enumeración se numeraron secuencialmente comenzando desde cero, mientras que valor es la propiedad "valor" real del elemento. Como la mayoría de las enumeraciones tienen valores numerados secuencialmente desde 0, el índice y el valor de un elemento a menudo serán los mismos, pero ciertamente no siempre .

Pero, ¿cómo sabes qué valores tiene una enumeración? Aquí es donde se vuelve confuso. La clase DictEnum tiene un método llamado values(). Podrías esperar que este método devuelva una lista de los valores de la enumeración, pero eso sería obviamente demasiado fácil, por lo que en su lugar devuelve el número de valores que contiene la enumeración. Sin embargo, el número de valores no tiene nada que ver con los valores reales, por lo que debes usar este número como base para llamar a los métodos basados en índices, no a los basados en valores.

Si hubieran llamado a este método indexes(), habría sido menos confuso ;-)

También tenga en cuenta que los valores de enumeración (y aparentemente estos "índices") comienzan en 0, a diferencia de los índices de matriz y contenedor en X++, que comienzan en 1, por lo que para recorrer los elementos de una enumeración podría hacer algo como esto:

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

Esto mostrará el símbolo y la etiqueta de cada elemento de la enumeración en el registro de información.

Compartir en BlueskyCompartir en FacebookCompartir en LinkedInCompartir en TumblrCompartir en XCompartir en LinkedInPin en Pinterest

Mikkel Bang Christensen

Sobre el autor

Mikkel Bang Christensen
Mikkel es el creador y propietario de miklix.com. Tiene más de 20 años de experiencia como programador informático profesional y desarrollador de software, y actualmente trabaja a tiempo completo para una gran empresa europea de TI. Cuando no está escribiendo en su blog, dedica su tiempo libre a una gran variedad de intereses, aficiones y actividades, que en cierta medida pueden verse reflejados en la variedad de temas tratados en este sitio web.