3/4 Los valores del enumerado

Hemos aprendido a crear enumerados, hemos visto su diseño y sabemos que significa su valor en Ax.

¿Pero que sucede en el SQL?

Primero volvamos con nuestro enumerado TransStatus que tiene los siguientes valores:

0: OnOrder (En pedido)
1: Send       (Enviado)

En nuestra tabla tenemos los siguientes registros.


Y aquí podemos ver como se muestran los valores en el SQL.


Como os dije, en el SQL se guarda el valor entero del enumerado y es Ax el encargado de interpretar el valor del enumerado para mostrar el literal al usuario.

Creo que cada vez está más claro, ¿No?

Importante:

¿Os acordáis cuando os comentaba de los peligros de cambiar los valores de un enumerado cuando ya existen registros en Ax? Veremos que pasa realmente.

Imaginad que nos hemos equivocado y necesitábamos que nuestro valor por defecto sea Ninguno.

Ahora nuestro enumerado tiene los siguientes valores:

0: None
1: OnOrder
2: Send



Si ahora nos vamos a nuestra tabla en Ax veremos que el valor 0 nos muestra el valor Ninguno.


Recordad que lo que se guarda en el SQL es el valor de enumerado no el literal. Por eso aunque en el SQL no ha cambiado nada si que ha cambiado en Ax.

Si volvemos al SQL veremos que no ha cambiado nada.


Esto significa que al cambiar el valor en el enumerado el usuario ya no verá en los formularios el texto OnOrder sino el valor ninguno, lo cual podrá provocará errores.

Mi recomendación es que si tenéis que agregar un nuevo valor a un enumerado del estándar es que no le asignéis el siguiente valor. Por ejemplo si tuviera que crear otro elemento para este enumerado yo lo crearía con el valor 5 o superior, para evitar posibles problemas con los datos al migrar de versión.



Como asignar un valor al enumerado.

En las siguientes imágenes se puede ver un job en el que se asigna un valor al enumerado.
Como veis se le puede asignar un valor utilizando el enumerado o con un entero, pero no utilicéis un entero, ya que si algún día se cambian los valores en el enumerado podrá llegar a suceder que OnOrder no será el valor 2 y estaríamos provocando un error.




Precaución con los enumerados en los if.

Fijaos en la siguiente imagen.

Le he asignado a la variable TransStatus el valor 0 , la cual tiene un literal OnOnder, por lo que se podría entender que tiene valor pero en el if Ax entiende que no lo tiene.


Así que cuidado y recordad que aunque en el enumerado el valor 0 tengo un valor útil (un texto) Ax no lo entenderá así y para él no tendrá valor.

Comentarios