Aller au contenu

Création de boîtes d'information personnalisées sur la carte d'appelant

Création de la Factbox

Cette documentation explique comment créer une Factbox personnalisée pour la Phone Connect Caller Card et comment la lier aux Caller Cards. Nous commencerons par créer une Factbox personnalisée qui, dans cet exemple, affiche les projets associés au Contact ou au Client respectif.

AL
page 00002 "SIM_CTI Ma Nouvelle Factbox"
{
    ApplicationArea = All;
    Caption = 'Ma Nouvelle Factbox';
    PageType = Cardpart;

    layout
    {
        area(content)
        {
            group(Général)
            {
                Caption = 'Général';
                field("NumArticle"; GlobalProjectAmountInteger)
                {
                    Caption = 'Projets';
                    ToolTip = 'Ici, vous pouvez voir les entrées de projets trouvées';

                    // Déclenché lorsque l'utilisateur clique sur le champ (action de drill-down)
                    trigger OnDrillDown()
                    var
                        LocalJobListPage: Page "Job List";
                    begin
                        // Afficher uniquement les enregistrements marqués dans la liste des tâches
                        GlobalRecordJob.MarkedOnly;

                        // Définir la vue de la page de la liste des tâches sur les enregistrements marqués
                        LocalJobListPage.SetTableView(GlobalRecordJob);

                        // Exécuter la page de la liste des tâches
                        LocalJobListPage.RunModal();
                        CalcEntries();
                        CurrPage.Update();
                    end;
                }
            }
        }
    }

    // Détermine la relation entre un contact ou un client et définit les variables globales en conséquence
    procedure CheckRelation(ParamCode: Code[20]; ParamEnumSIMCTIBusinessMappingType: Enum "SIM_CTI Business Mapping Type")
    var
        LocalRecordContact: Record Contact;
        LocalRecordContactBusinessRelation: Record "Contact Business Relation";
    begin
        // Restreindre les relations commerciales à celles liées aux clients
        LocalRecordContactBusinessRelation.SetRange("Link to Table", LocalRecordContactBusinessRelation."Link to Table"::Customer);

        // Gérer la logique en fonction du type de mappage (Contact ou Client)
        case ParamEnumSIMCTIBusinessMappingType of
            ParamEnumSIMCTIBusinessMappingType::Contact:
                begin
                    // Obtenir l'enregistrement du contact
                    LocalRecordContact.Get(ParamCode);

                    // Définir le code de contact global selon que le contact fait partie d'une entreprise
                    if LocalRecordContact."Company No." <> '' then
                        GlobalContactCode := LocalRecordContact."Company No."
                    else
                        GlobalContactCode := ParamCode;

                    // Trouver le client lié au contact
                    LocalRecordContactBusinessRelation.SetRange("Contact No.", GlobalContactCode);
                    if LocalRecordContactBusinessRelation.FindFirst() then
                        GlobalCustomerCode := LocalRecordContactBusinessRelation."No.";
                end;

            ParamEnumSIMCTIBusinessMappingType::Customer:
                begin
                    // Si le type de mappage est client, définir le client et trouver le contact lié
                    GlobalCustomerCode := ParamCode;
                    LocalRecordContactBusinessRelation.SetRange("No.", ParamCode);
                    if LocalRecordContactBusinessRelation.FindFirst() then
                        GlobalContactCode := LocalRecordContactBusinessRelation."Contact No.";
                end;
        end;

        // Après avoir défini les variables globales, calculer les entrées de tâches
        CalcEntries();
    end;

    // Calcule le nombre d'entrées de tâches/projets pertinentes
    procedure CalcEntries()
    var
        LocalRecordContact: Record Contact; // Variable locale pour parcourir les contacts
    begin
        GlobalProjectAmountInteger := 0; // Réinitialiser le compteur de projets

        if GlobalContactCode <> '' then begin
            // Filtrer les contacts en fonction du numéro d'entreprise stocké
            LocalRecordContact.SetRange("Company No.", GlobalContactCode);

            if LocalRecordContact.FindSet() then
                repeat
                    // Appliquer le filtre client si défini
                    if GlobalCustomerCode <> '' then
                        GlobalRecordJob.SetRange("Sell-to Customer No.", GlobalCustomerCode);

                    // Filtrer les tâches par numéro de contact
                    GlobalRecordJob.SetRange("Sell-to Contact No.", LocalRecordContact."No.");

                    // Marquer les entrées de tâches correspondantes
                    if GlobalRecordJob.FindSet() then begin
                        GlobalRecordJob.Mark();
                        GlobalRecordJob.Reset(); // Réinitialiser les filtres pour la prochaine itération de la boucle
                    end;
                until LocalRecordContact.Next() = 0;
        end;

        // Réinitialiser et réappliquer le filtre pour compter les tâches marquées
        GlobalRecordJob.Reset();
        GlobalRecordJob.SetRange("Sell-to Customer No.", GlobalCustomerCode);
        GlobalRecordJob.MarkedOnly;

        // Compter les entrées de tâches marquées
        GlobalProjectAmountInteger += GlobalRecordJob.Count;

        // Actualiser la page pour mettre à jour l'affichage du champ
        CurrPage.Update();
    end;

    var
        GlobalRecordJob: Record Job;                 // Contient les entrées de tâches
        GlobalProjectAmountInteger: Integer;         // Stocke le nombre de tâches trouvées
        GlobalCustomerCode: Code[20];                // Stocke le code du client
        GlobalContactCode: Code[20];                 // Stocke le code du contact
}

Le code d'exemple ci-dessous montre comment la relation entre le Contact et le Client est identifiée, et comment les données correspondantes pour le contact et le client sont ensuite affichées.

Ajouter la Factbox à la Caller Card

Une fois que vous avez créé votre Factbox, elle doit être liée à la Phone Connect Caller Card souhaitée. Pour ce faire, une nouvelle Page Extension de la Caller Card correspondante doit être créée. Dans l'exemple ci-dessous, la Caller Card "Call In Contact Sales" est étendue. Comme il s'agit d'une Caller Card de Contact, la valeur de l'enum est définie sur Contact en conséquence.

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;
}

Après avoir créé votre Factbox personnalisée et l'avoir liée à la Caller Card, la configuration est terminée. Votre Factbox est maintenant prête pour une utilisation fluide.