Zum Inhalt

Erstellung personalisierter Anruferkarten-Factboxes

Erstellen der Factbox

Diese Dokumentation erklärt, wie Sie eine benutzerdefinierte Factbox für die Phone Connect Caller Card erstellen und wie Sie diese mit den Caller Cards verknüpfen. Wir beginnen mit der Erstellung einer benutzerdefinierten Factbox, die in diesem Beispiel die Projekte anzeigt, die mit dem jeweiligen Kontakt oder Kunden verknüpft sind.

AL
page 00002 "SIM_CTI Meine Neue Factbox"
{
    ApplicationArea = All;
    Caption = 'Meine Neue Factbox';
    PageType = Cardpart;

    layout
    {
        area(content)
        {
            group(Allgemein)
            {
                Caption = 'Allgemein';
                field("ArtikelNr."; GlobalProjectAmountInteger)
                {
                    Caption = 'Projekte';
                    ToolTip = 'Hier sehen Sie die gefundenen Projekteinträge';

                    // Wird ausgelöst, wenn der Benutzer auf das Feld klickt (Drill-Down-Aktion)
                    trigger OnDrillDown()
                    var
                        LocalJobListPage: Page "Job List";
                    begin
                        // Nur markierte Datensätze in der Jobliste anzeigen
                        GlobalRecordJob.MarkedOnly;

                        // Die Ansicht der Jobliste auf die markierten Datensätze setzen
                        LocalJobListPage.SetTableView(GlobalRecordJob);

                        // Die Jobliste ausführen
                        LocalJobListPage.RunModal();
                        CalcEntries();
                        CurrPage.Update();
                    end;
                }
            }
        }
    }

    // Bestimmt die Beziehung zwischen einem Kontakt oder Kunden und setzt globale Variablen entsprechend
    procedure CheckRelation(ParamCode: Code[20]; ParamEnumSIMCTIBusinessMappingType: Enum "SIM_CTI Business Mapping Type")
    var
        LocalRecordContact: Record Contact;
        LocalRecordContactBusinessRelation: Record "Contact Business Relation";
    begin
        // Geschäftsbeziehungen auf die mit Kunden verknüpften beschränken
        LocalRecordContactBusinessRelation.SetRange("Link to Table", LocalRecordContactBusinessRelation."Link to Table"::Customer);

        // Logik basierend auf dem Mapping-Typ (Kontakt oder Kunde) behandeln
        case ParamEnumSIMCTIBusinessMappingType of
            ParamEnumSIMCTIBusinessMappingType::Contact:
                begin
                    // Den Kontaktdatensatz abrufen
                    LocalRecordContact.Get(ParamCode);

                    // Den globalen Kontaktcode abhängig davon setzen, ob der Kontakt Teil eines Unternehmens ist
                    if LocalRecordContact."Company No." <> '' then
                        GlobalContactCode := LocalRecordContact."Company No."
                    else
                        GlobalContactCode := ParamCode;

                    // Den zugehörigen Kunden für den Kontakt finden
                    LocalRecordContactBusinessRelation.SetRange("Contact No.", GlobalContactCode);
                    if LocalRecordContactBusinessRelation.FindFirst() then
                        GlobalCustomerCode := LocalRecordContactBusinessRelation."No.";
                end;

            ParamEnumSIMCTIBusinessMappingType::Customer:
                begin
                    // Wenn der Mapping-Typ Kunde ist, Kunden setzen und den zugehörigen Kontakt finden
                    GlobalCustomerCode := ParamCode;
                    LocalRecordContactBusinessRelation.SetRange("No.", ParamCode);
                    if LocalRecordContactBusinessRelation.FindFirst() then
                        GlobalContactCode := LocalRecordContactBusinessRelation."Contact No.";
                end;
        end;

        // Nach dem Setzen der globalen Variablen die Projekteinträge berechnen
        CalcEntries();
    end;

    // Berechnet die Anzahl der relevanten Job-/Projekteinträge
    procedure CalcEntries()
    var
        LocalRecordContact: Record Contact; // Lokale Variable zum Durchlaufen der Kontakte
    begin
        GlobalProjectAmountInteger := 0; // Projektzähler zurücksetzen

        if GlobalContactCode <> '' then begin
            // Kontakte basierend auf der gespeicherten Firmennummer filtern
            LocalRecordContact.SetRange("Company No.", GlobalContactCode);

            if LocalRecordContact.FindSet() then
                repeat
                    // Kundenfilter anwenden, falls gesetzt
                    if GlobalCustomerCode <> '' then
                        GlobalRecordJob.SetRange("Sell-to Customer No.", GlobalCustomerCode);

                    // Jobs nach Kontaktnummer filtern
                    GlobalRecordJob.SetRange("Sell-to Contact No.", LocalRecordContact."No.");

                    // Passende Projekteinträge markieren
                    if GlobalRecordJob.FindSet() then begin
                        GlobalRecordJob.Mark();
                        GlobalRecordJob.Reset(); // Filter für die nächste Schleifeniteration zurücksetzen
                    end;
                until LocalRecordContact.Next() = 0;
        end;

        // Filter zurücksetzen und erneut anwenden, um markierte Jobs zu zählen
        GlobalRecordJob.Reset();
        GlobalRecordJob.SetRange("Sell-to Customer No.", GlobalCustomerCode);
        GlobalRecordJob.MarkedOnly;

        // Die markierten Projekteinträge zählen
        GlobalProjectAmountInteger += GlobalRecordJob.Count;

        // Die Seite aktualisieren, um die Feldanzeige zu erneuern
        CurrPage.Update();
    end;

    var
        GlobalRecordJob: Record Job;                 // Enthält die Projekteinträge
        GlobalProjectAmountInteger: Integer;         // Speichert die Anzahl der gefundenen Jobs
        GlobalCustomerCode: Code[20];                // Speichert den Kundencode
        GlobalContactCode: Code[20];                 // Speichert den Kontaktcode
}

Der unten gezeigte Beispielcode demonstriert, wie die Beziehung zwischen dem Kontakt und dem Kunden identifiziert wird und wie die entsprechenden Daten sowohl für den Kontakt als auch für den Kunden anschließend angezeigt werden.

Hinzufügen der Factbox zur Caller Card

Nachdem Sie Ihre Factbox erstellt haben, muss sie mit der gewünschten Phone Connect Caller Card verknüpft werden. Dazu muss eine neue Page Extension der entsprechenden Caller Card erstellt werden.

Im unten gezeigten Beispiel wird die Caller Card "Call In Contact Sales" erweitert. Da es sich um eine Kontakt-Caller-Card handelt, wird der Enum-Wert entsprechend auf Kontakt gesetzt.

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

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

Nachdem Sie Ihre benutzerdefinierte Factbox erstellt und mit der Caller Card verknüpft haben, ist die Einrichtung abgeschlossen. Ihre Factbox ist nun bereit für die nahtlose Nutzung.