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

  1. Minimiza el número de campos visibles en las listas
  2. Usa FlowFields para cálculos complejos
  3. Implementa filtros apropiados en SubPages
  4. 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;
}

Autor: Adrián Espí Peña

Última actualización: