Table of Contents

Module Core Library

Library for Cap Vision Applications

Properties

Name Value
Version 25.202512.40984.0
Publisher Cap Vision
Brief Library for Cap Vision Applications

Namespace

Name Summary
CapVision

Présentation

Cette application est une bibliothèque de fonctions pour les applications CAP Vision.

Calendar

Cet add-in affiche un calendrier d'équipe dans Business Central.

Color Picker Control

Cet add-in affiche un champ sous la forme d'un sélecteur de couleurs

Color Picker Control

Drop File Area

Drop File Area

Swatch Color Picker Control

Swatch Color Picker Control

Maps

Ce module permet l'affichage de cartes dans Business Central grâce à des ControlAddIn, et à l'utilisation de l'API de cartographie destinées à obtenir des itinéraires, rechercher des adresses, etc.

Ce module se base sur le service Azure Maps. Pour utiliser ce module vous devez obtenir une clé d'API Azure Maps. Pour plus d'informations, consultez Obtenir une clé d'API Azure Maps.

API de cartographie

Obtenir un itinéraire entre deux points

L'exemple ci-dessous permet d'obtenir un itinéraire entre deux points.

Conseil

Utilisez GetSearchAddress pour obtenir les coordonnées à partir d'une adresse.

var
    Position: Record "Maps Position UTCAP";
    Routes: Record "Maps Route UTCAP";
    Authentication: Codeunit "Maps Authentication UTCAP"
    MapsRoute: Codeunit "Maps Route UTCAP";
begin
    Authentication.SetSubscriptionKey('<PUT YOUR SUBSCRIPTION KEY HERE>');

    MapsRoute.SetAuthentication(Authentication);
    Routes := MapsRoute.GetRouteDirections(
        Position.Create(48.111, 7.222),
        Position.Create(48.333, 7.444),
        Routes
    );

    Message('First route found: %1', Routes.ToCoordinatesArray(0));
end;

Obtenir un itinéraire entre plusieurs points

L'exemple de code ci-dessous permet d'obtenir un itinéraire entre plusieurs points.

var
    StopPoints: Record "Maps Position UTCAP";
    Routes: Record "Maps Route UTCAP";
    RouteParameters: Record "Maps Route Parameters UTCAP";
    Authentication: Codeunit "Maps Authentication UTCAP"
    MapsRoute: Codeunit "Maps Route UTCAP";
begin
    Authentication.SetSubscriptionKey('<PUT YOUR SUBSCRIPTION KEY HERE>');

    StopPoints := Position.Create(48.111, 7.222);
    StopPoints."Entry No." := 0;
    StopPoints.Insert();

    StopPoints := Position.Create(48.111, 7.322);
    StopPoints."Entry No." := 1;
    StopPoints.Insert();

    StopPoints := Position.Create(48.111, 7.422);
    StopPoints."Entry No." := 2;
    StopPoints.Insert();

    StopPoints := Position.Create(48.111, 7.522);
    StopPoints."Entry No." := 3;
    StopPoints.Insert();

    MapsRoute.SetAuthentication(Authentication);
    Routes := MapsRoute.GetRouteDirections(
        StopPoints,
        RouteParameters,
        Routes
    );

    Message('First route found: %1', Routes.ToCoordinatesArray(0));
end;

Localiser une adresse

Pour localiser une adresse, utilisez la fonction GetSearchAddress de l'objet Maps Search UTCAP. Cette fonction prend en paramètre une adresse et retourne un objet Maps Search Result UTCAP contenant les coordonnées de l'adresse.

Voici un exemple d'utilisation de cette fonction :

var
    SearchResult: Record "Maps Search Result UTCAP";
    Authentication: Codeunit "Maps Authentication UTCAP"
    MapsSearch: Codeunit "Maps Search UTCAP";
begin
    Authentication.SetSubscriptionKey('<PUT YOUR SUBSCRIPTION KEY HERE>');

    MapsSearch.SetAuthentication(Authentication);
    SearchResult := MapsSearch.GetSearchAddress('4 rue d''Alsace 68250 Rouffach');

    Message('Latitude: %1, Longitude: %2', SearchResult.Latitude, SearchResult.Longitude);
end;

Obtenir la distance à vol d'oiseau entre deux points

La fonction GetDistanceAsTheCrowFlies réalise une estimation de la distance à vol d'oiseau avec les suppositions suivantes :

  • La Terre est une sphère parfaite.
  • La Terre a un rayon de 6.371.000 mètres.
Note

Cette fonction ne nécessite pas d'abonnement à Azure Maps.

var
    Position: Record "Maps Position UTCAP";
begin
    Message('Distance: %1',
        Position.GetDistanceAsTheCrowFlies(
            Position.Create(48.111, 7.222),
            Position.Create(48.333, 7.444)
        )
    );
end;

Afficher une carte

Utiliser les ControlAddIns

Selon l'intégration que vous souhaitez faire, ce module propose plusieurs ControlAddIns.

ControlAddIn Taille minimale Taille demandée Usage
Maps SizeM UTCAP 200x200 300x300 Afficher une carte dans un récapitulatif (factbox) ou dans un onglet (group) d'une fiche
Maps SizeL UTCAP 200x200 500x500 Afficher une carte dans un récapitulatif en plein écran dans une fiche (pour ordinateur de bureau).

Utiliser le récapitulatif intégré

La page Map Control Factbox UTCAP vous permet facilement d'afficher une carte dans un récapitulatif (factbox).

Afficher une carte dans un récapitulatif

Le code ci-dessous ajoute une carte dans un récapitulatif de liste des clients et affiche la position du client sélectionné.

pageextension 50100 "Customer List PTE" extends "Customer List"
{
    layout
    {
        addfirst(factboxes)
        {
            part(MapsControlPTE; "Map Control Factbox UTCAP")
            {
                ApplicationArea = All;
            }
        }

    }

    trigger OnAfterGetCurrRecord()
    var
        SearchResult: Record "Maps Search Result UTCAP";
        Authentication: Codeunit "Maps Authentication UTCAP"
        MapsSearch: Codeunit "Maps Search UTCAP";
    begin
        Authentication.SetSubscriptionKey('<PUT YOUR SUBSCRIPTION KEY HERE>');
        
        CurrPage.MapsControlPTE.Page.SetAuthentication(Authentication);

        MapsSearch.SetAuthentication(Authentication);
        SearchResult := MapsSearch.GetSearchAddress(
            Rec.Name + ' ' + Rec.Address + ' ' + Rec."Address 2" + ' ' + Rec.City + ' ' + Rec."Post Code" + ' ' + Rec."Country/Region Code"
        );

        CurrPage.MapsControlPTE.Page.SetCenterPosition(SearchResult.Latitude, SearchResult.Longitude);
        CurrPage.MapsControlPTE.Page.SetZoomLevel(12);
        CurrPage.MapsControlPTE.Page.AddMarker(SearchResult.Latitude, SearchResult.Longitude, '');
    end;
}

Afficher un itinéraire sur une carte

Dans l'exemple ci-dessous, nous affichons un itinéraire entre deux points sur une carte. L'itinéraire (Routes) est supposé avoir déjà été obtenu. Le controladdin Maps SizeM UTCAP est supposé avoir été ajouté à la page et nommé MapsControlPTE.

var
    Routes: Record "Maps Route UTCAP";
    Route: JsonObject;
begin
    //Utiliser l'API MapsRoute.GetRouteDirections pour obtenir un itinéraire>
    //...
    //<

    Route.Add('id', CreateGuid());
    Route.Add('primaryColor', 'red');
    Route.Add('secondaryColor', 'white');
    Route.Add('lineCoordinates', Routes.ToCoordinatesArray(0));

    CurrPage.MapsControlPTE.AddRoute(Route);
end;

Inversion de dépendance

Principe

Le module d'inversion de dépendance permet de gérer un couplage faible entre les applications. Grâce à ce module, une application n'est plus obligée de référencer une autre application dans ses dépendances pour faire appel à l'une de ses fonctions.

Le concept se divise en deux parties :

  • Une application propose une fonctionnalité
  • Une ou plusieurs applications proposent leur implémentation

La notion de fonctionnalité vient, par exemple, remplacer la notion d'événement qui aurait pu être utilisée si les deux applications étaient dépendantes.

Implémentation

Dans l'application qui propose une fonctionnalité,

  • étendez l'énumération Dep.Inv. Feature UTCAP pour y déclarer votre fonctionnalité.
enumextension 50000 "Dep.Inv. Feature PTE" extends "Dep.Inv. Feature UTCAP"
{
    value(50000; "MyFeature1.PTE")
    {
        Caption = 'My Feature 1';
    }
}
  • déclenchez l'appel à l'implémentation avec le code suivant :
var
  DependencyInversion: Codeunit "Dependency Inversion UTCAP";
  Parameters, Results: JsonObject;
begin
  Results := DependencyInversion.ExecuteImplementation(Enum::"Dep.Inv. Feature UTCAP"::"MyFeature1.PTE", Parameters);
end;

Dans les applications qui implémentent une fonctionnalité,

  • étendez l'énumération Dep.Inv. Feature Impl. UTCAP
enumextension 60000 "Dep.Inv. Feature Impl. PTE" extends "Dep.Inv. Feature Impl. UTCAP"
{
    value(60000; "MyFeature1.Impl1.PTE")
    {
        Caption = 'My Implementation for Feature 1';
        Implementation = "Dep.Inv. Feature Impl. UTCAP" = "MyFeature1.Impl1.PTE";
    }
}
  • créez votre implémentation dans un codeunit :
codeunit 60000 "MyFeature1.Impl1.PTE" implements "Dep.Inv. Feature Impl. PTE"
{
    procedure Execute(Parameters: JsonObject): JsonObject;
    begin
      Message('Hello World');
    end;

    procedure GetSupportedFeatures() SupportedFeatures: List of [Text];
    begin
        SupportedFeatures.Add('MyFeature1.PTE');
    end;
}

Plusieurs implémentations pour une même fonctionnalité

S'il existe plusieurs implémentations pour une même fonctionnalité, il est possible que l'application déclarant la fonctionnalité le supporte. Dans ce cas, elle fera appelle à DependencyInversion.ExecuteImplementations au lieu de DependencyInversion.ExecuteImplementations.

Toutefois, si vous appelez DependencyInversion.ExecuteImplementation alors qu'il existe plusieurs implémentations, il est nécessaire de spécifier laquelle doit être exécutée. Vous devez pour cela répondre à l'événement OnFetchDefaultImplementation.