De hieronder beschreven module illustreert een Param-customizer. Dit type customizer laat toe om de parameterinstellingschermen van Mercator te bewerken. Deze programmering is bedoeld om een kolom met een coëfficiënt toe te voegen in de rayontabel en vereist de toevoeging van een veld COEFF van het numerieke type in de tabel RAYONS.
De code implementeert de volgende interfaces:
We vestigen de aandacht op het feit dat de code van een Param-customizer in alle parameterschermen wordt uitgevoerd. Het is dus essentieel dat men bij alle gebruikte methodes nagaat of men wel degelijk in het gewenste scherm staat, in ons voorbeeld is dat het scherm van de rayons.
De code ziet er als volgt uit:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using MercatorApi;
using MercatorUi;
using System.Windows.Forms;
namespace Param
{
public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer, MercatorUi.ICustomizers.ISqlCommandUpdater
{
public void FormLoadCustomize(Form WindowsForm)
{
if (WindowsForm is MercatorUi.Forms.Param.ParamRayonsForm) // We zitten in het scherm voor de parameterinstelling van de rayons.
{
MercatorUi.Forms.Param.ParamRayonsForm paramRayonsForm = (MercatorUi.Forms.Param.ParamRayonsForm)WindowsForm;
MercatorUi.GridPro.DataGridViewDoubleTextBoxColumn colCoeff = new MercatorUi.GridPro.DataGridViewDoubleTextBoxColumn();
colCoeff.Name = "colCoeff";
colCoeff.HeaderText = "Coeff.";
colCoeff.Width = 80;
colCoeff.DataPropertyName = "coeff";
colCoeff.DisplayFormat = "##0.00";
colCoeff.MinValue = 0;
colCoeff.MaxValue = 999.99;
colCoeff.SortMode = DataGridViewColumnSortMode.NotSortable;
colCoeff.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
paramRayonsForm.Grid.Columns.Add(colCoeff);
}
}
public void SqlCommandUpdate(System.Data.SqlClient.SqlCommand SqlCommandToModify, Form WindowsForm) // Wijziging van de opdracht voor gegevensopslag
{
if (WindowsForm is MercatorUi.Forms.Param.ParamRayonsForm) // We zitten wel degelijk in het scherm voor de parameterinstelling van de rayons.
{
if (!SqlCommandToModify.CommandText.Contains("coeff")) // Deze wijziging moet slechts eenmaal worden uitgevoerd. Daarna wordt de gewijzigde opdracht gebruikt voor alle toegevoegde of gewijzigde rijen van het rooster.
{
SqlCommandToModify.CommandText = SqlCommandToModify.CommandText.Replace(",taux_tva=@taux_tva", ",coeff=@coeff,taux_tva=@taux_tva");
SqlCommandToModify.CommandText = SqlCommandToModify.CommandText.Replace(",taux_tva)", ",coeff,taux_tva)");
SqlCommandToModify.CommandText = SqlCommandToModify.CommandText.Replace(",@taux_tva)", ",@coeff,@taux_tva)");
}
MercatorUi.Forms.Param.ParamRayonsForm paramRayonsForm = (MercatorUi.Forms.Param.ParamRayonsForm)WindowsForm;
string id = SqlCommandToModify.Parameters["@id"].Value.ToString(); // We moeten de ID van de rij kennen om de coëfficiënt te vinden die bij deze rij hoort.
DataTable dt = (DataTable)paramRayonsForm.Grid.DataSource; // Achter het rooster bevindt zich in feite een DataTable.
DataRow[] foundRows = dt.Select(string.Format("id='{0}'", Api.UnquoteSql(id))); // De coëfficiënt zoeken op basis van de ID.
if (foundRows.Length > 0) // In principe zal altijd voldaan zijn aan deze voorwaarde.
SqlCommandToModify.Parameters.AddWithValue("@coeff", foundRows[0]["coeff"]); // We voegen de SQL-parameter @coeff met de juiste waarde toe.
}
}
}
}