EJERCICIO 02 · ENUMS
Enum en una Page
Dificultad: 3/10Ejercicio anterior
¿Qué construiste en el Ejercicio 01?
- El Enum
"Rental Status"(ID 50100) con valores 0 → 40, extensible. - Una
enumextensionque añadía el valor50: "Vendido". - La tabla
"Maquinaria"(ID 50100) con los campos"No.","Descripcion"y"Estado". - Un bloque
ifque comprobaba el estado del registro conRec.Estado::Alquilado.
Ejercicio 01
Page · List
Crea la página de lista de Maquinaria
Objetivo: Exponer la tabla
"Maquinaria" al usuario final creando una
Page de tipo List que muestre sus tres campos, incluido el Enum
"Estado".
Instrucciones
- Crea un archivo
MaquinariaList.Page.al. - La página debe tener el ID
50100, nombre"Maquinaria List"yPageType = List. - Enlázala a la tabla
"Maquinaria"mediante la propiedadSourceTable. - Dentro del área
contentañade unrepeatercon los tres campos:"No.","Descripcion"y"Estado". - El campo
"Estado"debe mostrarse como unfieldnormal; Business Central renderizará el Enum como un desplegable automáticamente.
Pista de Código
AL — MaquinariaList.Page.al
page 50100 "Maquinaria List"
{
PageType = List;
SourceTable = "Maquinaria";
UsageCategory = Lists;
ApplicationArea = All;
layout
{
area(content)
{
repeater(General)
{
field("No."; Rec."No.") { ApplicationArea = All; }
field("Descripcion"; Rec."Descripcion") { ApplicationArea = All; }
field("Estado"; Rec."Estado") { ApplicationArea = All; }
}
}
}
}
Ejercicio 02
Page · Card
Crea la ficha de Maquinaria
Objetivo: Crear una página de tipo
Card para ver y editar el detalle
de cada máquina, añadiendo un trigger OnValidate sobre el campo "Estado"
que muestre un aviso cuando la máquina pase a estado Retirado.
Instrucciones
- Crea
MaquinariaCard.Page.alcon ID50101yPageType = Card. - Usa la misma
SourceTable = "Maquinaria". - En el
layout, crea unagroup(General)con los tres campos. - En el campo
"Estado", añade un triggerOnValidateque compruebeRec.Estado = Rec.Estado::Retiradoy muestre el mensaje: 'Atención: esta máquina ha sido retirada del parque.' - Conecta la ficha desde la lista añadiendo la propiedad
DrillDownPageIden la tabla"Maquinaria"con el valor"Maquinaria Card".
Pista de Código
AL — MaquinariaCard.Page.al
page 50101 "Maquinaria Card"
{
PageType = Card;
SourceTable = "Maquinaria";
UsageCategory = None;
layout
{
area(content)
{
group(General)
{
field("No."; Rec."No.") { ApplicationArea = All; }
field("Descripcion"; Rec."Descripcion") { ApplicationArea = All; }
field("Estado"; Rec."Estado")
{
ApplicationArea = All;
trigger OnValidate()
begin
if Rec.Estado = Rec.Estado::Retirado then
Message('Atención: esta máquina ha sido retirada del parque.');
end;
}
}
}
}
}
⚠️ Ojo: El trigger
OnValidate se ejecuta al confirmar el cambio de
valor en el campo, no al abrir la ficha. Si necesitas validar al cargar el registro, usa
OnAfterGetRecord en la page.
Ejercicio 03
Filtros con Enum
Filtra la lista por Estado
Objetivo: Añadir una acción en la página
"Maquinaria List" que aplique
un filtro sobre el campo "Estado" para mostrar únicamente las máquinas
Disponibles.
Instrucciones
- Abre
MaquinariaList.Page.aly añade una secciónactions. - Dentro de un
area(processing)crea unaactionllamadaSoloDisponiblescon caption 'Ver solo Disponibles'. - En el trigger
OnActionusaRec.SetRangepara filtrar el campo"Estado"al valor"Rental Status"::Disponible. - Llama a
CurrPage.Update(false)al final para refrescar la vista.
Pista de Código
AL — fragmento dentro de MaquinariaList.Page.al
actions
{
area(processing)
{
action(SoloDisponibles)
{
ApplicationArea = All;
Caption = 'Ver solo Disponibles';
Image = Filter;
trigger OnAction()
begin
Rec.SetRange(Estado, "Rental Status"::Disponible);
CurrPage.Update(false);
end;
}
}
}
💡 Recuerda: Para quitar el filtro y volver a ver todos los registros puedes usar
Rec.SetRange(Estado) sin segundo argumento, o añadir una segunda acción
LimpiarFiltro que llame a Rec.Reset().