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.