De EditAddLineButton van MercatorPenguin bevat deze optionele eigenschap: DataUpdaters. Deze eigenschap is beschikbaar in de knop die wordt geplaatst in de XAML-code voor:
- verkopen met lijnen,
- aankopen met lijnen,
- inventarissen,
- magazijnoverdrachten,
- pickings.
Een DataUpdater maakt het mogelijk een expressie te definiëren die een berekende waarde afdwingt na de standaardcode die wordt uitgevoerd wanneer op deze knop wordt geklikt. Het is mogelijk een onbeperkt aantal DataUpdaters in deze eigenschap te plaatsen.
<m:EditAddLineButton AutoFocusEntry="LINE|ID_ARTICLE">
<m:EditAddLineButton.DataUpdaters>
<x:Array Type="{x:Type m:DataUpdater}">
<m:DataUpdater Source="Q" Expression="iif(q_carton=0,q,q*q_carton)" RoundDecimals="2" />
<m:DataUpdater Source="S_CLE1" Expression="S_CLE1+'*'" />
</x:Array>
</m:EditAddLineButton.DataUpdaters>
</m:EditAddLineButton>
Elke DataUpdater-regel moet de volgende verplichte eigenschappen bevatten:
- Source : de naam van de kolom die moet worden gewijzigd.
- Expression : de formule die moet worden berekend, in de vorm van een geldige DataColumn-expressie.
Daarnaast zijn deze optionele eigenschappen beschikbaar:
- RoundDecimals : om een afronding af te dwingen op een bepaald aantal decimalen. Dit is alleen van toepassing op numeriek waarden.
- LinkedItemsMode : alleen relevant voor verkopen en aankopen. Hiermee wordt bepaald of de DataUpdater wordt toegepast op gekoppelde artikelen:
- All : standaardwaarde.
- ParentsOnly : alleen op hoofdartikelen
- ChildrenOnly : alleen op subartikelen
De DataRow die wordt doorgegeven aan de DataUpdater komt overeen met de regel die is gevuld tijdens het zoeken naar het artikel. Als u gegevens wilt gebruiken buiten deze DataRow maar aanwezig op het scherm, zoals in een EditEntry of een EditPicker, moet de bron worden aangegeven met het teken $. Bijvoorbeeld
Expression = q * $var1$
als een EditEntry zijn bron heeft ingesteld op "VAR1".
Opmerking: de compilatie en uitvoering van gecompileerde code is niet mogelijk op mobiele apparaten. Er zal dus nooit volledige ondersteuning zijn voor de C#-taal of een andere gecompileerde taal in deze context van MercatorPenguin.
Deze pagina biedt enkele aanwijzingen over mogelijke syntaxis.
Zakelijke toepassing
Sommige artikelen worden verpakt in dozen die meerdere keren hetzelfde product bevatten, maar het product wordt per stuk opgeslagen. Daarom moet tijdens het picken, wanneer n dozen worden gescand, de hoeveelheid die daadwerkelijk wordt meegeteld gelijk zijn aan n x de hoeveelheid in een doos.
Om dit te implementeren wordt de kolom Q_CARTON toegevoegd aan LIGNES_V.
alter table LIGNES_V add Q_CARTON smallint not null default 0
In de customizer BillingVente die is gekoppeld aan de bestemmingssequentie van het picken, wordt indien nodig LIGNES_V.Q_CARTON aangevuld met de gewenste waarde. Deze waarde kan afkomstig zijn van een decodering van een barcode of een AfterInsertItem-evenement.
void billingEngine_AfterInsertItem(object sender, MercatorUi.Engine.Gescom.BillingEngine.AfterInsertItemEventArgs e)
{
if (MercatorUi.Globals.IsMercatorPenguinServer)
{
if (...)
e.DataRowLignes["q_carton"] = ...;
}
}
De volgende expressie vermenigvuldigt de hoeveelheid ingevoerd in MercatorPenguin met de hoeveelheid in een doos, alleen als deze laatst waarde is gedefinieerd:
<m:DataUpdater Source="Q" Expression="iif(q_carton=0,q,q*q_carton)" RoundDecimals="2" />