En este manual, aprenderemos a crear una «Pila de Trabajo» y añadir un menú en Dynamics 365 Business Central. Una «Pila de Trabajo» es un conjunto de elementos que se deben gestionar, típicamente se usa para mostrar información relevante o tareas pendientes en el entorno de un usuario. Un menú en Business Central es una forma organizada de presentar diferentes páginas y acciones a los usuarios para que puedan acceder a las funcionalidades necesarias de manera rápida y eficiente.

1. Crear Tabla y Página para Facturas de Venta Sin Registrar

Primero, definiremos una tabla y una página que representarán las facturas de venta sin registrar.

Definir la Tabla

Crea un nuevo archivo .al y define la tabla PruebaPilayMenu_Cue con el siguiente código:

table 50103 "PruebaPilayMenu_Cue"
{
    Caption = 'PruebaPilayMenu_Cue';
    DataClassification = ToBeClassified;

    fields
    {
        field(1; "PrimaryKey"; Code[20])
        {
            Caption = 'PrimaryKey';
        }
        field(2; "PendingSalesInvoices"; Integer)
        {
            Caption = 'PendingSalesInvoices';
            FieldClass = FlowField;

            CalcFormula = Count("Sales Header" where("Document Type" = Filter(Order), "Posting Date" = Filter('')));
        }
    }
    keys
    {
        key(PK; "PrimaryKey")
        {
            Clustered = true;
        }
    }
    procedure InsertIfNotExists()
    begin
        Rec.Reset();
        if not Rec.Get() then begin
            Rec.Init();
            Rec.Insert();
        end;
    end;
}

Definir la Página

Crea otro archivo .al para la página PruebaPilayMenu_Cue con el siguiente código:

page 50109 "PruebaPilayMenu_Cue"
{
    ApplicationArea = All;
    CaptionML = ENU = 'Pending Sales Invoices', ESP = 'Facturas de Venta Pendientes';
    PageType = CardPart;
    SourceTable = "PruebaPilayMenu_Cue";
    RefreshOnActivate = TRUE;

    layout
    {
        area(content)
        {
            cuegroup(General)
            {
                CaptionML = ENU = 'Pending Sales Invoices Inbox', ESP = 'Buzón de Facturas de Venta Pendientes';
                field(PendingSalesInvoices; Rec.PendingSalesInvoices)
                {
                    CaptionML = ESP = 'Facturas de Venta Pendientes', ENU = 'Pending Sales Invoices';
                    StyleExpr = Style;
                    Image = Checklist;
                    trigger OnDrillDown()
                    var
                        "Sales Header": Record "Sales Header";
                        "Page SalesOrderListPending": Page "Sales Order List";
                    begin
                        "Sales Header".SetRange("Document Type", "Sales Header"."Document Type"::Order);
                        "Page SalesOrderListPending".SetTableView("Sales Header");
                        "Page SalesOrderListPending".Run();
                    end;
                }
            }
        }
    }
    actions
    {
        area(Processing)
        {
            action("Set Up Cues")
            {
                ApplicationArea = All;
                Image = Setup;
                trigger OnAction()
                var
                    CuesAndKpis: Codeunit "Cues And KPIs";
                    CueRecordRef: RecordRef;
                begin
                    CueRecordRef.GetTable(Rec);
                    CuesAndKpis.OpenCustomizePageForCurrentUser(CueRecordRef.Number);
                end;
            }
        }
    }

    trigger OnOpenPage()
    begin
        Rec.InsertIfNotExists();
    end;

    trigger OnAfterGetCurrRecord()
    var
        PendingSalesInvoicesInbox: Record "Sales Header";
    begin
        PendingSalesInvoicesInbox.SetRange("Document Type", PendingSalesInvoicesInbox."Document Type"::Order);
        BlockedCustomersVar := PendingSalesInvoicesInbox.Count();

        if BlockedCustomersVar > 0 then
            Style := 'Unfavorable';
        else
            Style := 'Unfavorable';
            BlockedCustomersVar := 0;
    end;

    var
        BlockedCustomersVar: Integer;
        Style: Text;
}

2. Añadir la Página a la Pila de Trabajo en el Centro de Roles

Ahora, extendemos la página del centro de roles para incluir nuestra nueva página PruebaPilayMenu_Cue.

Extender la Página del Centro de Roles

Crea un archivo .al para la extensión de la página del centro de roles con el siguiente código:

pageextension 50101 "Prueba Pila y Menu" extends "Account Receivables" // "Business Manager Role Center"
{
    layout
    {
        addfirst(rolecenter)
        {
            part(PruebaPilayMenuCue; "PruebaPilayMenu_Cue")
            {
                ApplicationArea = Basic, Suite;
            }
        }
    }
    actions
    {
        addlast(Sections)
        {
            group("Ventas")
            {
                action("Pedidos de Venta")
                {
                    RunObject = page "Sales Order List";
                    ApplicationArea = All;
                }
                action("Facturas de Venta")
                {
                    RunObject = page "Posted Sales Invoices";
                    ApplicationArea = All;
                }
                action("Clientes")
                {
                    RunObject = page "Customer List";
                    ApplicationArea = All;
                }
                group("Configuración")
                {
                    action("Métodos de Pago")
                    {
                        RunObject = page "Payment Methods";
                        ApplicationArea = All;
                    }
                    action("Condiciones de Pago")
                    {
                        RunObject = page "Payment Terms";
                        ApplicationArea = All;
                    }
                }
            }
        }
    }
}