Kaart

  • 4 minutes to read

Codeunits

CFL Maps Management

procedure PushPin

procedure PushPin(No: code[20]; Name: text[50]; InfoboxText: text[100]; Latitude: decimal; Longitude: Decimal; PinText: text; Color: Text; var JArray: JsonArray; Rec: variant)

Hiermee wordt de opgegeven informatie toegevoegd aan de JsonArray. Deze array kan dan gebruikt worden om op de page "CFL Maps" pins te creëren.

procedure PushPinCompany

procedure PushPinCompany() JArray: JsonArray

Creërt een JsonArry met daarin de pininformatie van de bedrijfsgegevens.

procedure CFLGetLocation

procedure CFLGetLocation(CountryCode: code[10]; PostCode: code[20]; City: text[30]; Address: text[100]; var latitude: Decimal; var longitude: Decimal; var geocodestatus: code[20])

Zoek de latitude en longitude op van het opgegeven adres. indien het adres is gevonden dan is de geocodestatus = 'OK'

Controladdins

CFLMapsControl

Kaart addin.

Pages

CFL Maps Factbox

Part voor het weergeven van een kaart. (Implementatie van de CFLMaps control addin).

procedure CFLSetPushPin

procedure CFLSetPushPin(No: code[20]; Name: text[50]; InfoboxText: text[100]; Latitude: decimal; Longitude: Decimal; PinText: text; Color: Text; var JArray: JsonArray; Rec: variant)

Functie voor het plaatsen van een pin op de kaart.
De pin wordt toegevoegd aan de JArray die meerdere pins kan bevatten.
De kaart geeft alle pins in de JArray weer.

procedure CFLSetPushPins

procedure CFLSetPushPins(var JArray: JsonArray)

Functie voor het plaatsen van meerdere pins op de kaart. Alle pins in de JArray worden weergegeven op de kaart.

procedure CFLRemovePushPins

procedure CFLRemovePushPins()

Functie voor het verwijderen van de pushpins van de kaart. Alle pins worden verwijderd op de kaart.

CFL Maps

Pagina voor het weergeven van een kaart. (Implementatie van de CFL Maps control addin).

procedure CFLSetPushPin

procedure CFLSetPushPin(No: code[20]; Name: text[50]; InfoBoxText: text[100]; Latitude: decimal; Longitude: Decimal; Desc: text; Color: Text; var JArray: JsonArray; Rec: variant)

Functie voor het plaatsen van een pin op de kaart.
De pin wordt toegevoegd aan de JArray die meerdere pins kan bevatten.
De kaart geeft alle pins in de JArray weer.

procedure CFLSetPushPins

procedure CFLSetPushPins(var JArray: JsonArray)

Functie voor het plaatsen van meerdere pins op de kaart. Alle pins in de JArray worden weergegeven op de kaart.

procedure CFLRemovePushPins

procedure CFLRemovePushPins()

Functie voor het verwijderen van de pushpins van de kaart. Alle pins worden verwijderd op de kaart.

event OnAfterPushPinDoubleClicked

[EventSubscriber(ObjectType::Page, Page::"CFL Maps",'OnAfterPushPinDoubleClicked', '', false, false)]
local procedure OnAfterPushPïnDoubleClicked(RecordID :recordid;PushPinRecord: variant)
begin
end

Event wordt getriggerd wanneer een gebruiker dubbelklikt op een pin op de kaart. De record-id van de pin wordt meegegeven. Dit wordt bijvoorbeeld gebruikt op bij dubbelklik op een pin, de kaart van de leverancier, klant of contact weer te geven.
Indien het een andere record betreft, dien je op dit event te subscriben om de nodige actie te ondernemen.

event OnAfterPushPnClicked

[EventSubscriber(ObjectType::Page, Page::"CFL Maps",'OnAfterPushPinClicked', '', false, false)]
local procedure OnAfterPushPïnClicked(JObject: JsonObject)
begin
end

Event wordt getriggerd wanneer een gebruiker klikt op een pin op de kaart. de Json informatie van de pin wordt meegegeven.
de Json bevat volgende informatie:

{   "No": "somenumber",
    "Name": "somename",
    "Infoboxtext": "someinfoboxtext",
    "Latitude": "somelatitude",
    "Longitude": "somelongitude",
    "PinText": "somepintext",
    "Color": "somecolor",
    "Recordid": "somerecordid"
}

Voorbeeld

Binnen BoCount Dynamics Base wordt deze kaartcomponent ("CFL Maps factbox") gebruikt bij bijvoorbeeld de contacten.

pageextension 2098113 "CFL Contact List Ext" extends "Contact List"
{
    layout
    {
        addfirst(FactBoxes)
        {
            part("CFL Maps Factbox"; "CFL Maps Factbox")
            {
                ApplicationArea = All;
                Visible = MapsFactboxVisible;
            }
        }
    }

    trigger OnOpenPage()
    var
        CFLBoCountDynamicsSetup: Record "CFL BoCount System Setup";
    begin
        if CFLBoCountDynamicsSetup.FindFirst() and (CFLBoCountDynamicsSetup."CFL Bing Maps Key" <> '') then
            MapsFactboxVisible := true
        else
            MapsFactboxVisible := false;
    end;

    trigger OnAfterGetCurrRecord()
    var
        JArray: JsonArray;
        CFLMapsMgt: Codeunit "CFL Maps Management";
    begin
        if rec."CFL Geocode Status" <> 'OK' then begin
            CFLMapsMgt.CFLGetLocation(rec."Country/Region Code", rec."Post Code", rec.City, rec.Address, rec."CFL Latitude", rec."CFL Longitude", rec."CFL Geocode Status");
            if rec."CFL Geocode Status" = 'OK' then
                rec.Modify(true);
        end;
        if rec."CFL Geocode Status" = 'OK' then
            CurrPage."CFL Maps Factbox".page.CFLSetPushPin(rec."No.", rec.Name, rec.Address + ' ' + rec."Post Code" + ' ' + rec.City, rec."CFL Latitude", rec."CFL Longitude", '', 'blue', JArray, rec);
    end;

    var
        MapsFactboxVisible: Boolean;
}

Tevens wordt de kaartweergave ("CFL Maps") aangepast met actions om bvb alle contacten weer te geven.

pageextension 2098245 "CFL Base Maps Ext" extends "CFL Maps" 
{
    actions
    {
        addfirst(View)
        {
            action(CFLContacts)
            {
                Image = PersonInCharge;
                Caption = 'Contacts';
                PromotedCategory = Category4;
                Promoted = true;
                PromotedOnly = true;
                ApplicationArea = All;

                trigger OnAction()
                var
                    Contact: Record Contact;
                    MapsManagement: Codeunit "CFL Base Maps Management";
                    JArray: JsonArray;
                begin
                    contact.reset;
                    Contact.SetRange(Type, Contact.Type::Company);
                    Contact.SetFilter("CFL Customer No.", '%1', '');
                    Contact.SetFilter("CFL Vendor No.", '%1', '');
                    Contact.SetFilter("CFL Latitude", '<>0');
                    Contact.SetFilter("CFL Longitude", '<>0');
                    JArray := MapsManagement.CFLContactToPushPin(Contact, '#212121');
                    CFLAddPushPins(JArray);
                end;
            }
        }
    }
}

Via de functie "CFLContactToPushPin" worden alle contacten in een Json-Array gestoken. Deze Json-array wordt dan via "CFLAddPushPins" op de kaart geplaatst.

codeunit 2098109 "CFL Base Maps Management"
{
    procedure ContactToPushPin(var Contact: Record Contact; Color: Text): JsonArray
    var
        JArray: JsonArray;
        JObject: JsonObject;
        CFLMapsMgt: Codeunit "CFL Maps Management";
    begin
        if Contact.FindFirst() then begin
            repeat
                if Contact."CFL Geocode Status" = 'OK' then
                    CFLMapsMgt.PushPin(Contact."No.", Contact.Name, contact.Address + ' ' + Contact."Post Code" + ' ' + contact.City, contact."CFL Latitude", Contact."CFL Longitude", '', Color, JArray, Contact);
            until Contact.Next() = 0;
            exit(JArray);
        end
    end;
}