Vanuit commercieel beheer een kolom toevoegen in het invoerscherm van de afpuntingen

0000002222     -      21-02-2014

Met behulp van deze module kan er een kolom worden toegevoegd aan het afpuntingsscherm. In dit voorbeeld bevat de extra kolom de waarde van de korting in de hoofding van het oorspronkelijke commercieel beheersdocument (PIEDS_V.RED_GEN_PC). Deze kolom bevat een waarde voor de klantendocumenten die in de boekhouding worden aangemaakt door het centraliseringsproces.

De programmeringsbasis is een customizer Main en het event BaseFormCreating van het object MercatorUi.Globals.Main dat het mogelijk maakt om elk public screen van Mercator Aruba aan te passen. (Dit event wordt bij het instanciëren van het scherm uitgevoerd.)

Het afpuntingsscherm is van het type MercatorUi.Forms.Booking.BookingMatchingForm. De volgende events moeten er onderschept worden:

  • Shown: om een bijkomende kolom in de rooster toe te voegen. Dat moet slechts één maal gebeuren. Dat is het geval aangezien het event Shown van een scherm slechts één keer wordt opgeheven.
  • ReqSqlCreated: om de SQL-opdracht die Mercator genereert te wijzigen telkens de gebruiker selectiecriteria in het scherm wijzigt. eventArgs van dit event bevat een StringBuilder-eigenschap waarvan de naam ReqSql is. Door deze StringBuilder te bewerken kan de SQL-opdracht worden gewijzigd.
  • FormClosed wordt uitsluitend gebruikt om alle events te deregistreren en om zo open referenties te houden naar objecten die niet langer worden gebruikt.

attention Door de opdracht te wijzigen kan het standaardgedrag van Mercator worden gewijzigd. Deze programmering wordt volledig onder de verantwoordelijkheid van de persoon dit deze uitvoert, gedaan. Het valt absoluut af te raden om de where clause van deze opdracht te wijzigen. Zo zal het bijvoorbeeld mogelijk zijn om de boekingen in de boekhouding van klant Y weer te geven terwijl u een afpunting uitvoert voor klant X.

De code wordt als volgt samengesteld:

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;

namespace Main
{
     public class Customizer : MercatorUi.ICustomizers. IExec
    {

         public void Main(MercatorUi.ICustomizers. ExecAction Action)
        {
             if (Action == MercatorUi.ICustomizers. ExecAction .DossierOpen)
            {
                 Globals .Main.BaseFormCreating += new MercatorUi. Main . BaseFormCreatingEventHandler (Main_BaseFormCreating);
            }
             else if (Action == MercatorUi.ICustomizers. ExecAction .DossierClose)
            {
                 Globals .Main.BaseFormCreating -= new MercatorUi. Main . BaseFormCreatingEventHandler (Main_BaseFormCreating);
            }
        }

         void Main_BaseFormCreating( object sender, MercatorUi. Main . BaseFormCreatingEventArgs e)
        {
             if (e.Form is MercatorUi.Forms.Booking. BookingMatchingForm ) // bevindt u zich in het afpuntingsscherm?
            {
                MercatorUi.Forms.Booking. BookingMatchingForm bookingMatchingForm = (MercatorUi.Forms.Booking. BookingMatchingForm )e.Form;
                bookingMatchingForm.FormClosed += new System.Windows.Forms. FormClosedEventHandler (bookingMatchingForm_FormClosed);
                bookingMatchingForm.Shown += new EventHandler (bookingMatchingForm_Shown);
                bookingMatchingForm.ReqSqlCreated += new MercatorUi.Forms.Booking. BookingMatchingForm . ReqSqlCreatedHandler (bookingMatchingForm_ReqSqlCreated);
            }
        }

         void bookingMatchingForm_FormClosed( object sender, System.Windows.Forms. FormClosedEventArgs e) // dit event dient enkel om alle events te deregistreren wanneer het venster wordt gesloten
        {
            MercatorUi.Forms.Booking. BookingMatchingForm bookingMatchingForm = (MercatorUi.Forms.Booking. BookingMatchingForm )sender;
            bookingMatchingForm.FormClosed -= new System.Windows.Forms. FormClosedEventHandler (bookingMatchingForm_FormClosed);
            bookingMatchingForm.Shown -= new EventHandler (bookingMatchingForm_Shown);
            bookingMatchingForm.ReqSqlCreated -= new MercatorUi.Forms.Booking. BookingMatchingForm . ReqSqlCreatedHandler (bookingMatchingForm_ReqSqlCreated);
        }

         void bookingMatchingForm_Shown( object sender, EventArgs e) // hier wordt de bijkomende kolom ingevoegd (dit event wordt slechts één keer uitgevoerd)
        {
            MercatorUi.Forms.Booking. BookingMatchingForm bookingMatchingForm = (MercatorUi.Forms.Booking. BookingMatchingForm )sender;
            bookingMatchingForm.Grid.Columns.Add( "red_gen_pc" , "% Gescom" );
            bookingMatchingForm.Grid.Columns[ "red_gen_pc" ].Width = 60;
            bookingMatchingForm.Grid.Columns[ "red_gen_pc" ].DataPropertyName = "red_gen_pc" ;
            bookingMatchingForm.Grid.Columns[ "red_gen_pc" ].DefaultCellStyle.Alignment = System.Windows.Forms. DataGridViewContentAlignment .MiddleRight;
            bookingMatchingForm.Grid.Columns[ "red_gen_pc" ].DefaultCellStyle.Format = "##0.00" ;
        }

         void bookingMatchingForm_ReqSqlCreated( object sender, MercatorUi.Forms.Booking. BookingMatchingForm . ReqSqlCreatedEventArgs e)
        {
            MercatorUi.Forms.Booking. BookingMatchingForm bookingMatchingForm = (MercatorUi.Forms.Booking. BookingMatchingForm )sender;
             if (bookingMatchingForm.Sig.Module == MercatorUi.Sig. _SigEnum .CLI) // de opdracht wordt enkel gewijzigd indien er klanten worden afgepunt
            {
                e.ReqSql.Replace( ",cast(0 as bit) as auto_sel" , ",cast(0 as bit) as auto_sel,pieds_v.red_gen_pc" ); // het gewenste veld in de tabel pieds_v toevoegen
                e.ReqSql.Replace( "inner join pieds_c" , "left join pieds_v on (lignes_c.id_gescom=pieds_v.journal+str(pieds_v.piece,10))    inner join pieds_c" ); // de verbinding in de tabel pieds_v toevoegen
                bookingMatchingForm.Grid.Columns[ "red_gen_pc" ].Visible = true ;
            }
             else
            {
                e.ReqSql.Replace( ",cast(0 as bit) as auto_sel" , ",cast(0 as bit) as auto_sel,0 as red_gen_pc" ); // toch het veld toevoegen aangezien het rooster dit verwacht
                bookingMatchingForm.Grid.Columns[ "red_gen_pc" ].Visible = false ;
            }
        }
    }
}