Deze pagina toont een voorbeeld van een customizer voor het ingavescherm van een fiche van een informatiebestand in MercatorPenguin. Het is van toepassing op het informatiebestand van de klanten. De broncode is beschikbaar in het onderstaande zip-bestand.
Deze customizer voegt een knop toe (HistoButton) waarvan de code in het project opgenomen is. Het erft dus over van Microsoft.Maui.Controls.Button. Het laat toe om een historiek pagina (HistoPage) weer te geven. De code van deze pagina HistoPage.xaml is ook in het project opgenomen. Deze knop wordt geplaatst via een override van de methode OnInit.
In de code van HistoButton wordt getoond hoe de methode GetRunSqlData gebruikt kan worden om een SQL-query uit te voeren via MercatorPenguinServer.
var r = await BaseEditCustomizer.GetRunSqlData<HistoDescriptor>("select top 20 type,id,journal,cast(piece as bigint) as piece,date,tot_ttc_dv as tot from PIEDS_V where id_cli=@c_id order by date desc", [new MercatorPenguin.RunSqlDescriptor.Parameter("@c_id", idSig)]);
In de code van HistoPage.xaml.cs wordt getoond hoe de methode DoInMercatorInstance gebruikt kan worden, die op een identieke manier geïmplementeerd wordt als die welke geldt voor de CustomPages.
DoInMercatorInstanceRequest doInMercatorInstanceRequest = new DoInMercatorInstanceRequest
{
Type = histoDescriptor.Type,
Id = histoDescriptor.Id,
Journal = histoDescriptor.Journal,
Piece = histoDescriptor.Piece
};
MercatorPenguin.DoInMercatorInstanceDescriptor doInMercatorInstanceDescriptor = new MercatorPenguin.DoInMercatorInstanceDescriptor
{
Assembly = "<Other\\TestPenguinCustom\\Server\\TestPenguinCustomServer.dll",
ClassName = "TestPenguinCustomServer.TestClass",
MethodName = "DoubleQuantities",
Parameter = Api.JsonConvertSerializeObject(doInMercatorInstanceRequest)
};
activityIndicator.SetActive(true);
var r = await MercatorPenguin.BaseCustomPage.DoInMercatorInstance(doInMercatorInstanceDescriptor);
activityIndicator.SetActive(false);
if (r.Error != null)
{
_ = MercatorPenguin.Dialogs.Stop(this, r.Error);
}
else
{
DoInMercatorInstanceResponse doInMercatorInstanceResponse = Api.JsonConvertDeserializeObject<DoInMercatorInstanceResponse>(r.Result);
if (doInMercatorInstanceResponse.Error != null)
_ = MercatorPenguin.Dialogs.Stop(this, doInMercatorInstanceResponse.Error);
else
_ = MercatorPenguin.Dialogs.Stop(this, doInMercatorInstanceResponse.Result);
}
De customizer toont hoe een validatie uitgevoerd kan worden vóór het opslaan via OnBeforeSave.
public override async Task OnBeforeSaveAsync(BeforeSaveEventArgs e)
{
IEditEntry editEntryNom = Controls.OfType<IEditEntry>().FirstOrDefault(x => x.Source == "c_nom");
if (editEntryNom == null)
{
await Dialogs.Stop(Page, "Het entry gekoppeld aan C_NOM is niet gevonden!");
e.CancelSave = true;
return;
}
IEditEntry editEntryRemise = Controls.OfType<IEditEntry>().FirstOrDefault(x => x.Source == "c_remise");
if (editEntryRemise == null)
{
await Dialogs.Stop(Page, "Het entry gekoppeld aan C_REMISE is niet gevonden!");
e.CancelSave = true;
return;
}
decimal? remise = await Dialogs.AskDecimal(Page, "Bevestig de korting voor deze klant?", 0, editEntryRemise.DecimalValue);
if (remise == null)
{
e.CancelSave = true;
return;
}
editEntryRemise.DecimalValue = remise.Value;
if (!await Dialogs.AnswerYesNo(Page, $"Wilt u de wijzigingen op de klant \"{editEntryNom.Text}\" echt opslaan?"))
{
e.CancelSave = true;
}
}
Het toont ook hoe een bericht weergegeven kan worden na het opslaan.
public override async Task OnAfterSaveAsync(AfterSaveEventArgs e)
{
await Dialogs.Stop(Page, "De klantenfiche werd succesvol opgeslagen!");
} Te laden :
0000003449.zip (4 Kb - 13-05-2026)