Cette programmation montre comment exécuter du code dans l'évèvement BeforeSave pour placer le curseur sur un champ précis. L'exemple est donné pour une validation refusée du champ REFERENCE dans un document de la gestion commerciale et permet de positionner le focus sur ce champ.
Le test pour l'exemple est que le champ REFERENCE doit contenir la caractère *.
Si le test consiste seulement à vérifier que la zone est non vide, il faut utiliser les propriétés DeptMandatory ou NiveauMandatory.
Le code s'établit comme suit :
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorUi;
using MercatorExtensions;
// <CompileWithRoslyn />
namespace Billing
{
public class Customizer : MercatorUi.ICustomizers.IBillingEngineCreated, MercatorUi.ICustomizers.IBillingEngineClosed
{
public void BillingEngineCreated(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
{
billingEngine.BeforeSave += BillingEngine_BeforeSave;
}
public void BillingEngineClosed(MercatorUi.Engine.Gescom.BillingEngine billingEngine)
{
billingEngine.BeforeSave -= BillingEngine_BeforeSave;
}
void BillingEngine_BeforeSave(object sender, MercatorUi.Engine.Gescom.BillingEngine.BeforeSaveEventArgs e)
{
MercatorUi.Engine.Gescom.BillingEngine billingEngine = (MercatorUi.Engine.Gescom.BillingEngine)sender;
MercatorUi.MovableControls.MovableTextBox textBoxReference = billingEngine.BillingForm?.MovableControls.Values.OfType<MercatorUi.MovableControls.MovableTextBox>().FirstOrDefault(c => c.Source == "REFERENCE");
if ((textBoxReference != null) && !billingEngine.PiedsVRecord.REFERENCE.Contains("*"))
{
Dialogs.Stop("La zone \"Référence\" doit contenir le caractère * !");
e.CancelSave = true;
_Divers.FocusError(textBoxReference);
}
}
}
}