Estructuras de Datos
Enums
Dificultad: 2/10El tipo Enum es la evolución moderna del antiguo tipo Option. Su función es la
misma: definir una lista cerrada de opciones para un campo. Sin embargo, aporta ventajas clave frente a
Option:
- Se declara como un objeto independiente (con su propio ID), lo que lo hace reutilizable en varias tablas.
- Es extensible: otras extensiones pueden añadirle valores sin modificar el original.
- Permite asignar posiciones explícitas a cada valor, por lo que puedes dejar huecos para crecer sin romper el orden.
Enum vs Option
| Característica | Option | Enum |
|---|---|---|
| Es un objeto independiente | ❌ | ✅ |
| Reutilizable en varias tablas | ❌ | ✅ |
| Extensible desde otras apps | ❌ | ✅ |
| Posiciones explícitas | ❌ | ✅ |
Estructura base
AL
enum <id> "<nombre_enum>"
{
value(<posicion>; "<valor>") { }
value(<posicion>; "<valor>") { }
value(<posicion>; "<valor>") { }
}
Para usarlo en un campo de tabla:
AL
field(<id>; "<NombreCampo>"; Enum "<nombre_enum>") { }
Ejemplo: Categorías de libros
AL
enum 50100 "Categoria Libro"
{
value(0; " ") { }
value(1; "Novela") { }
value(2; "Ensayo") { }
value(3; "Infantil") { }
value(4; "Tecnico") { }
}
Aplicado a un campo en una tabla:
AL
table 50100 "Libro"
{
fields
{
field(1; "No."; Code[20]) { }
field(2; "Titulo"; Text[100]) { }
field(3; "Categoria"; Enum "Categoria Libro") { }
}
keys
{
key(PK; "No.") { }
}
}
Referenciar un valor en código AL
AL
if Rec.Categoria = Rec.Categoria::Infantil then
Message('Este libro es para el público infantil.');
💡 Tips
- Deja siempre un valor
0con texto vacío" "como estado "sin seleccionar". - Usa huecos entre posiciones (0, 10, 20...) si prevés que el enum crecerá.
- El nombre del enum va entre comillas si contiene espacios:
Enum "Categoria Libro".