MercatorPenguin permet d'appliquer du code sur mesure sur tous les écrans de modification :
- signalétiques,
- ventes et achats,
- picking,
- inventaires,
- transferts entre dépôts,
- actions du CRM.
Ceci offre une alternative intéressante au CustomPage dans la mesure où l'écran peut être composé dans sa plus grande partie sans code, via le paramétrage dans Mercator. Et ensuite, la partie custom, parfois un simple bouton, parfois une simple expression calculée ou une validation supplémentaire, est mise en place via ce customizer.
Ces customizers requièrent la version Core de MercatorPenguinServer. Le cas échéant, il est nécessaire de remplacer la version classique de MercatorPenguinServer par la version Core et d'upgrader le Mercator qui y est lié en version Core.
1. Préparation du projet
Un tel customizer doit être construit dans une bibliothèque de classes (class library) multi-plateformes Android et iOS. Le projet doit avoir une référence vers MercatorTunnel sous Android et une autre référence vers MercatorTunnel sous iOS (à placer dans des répertoire séparés). Ces différentes versions sont téléchargeables depuis cette page.
Le projet type sera composé comme ceci :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net10.0-android;net10.0-ios</TargetFrameworks>
<UseMaui>true</UseMaui>
<SingleProject>true</SingleProject>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>disable</Nullable>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">15.0</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Maui.Controls" Version="$(MicrosoftMauiControlsVersion)" />
<PackageReference Include="Microsoft.Maui.Controls.Compatibility" Version="$(MicrosoftMauiControlsVersion)" />
<PackageReference Include="BarcodeScanning.Native.Maui" Version="$(BarcodeScanningNativeMauiVersion)" />
<PackageReference Include="Newtonsoft.Json" Version="$(NewtonsoftJsonVersion)" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net10.0-android'">
<Reference Include="MercatorTunnel">
<HintPath>...\net10.0-android\MercatorTunnel.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net10.0-ios'">
<Reference Include="MercatorTunnel">
<HintPath>...\net10.0-ios\MercatorTunnel.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
Dans ce projet, les variables sous la forme $(MicrosoftMauiControlsVersion) doivent être remplacées par la version actuelle de chaque nuget. Ces versions sont lisibles dans MercatorPenguin, via l'écran d'information (lien dans le bas de l'écran).
2. Creation du customizer
Un customizer est une classe qui hérite d'un BaseEditCustomizer propre à chaque type d'écran de modification :
- signalétiques : MercatorPenguin.EditCustomizers.BaseEditSigCustomizer
- ventes et achats : MercatorPenguin.EditCustomizers.BaseEditBillingCustomizer
- picking : MercatorPenguin.EditCustomizers.BaseEditPickingCustomizer
- inventaires : MercatorPenguin.EditCustomizers.BaseEditInventoryCustomizer
- transferts entre dépôts : MercatorPenguin.EditCustomizers.BaseEditTransferCustomizer
- actions : MercatorPenguin.EditCustomizers.BaseEditActionCustomizer
Le constructeur du customizer doit toujours être écrit sous cette forme. Cela permet de passer à la classe parente les paramètres transmis par MercatorPenguin.
public CustomizerPicking(ConstructorParams constructorParams) :
base(constructorParams)
{ }
Les points d'entrée dans le code de MercatorPenguin sont disponibles sous la forme de différentes méthodes overridables propres à chaque classe de base.
💡 Dans cette classe de base, ces méthodes ne contiennent aucun code. Il n'est donc jamais nécessaire d'appeler base. suivi du nom de la méthode.
Intellisense permet de découvrir ces méthodes disponibles. Nous vous suggérons aussi de vous reporter aux exemples listés ci-dessous, qui montrent le code mis en place. Ces méthode existent chaque fois en version synchrone et asynchrone (async).
👉 Veuillez toutefois noter que ces exemples ne sont pas exhaustifs. Un code montré dans un exemple peut probablement fonctionner dans un autre type d'écran.
3. Mise à disposition des assemblies pour MercatorPenguin
Lors de la compilation du projet évoqué ci-dessus, Mercator produit deux répertoires bin distincts, l'un pour Android, l'autre pour iOS. Il faut localiser l'assembly correspondant à ce projet pour chaque plateforme et dans l'onglet "Assemblies" de la fenêtre de paramétrage de l'écran MercatorPengin concerné. Ce répertoire bin contient un nombre important de DLL. Seule la DLL correspondant au projet doit être placée dans la base de données de Mercator. Les autres DLL font déjà partie de MercatorPenguin. La DLL peut être déposée par drag & drop dans le cadre correspondant ou sélectionnée via le bouton qui lui est associé.

⚠️ Il n'est pas possible de passer des DLL en référence. Si nécessaires, elles devront être incluses dans la DLL de base, par exemple via obfuscation.