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

Drop File Area

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).

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 UTCAPpour 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.