Saltar al contenido

Creación de factboxes personalizados para la tarjeta del llamante

Creación de la Factbox

Esta documentación explica cómo crear una Factbox personalizada para la Phone Connect Caller Card y cómo vincularla a las Caller Cards. Comenzaremos creando una Factbox personalizada que, en este ejemplo, muestra los proyectos asociados con el respectivo Contacto o Cliente.

AL
page 00002 "SIM_CTI Mi Nueva Factbox"
{
    ApplicationArea = All;
    Caption = 'Mi Nueva Factbox';
    PageType = Cardpart;

    layout
    {
        area(content)
        {
            group(General)
            {
                Caption = 'General';
                field("ItemNo."; GlobalProjectAmountInteger)
                {
                    Caption = 'Proyectos';
                    ToolTip = 'Aquí puedes ver las entradas de Proyectos encontradas';

                    // Se activa cuando el usuario hace clic en el campo (acción de drill-down)
                    trigger OnDrillDown()
                    var
                        LocalJobListPage: Page "Job List";
                    begin
                        // Mostrar solo los registros marcados en la lista de trabajos
                        GlobalRecordJob.MarkedOnly;

                        // Establecer la vista de la página de la lista de trabajos a los registros marcados
                        LocalJobListPage.SetTableView(GlobalRecordJob);

                        // Ejecutar la página de la lista de trabajos
                        LocalJobListPage.RunModal();
                        CalcEntries();
                        CurrPage.Update();
                    end;
                }
            }
        }
    }

    // Determina la relación entre un contacto o cliente y establece las variables globales correspondientes
    procedure CheckRelation(ParamCode: Code[20]; ParamEnumSIMCTIBusinessMappingType: Enum "SIM_CTI Business Mapping Type")
    var
        LocalRecordContact: Record Contact;
        LocalRecordContactBusinessRelation: Record "Contact Business Relation";
    begin
        // Restringir las relaciones comerciales a aquellas vinculadas a clientes
        LocalRecordContactBusinessRelation.SetRange("Link to Table", LocalRecordContactBusinessRelation."Link to Table"::Customer);

        // Manejar la lógica según el tipo de mapeo (Contacto o Cliente)
        case ParamEnumSIMCTIBusinessMappingType of
            ParamEnumSIMCTIBusinessMappingType::Contact:
                begin
                    // Obtener el registro del contacto
                    LocalRecordContact.Get(ParamCode);

                    // Establecer el código de contacto global dependiendo de si el contacto es parte de una empresa
                    if LocalRecordContact."Company No." <> '' then
                        GlobalContactCode := LocalRecordContact."Company No."
                    else
                        GlobalContactCode := ParamCode;

                    // Encontrar el cliente relacionado con el contacto
                    LocalRecordContactBusinessRelation.SetRange("Contact No.", GlobalContactCode);
                    if LocalRecordContactBusinessRelation.FindFirst() then
                        GlobalCustomerCode := LocalRecordContactBusinessRelation."No.";
                end;

            ParamEnumSIMCTIBusinessMappingType::Customer:
                begin
                    // Si el tipo de mapeo es cliente, establecer el cliente y encontrar el contacto relacionado
                    GlobalCustomerCode := ParamCode;
                    LocalRecordContactBusinessRelation.SetRange("No.", ParamCode);
                    if LocalRecordContactBusinessRelation.FindFirst() then
                        GlobalContactCode := LocalRecordContactBusinessRelation."Contact No.";
                end;
        end;

        // Después de establecer las variables globales, calcular las entradas de trabajo
        CalcEntries();
    end;

    // Calcula el número de entradas de trabajo/proyectos relevantes
    procedure CalcEntries()
    var
        LocalRecordContact: Record Contact; // Variable local para recorrer los contactos
    begin
        GlobalProjectAmountInteger := 0; // Reiniciar el contador de proyectos

        if GlobalContactCode <> '' then begin
            // Filtrar contactos según el número de empresa almacenado
            LocalRecordContact.SetRange("Company No.", GlobalContactCode);

            if LocalRecordContact.FindSet() then
                repeat
                    // Aplicar filtro de cliente si está establecido
                    if GlobalCustomerCode <> '' then
                        GlobalRecordJob.SetRange("Sell-to Customer No.", GlobalCustomerCode);

                    // Filtrar trabajos por número de contacto
                    GlobalRecordJob.SetRange("Sell-to Contact No.", LocalRecordContact."No.");

                    // Marcar las entradas de trabajo coincidentes
                    if GlobalRecordJob.FindSet() then begin
                        GlobalRecordJob.Mark();
                        GlobalRecordJob.Reset(); // Reiniciar filtros para la siguiente iteración del bucle
                    end;
                until LocalRecordContact.Next() = 0;
        end;

        // Reiniciar y reaplicar filtro para contar los trabajos marcados
        GlobalRecordJob.Reset();
        GlobalRecordJob.SetRange("Sell-to Customer No.", GlobalCustomerCode);
        GlobalRecordJob.MarkedOnly;

        // Contar las entradas de trabajo marcadas
        GlobalProjectAmountInteger += GlobalRecordJob.Count;

        // Actualizar la página para refrescar la visualización del campo
        CurrPage.Update();
    end;

    var
        GlobalRecordJob: Record Job;                 // Contiene las entradas de trabajo
        GlobalProjectAmountInteger: Integer;         // Almacena el conteo de trabajos encontrados
        GlobalCustomerCode: Code[20];                // Almacena el código del cliente
        GlobalContactCode: Code[20];                 // Almacena el código del contacto
}

El código de ejemplo que se muestra a continuación demuestra cómo se identifica la relación entre el Contacto y el Cliente, y cómo se muestran los datos correspondientes tanto para el contacto como para el cliente.

Añadir la Factbox a la Caller Card

Una vez que hayas creado tu Factbox, debe vincularse a la Phone Connect Caller Card deseada. Para hacerlo, se debe crear una nueva Page Extension de la Caller Card correspondiente. En el ejemplo que se muestra a continuación, se extiende la Caller Card "Call In Contact Sales". Dado que se trata de una Caller Card de Contacto, el valor del enum se establece en Contacto соответственно.

AL
pageextension 00001 "SIM_CTIDocu CTI" extends "SIM_CTI Call In Cont. - Sales"
{
    layout
    {
        addafter(SIM_CTISalesFB)
        {
            part(NewFactbox; "SIM_CTI Meine Neue Faktbox")
            {
                ApplicationArea = all;
            }
        }
    }

    trigger OnAfterGetCurrRecord()
    var
        LocalEnumSIMCTIBusinessMappingType: Enum "SIM_CTI Business Mapping Type";
    begin
        CurrPage.NewFactbox.Page.CheckRelation(Rec."No.", LocalEnumSIMCTIBusinessMappingType::Contact);
    end;
}

Después de haber creado tu Factbox personalizada y vinculada a la Caller Card, la configuración está completa. Tu Factbox ahora está lista para un uso fluido.