De onderstaande code laat zien hoe, binnen de mechaniek van gekoppelde documenten, de hoeveelheid in het tegenovergestelde document kan worden aangepast om af te wijken van die in het originele document. De situatie is als volgt: het originele document is een klantenorder. Het tegenovergestelde document is dus een leveranciersordervoorbereiding. In de tabel LIGNES_V is een kolom Q_RESERVE toegevoegd.
alter table LIGNES_V add Q_RESERVE float not null default 0
De hoeveelheid in de leveranciersordervoorbereiding moet altijd gelijk zijn aan Q van de klantenorder - Q_RESERVE. De aanpassing ten opzichte van het standaardgedrag van Mercator bestaat er dus in om altijd de waarde van Q_RESERVE af te trekken zoals gedefinieerd in de klantenorder.
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorExtensions;
using MercatorUi;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Linq;
using MercatorUi.Engine.Gescom;
namespace Billing
{
public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
{
public void BillingEngineCreated(BillingEngine billingEngine)
{
billingEngine.EvaluatingQtyForLinkedDocLineUpdate += BillingEngine_EvaluatingQtyForLinkedDocLineUpdate;
billingEngine.HandlingLinkedDocLine += BillingEngine_HandlingLinkedDocLine;
}
public void BillingEngineClosed(BillingEngine billingEngine)
{
billingEngine.EvaluatingQtyForLinkedDocLineUpdate -= BillingEngine_EvaluatingQtyForLinkedDocLineUpdate;
billingEngine.HandlingLinkedDocLine -= BillingEngine_HandlingLinkedDocLine;
}
private void BillingEngine_EvaluatingQtyForLinkedDocLineUpdate(object sender, BillingEngine.EvaluatingQtyForLinkedDocLineUpdateEventArgs e)
{
if (e.LignesVRecord.Q_RESERVE.CompareTo(e.LignesVRecord2.Q_RESERVE, Globals.N_DEC_Q) != 0)
e.ShouldUpdateOppositeDocument = true;
}
private void BillingEngine_HandlingLinkedDocLine(object sender, BillingEngine.HandlingLinkedDocLineEventArgs e)
{
e.LignesARecordOpposite.Q = e.LignesVRecordSource.Q - e.LignesVRecordSource.Q_RESERVE;
}
}
}
De hoeveelheid zelf wordt gewijzigd door de code in het evenement HandlingLinkedDocLine. Het evenement EvaluatingQtyForLinkedDocLineUpdate wordt gebruikt om Mercator te vertellen dat de waarde van Q_RESERVE mogelijk is gewijzigd (een kolom die Mercator niet kent) en dat de orderpicking van de leverancier als gevolg daarvan moet worden aangepast.