Voorbeeld van een MercatorPenguin customizer : picking

0000003451     -      03-06-2026

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.

 

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


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)