Voorbeeld van een MercatorPenguin customizer : informatiebestanden

0000003449     -      03-06-2026

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.

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

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

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

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


Functionele cookies: Cookies die nodig zijn voor het gebruik van de website en voorkeurscookies. Ze bevatten geen persoonsgegevens. (Meer informatie)

Analytische cookies: Verzamelen van statistieken met betrekking tot het gedrag van internetgebruikers. (Meer informatie)

Marketingcookies: Om bezoekers op verschillende websites te volgen voor advertentiedoeleinden. (Meer informatie)