Deze pagina toont een voorbeeld van een customizer voor het ingavescherm van een picking in MercatorPenguin. De broncode is beschikbaar in het onderstaande zip-bestand.
De onderstaande code toont hoe:
- Een bevestiging gevraagd kan worden voor het verwijderen van een lijn in de picking.
- Code uitgevoerd kan worden na het verwijderen van een lijn.
- De gebruiker een wijziging van een lijn kan bevestigen.
- Code uitgevoerd kan worden na het wijzigen van een lijn.
- Een uitbreiding van OutOfDocBehavior van de picking van MercatorPenguin geïmplementeerd kan worden: in het geval de reden "Vervangingsartikel" is, stelt de code de lijst voor van de artikelen die nog gepickt moeten worden en aanwezig zijn in het document, zodat de gebruiker het artikel kan aanduiden dat hij vervangt. De reden wordt dan aangevuld met de naam en het identificatienummer van het artikel dat het vervangt.
- Een bevestiging gevraagd kan worden vóór het opslaan.
- Code uitgevoerd kan worden na het opslaan.
using MercatorPenguin;
using MercatorPenguin.EditCustomizers;
using MercatorExtensions;
namespace TestPenguinCustomizerPicking
{
public class CustomizerPicking : BaseEditPickingCustomizer
{
public CustomizerPicking(ConstructorParams constructorParams) :
base(constructorParams)
{ }
public override async Task OnBeforeDeleteLineAsync(BeforeDeleteLineEventArgs e)
{
if (!await Dialogs.AnswerYesNo(Page, $"Wilt u deze lijn {e.Ligne["id_article"]} op deze picking echt verwijderen?"))
{
e.CancelDeleteLine = true;
}
}
public override async void OnAfterDeleteLine(AfterDeleteLineEventArgs e)
{
await Dialogs.Stop(Page, $"De lijn werd succesvol verwijderd!");
}
public override async Task OnBeforeChangeLineAsync(BeforeChangeLineEventArgs e)
{
if (!await Dialogs.AnswerYesNo(Page, $"Wilt u de kolom {e.ColumnToChange} van deze lijn {e.Line["id_article"]} echt wijzigen met deze nieuwe waarde {e.NewValue}?"))
{
e.CancelChangeLine = true;
}
}
public override async Task OnAfterChangeLineAsync(AfterChangeLineEventArgs e)
{
await Dialogs.Stop(Page, $"Deze lijn {e.Line["id_article"]} heeft zojuist deze kolom {e.ColumnToChange} gewijzigd van deze waarde {e.OldValue} naar {e.Line[e.ColumnToChange]}?");
}
public override async Task OnAfterInsertItemAsync(AfterInsertItemEventArgs e)
{
var editEntryBehavior = Controls.OfType<IEditPickingBehavior>().FirstOrDefault();
if (editEntryBehavior == null)
return;
var editEntry = Controls.OfType<IEditEntry>().FirstOrDefault(c => c.Source?.Equals(editEntryBehavior.OutOfDocReasonSource, StringComparison.InvariantCultureIgnoreCase) ?? false);
if (editEntry.Text == "Vervangingsartikel")
{
List<ItemString> items = new List<ItemString>();
foreach (var d in Lignes.DataTable.RowsEnumerable(r => r.Value<double>("Q_ORI").CompareTo(0, 2) != 0))
items.Add(new ItemString() { Id = d["id_article"].ToString(), Lib = d["designatio"].ToString() });
var ret = await Dialogs.AskList(Page, "Vervangt welk artikel?", items);
if (ret != null)
{
editEntry.Text = editEntry.Text + $" voor het artikel : {ret.Lib}({ret.Id})";
}
}
}
public override async Task OnBeforeSaveAsync(BeforeSaveEventArgs e)
{
if (!await Dialogs.AnswerYesNo(Page, "Wilt u de wijzigingen op deze picking echt opslaan?"))
{
e.CancelSave = true;
}
}
public override async Task OnAfterSaveAsync(AfterSaveEventArgs e)
{
await Dialogs.Stop(Page, "De picking werd succesvol opgeslagen!");
}
}
public class ItemString
{
public string Id { get; set; }
public string Lib { get; set; }
public override string ToString()
{
return Lib;
}
}
}
Te laden :
0000003451.zip (1 Kb - 13-05-2026)