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
Última actualización: 12 de enero de 2026, 8:41:55 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++.
How to Iterate Over the Elements of an Enum from X++ Code in Dynamics AX 2012
La información de esta publicación se basa en Dynamics AX 2012 R3. Puede que no sea válida 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 la enumeración se modifica), decidí implementarlo dinámicamente para que añadiera 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 radica en que índice es el número de un elemento en la enumeración, si los elementos de la enumeración se numeraron secuencialmente desde cero, mientras que valor es la propiedad "valor" del elemento. Como la mayoría de las enumeraciones tienen valores numerados secuencialmente desde 0, el índice y el valor de un elemento suelen coincidir, pero no siempre.
Pero ¿cómo saber qué valores tiene una enumeración? Aquí es donde la cosa se complica. La clase DictEnum tiene un método llamado values(). Se podría esperar que este método devuelva una lista de los valores de la enumeración, pero sería demasiado fácil, así que devuelve el número de valores que contiene. Sin embargo, el número de valores no tiene nada que ver con los valores reales, por lo que se debe 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:
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.
Lectura adicional
Si te ha gustado esta publicación, puede que también te gusten estas sugerencias:
- Formato de cadenas con macro y strFmt en Dynamics AX 2012
- Descripción rápida de Dynamics AX 2012 SysOperation Framework
- Convertir un número real en una cadena con todos los decimales en Dynamics AX 2012
