Contenido
Personalización de Páginas en Business Central
Introducción a la Personalización
Business Central permite personalizar las páginas de varias formas para adaptarlas a las necesidades específicas de tu organización. En este manual aprenderás las técnicas fundamentales para personalizar páginas usando AL (Application Language).
Nota: Este manual asume conocimientos básicos de programación AL y el entorno de desarrollo de Business Central.
Tipos de Personalización
Existen varios niveles de personalización en Business Central:
- Page Extension: Extender páginas existentes
- Page Customization: Personalización a nivel de perfil
- Nuevas Páginas: Crear páginas completamente nuevas
- Modificación de Controles: Cambiar propiedades de campos y acciones
Page Extensions
Las extensiones de página (Page Extension) te permiten agregar nuevos campos, acciones y modificar el comportamiento de páginas existentes sin alterar el código base.
Creando una Page Extension
Ejemplo básico de una extensión de página para la página Customer Card:
pageextension 50100 "Customer Card Extension" extends "Customer Card"
{
layout
{
addafter("Name")
{
field("Custom Field"; Rec."Custom Field")
{
ApplicationArea = All;
ToolTip = 'Especifica un campo personalizado para el cliente';
}
}
addlast(General)
{
group("Custom Information")
{
Caption = 'Información Personalizada';
field("Marketing Preference"; Rec."Marketing Preference")
{
ApplicationArea = All;
ToolTip = 'Especifica las preferencias de marketing del cliente';
}
}
}
}
actions
{
addlast(Processing)
{
action("Custom Action")
{
Caption = 'Acción Personalizada';
Image = Action;
ApplicationArea = All;
trigger OnAction()
begin
// Lógica de la acción personalizada
Message('Acción personalizada ejecutada para el cliente: %1', Rec.Name);
end;
}
}
}
}
Advertencia: Asegúrate de que los campos personalizados existan en la extensión de tabla correspondiente antes de referenciarlos en la página.
Controles Avanzados
Business Central ofrece varios tipos de controles avanzados que puedes usar para mejorar la experiencia del usuario.
Factboxes Personalizados
Los Factboxes proporcionan información adicional contextual:
pageextension 50101 "Customer Card Factbox Ext" extends "Customer Card"
{
layout
{
addfirst(factboxes)
{
part("Customer Statistics"; "Customer Statistics FactBox")
{
ApplicationArea = All;
SubPageLink = "No." = field("No.");
}
part("Custom Info"; "Custom Customer FactBox")
{
ApplicationArea = All;
SubPageLink = "Customer No." = field("No.");
}
}
}
}
Controles de Lista
Ejemplo de personalización de una página de lista:
pageextension 50102 "Customer List Extension" extends "Customer List"
{
layout
{
addafter("Name")
{
field("Custom Field"; Rec."Custom Field")
{
ApplicationArea = All;
Visible = true;
}
}
modify("Phone No.")
{
Visible = false; // Ocultar campo existente
}
}
actions
{
addlast("F&unctions")
{
action("Bulk Update")
{
Caption = 'Actualización Masiva';
Image = UpdateDescription;
ApplicationArea = All;
trigger OnAction()
var
CustomerRec: Record Customer;
begin
CurrPage.SetSelectionFilter(CustomerRec);
if CustomerRec.FindSet() then
repeat
// Lógica de actualización masiva
until CustomerRec.Next() = 0;
end;
}
}
}
}
Buena Práctica: Usa ApplicationArea para controlar la visibilidad de los campos según la licencia y configuración del usuario.
Personalización por Perfiles
Business Central permite crear personalizaciones específicas para diferentes perfiles de usuario, adaptando la interfaz según el rol del usuario.
Configuración de Perfiles
Los perfiles permiten personalizar la experiencia del usuario:
profile "Custom Sales Profile"
{
Caption = 'Vendedor Personalizado';
RoleCenter = "Custom Sales Role Center";
Enabled = true;
Customizations = "Sales Order Processor Customization";
}
Page Customization
Ejemplo de personalización específica para un perfil:
pagecustomization "Sales Order Customization" customizes "Sales Order"
{
layout
{
modify("Sell-to Customer Name")
{
Visible = true;
Importance = Promoted;
}
modify("External Document No.")
{
Visible = false;
}
moveafter("Sell-to Customer Name"; "Document Date")
}
actions
{
modify("Release")
{
Visible = false;
}
}
}
Nota: Las personalizaciones por perfil no requieren modificar el código AL y pueden aplicarse desde la interfaz de usuario.
Mejores Prácticas
Para mantener la calidad y mantenibilidad de tus personalizaciones, sigue estas mejores prácticas:
Convenciones de Nombres
- Usa prefijos consistentes para tus objetos (ej: 50100-50199 para Customer)
- Nombres descriptivos para campos y acciones
- Documenta el propósito de cada personalización
Rendimiento
- Minimiza el número de campos visibles en las listas
- Usa FlowFields para cálculos complejos
- Implementa filtros apropiados en SubPages
- Considera el impacto en la base de datos
Mantenibilidad
Ejemplo de código bien documentado:
pageextension 50103 "Sales Invoice Ext" extends "Sales Invoice"
{
layout
{
// Grupo para información de envío personalizada
// Requerimiento: Ticket #12345 - Mostrar información de envío
addlast(General)
{
group("Shipping Information")
{
Caption = 'Información de Envío';
field("Shipping Method Code"; Rec."Shipping Method Code")
{
ApplicationArea = All;
ToolTip = 'Especifica el método de envío para esta factura';
trigger OnValidate()
begin
// Actualizar campos relacionados automáticamente
UpdateShippingDetails();
end;
}
}
}
}
local procedure UpdateShippingDetails()
begin
// Lógica para actualizar detalles de envío
// Basado en el método de envío seleccionado
end;
}