Module Core Library
Library for CAP Vision Applications
Properties
| Name | Value |
|---|---|
| Version | 27.202606.45272.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.
Fusion PDF
Principe
Le module de fusion PDF permet de fusionner automatiquement un état avec un PDF importé.
Le PDF est configuré au préalable dans la page Paramètres fusion PDF et est automatiquement ajouté à la fin de l'état lors de son rendu (à l'impression, à l'aperçu, à l'envoi par mail et à l'ajout en pièce-jointe).
La fusion est déclenchée via le trigger OnPreRendering de l'état, ce qui permet d’injecter le PDF directement dans le processus de rendu du document. Pour plus d'informations, consultez Trigger OnPreRendering.
Implémentation
Pour activer la fusion sur un état :
- étendez l'énumération
Report With Merge PDF UTCAPet ajoutez une valeur d'enum dont l'ID correspond à l'ID de l'état concerné :
enumextension 70344610 "Report With Merge PDF" extends "Report With Merge PDF UTCAP"
{
value(IDReport; "Nom Report")
{
Caption = 'Nom Report';
}
}
- dans l'état, ajoutez le code suivant :
trigger OnPreRendering(var RenderingPayload: JsonObject)
var
MergePDFHelper: Codeunit "Merge PDF Helper UTCAP";
begin
MergePDFHelper.GetMergedDocuments(RenderingPayload, Enum::"Report With Merge PDF UTCAP"::"Nom Report");
end;
Utilisation
Une fois l'implémentation terminée :
- allez sur la page
Paramètres fusion PDF - ajoutez une nouvelle ligne en choisissant l'état correspondant
- pour cet enregistrement, importez votre document en cliquant sur
Importer PDF - pour que ce document soit ajouté automatiquement à la fin de cet état, cochez la case
Activé
