In een boekhoudkundig document de in de database opgeslagen gegevens wijzigen

0000002037     -      03-06-2013

Deze programmering laat zien hoe tussenkomt in de opslagprocedure van een boekhoudkundig document met als doel de in de database opgeslagen gegevens te wijzigen. Ze laat gewoon toe om het aantal in het document gebruikte algemene rekeningen in te voeren in het veld "Referentie". Deze customizer wordt gecreëerd voor het voorbeeld en kan als vertrekpunt dienen voor meer ambitieuze programmeringen.

De code moet worden ingevoerd in een Booking-customizer gecreëerd op basis van de overeenstemmende boekhoudsequentie. Deze implementeert de volgende interface: MercatorUi.ICustomizers.ISqlCommandUpdater

Merk op dat deze customizer via deze methode niet kan tussenkomen in alle opdrachten die betrekking hebben op de opslag van het document. Hij zal enkel wijzigingen kunnen aanbrengen aan de opdracht die de opslag als dusdanig uitvoert, m.a.w.: de opdracht die de tijdelijke SQL-tabellen overzet naar de permanente tabellen:

  • #pieds_c_tmp -> pieds_c
  • #lignes_c_tmp -> lignes_c
  • #lignes_c_ana_tmp -> lignes_c_ana

In ons voorbeeld wordt de aanvullende SQL-code uitgevoerd voor het standaard SQL-script. Bijgevolg moet u op dat moment nog wijzigingen doorvoeren in de tijdelijke tabellen, aangezien de permanente tabellen het document dat wordt opgeslagen nog niet bevatten. Merk op dat de tijdelijke tabellen dezelfde structuur hebben als de overeenstemmende permanente tabel.

De code ziet er als volgt uit:

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

namespace Booking
{
    public class Customizer : MercatorUi.ICustomizers.ISqlCommandUpdater
    {
        public void SqlCommandUpdate(System.Data.SqlClient.SqlCommand SqlCommandToModify, System.Windows.Forms.Form WindowsForm)
        {
            SqlCommandToModify.CommandText = "declare @n integer \r\n"
                                           + "select @n=count(distinct id_gen) from #lignes_c_tmp \r\n"
                                           + "update #pieds_c_tmp set reference='Aantal gebruikte algemene rekeningen: '+ltrim(str(@n))  \r\n\r\n"
                                           + SqlCommandToModify.CommandText;
        }
    }
}

 

Opmerkingen

  • We raden sterk af om op deze plaats in het programma interface-elementen voor interactie met de gebruiker in te voeren (dialoogvenster ...). Deze code wordt immers uitgevoerd tijdens de SQL-transactie, en die uitvoeringstijd moet dan ook zo kort mogelijk zijn.
  • Het is beter om, zoals in dit voorbeeld, voorafgaand aan de opslag en in de tijdelijke tabellen wijzigingen te doen, dan na de opslag in de permanente tabellen. Want #pieds_c_tmp bijvoorbeeld bevat slechts één record, terwijl pieds_c heel veel records kan bevatten.