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 omschrijving toe te voegen in de categorietabel en vereist de toevoeging van een veld LIBLONG van het char type in de tabel CAT_STCK.
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 categories.
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.IStringUpdater, MercatorUi.ICustomizers.ISqlCommandUpdater
{
public void FormLoadCustomize(Form WindowsForm)
{
if (WindowsForm is MercatorUi.Forms.Param.ParamCategoriesForm) // We zitten in het scherm voor de parameterinstelling van de categorieën
{
MercatorUi.Forms.Param.ParamCategoriesForm paramCategoriesForm = (MercatorUi.Forms.Param.ParamCategoriesForm)WindowsForm;
foreach (MercatorUi.GridPro.DataGridViewXPro grid in paramCategoriesForm.Grids)
{
grid.Columns.Add("colLibLong", "Omschrijving");
grid.Columns["colLibLong"].Width = 400;
grid.Columns["colLibLong"].DataPropertyName = "libLong";
grid.Columns["colLibLong"].SortMode = DataGridViewColumnSortMode.NotSortable;
}
}
}
public string StringUpdate(string StringToModify)
{
if (StringToModify.Contains("CAT_STCK"))
{
StringToModify = StringToModify.Replace("id,nom", "id,nom,libLong");
}
return StringToModify;
}
public void SqlCommandUpdate(System.Data.SqlClient.SqlCommand SqlCommandToModify, Form WindowsForm) // Wijziging van de opdracht voor gegevensopslag
{
if (WindowsForm is MercatorUi.Forms.Param.ParamCategoriesForm) // We zitten wel degelijk in het scherm voor de parameterinstelling van de categorieën
{
if (SqlCommandToModify.Parameters.Contains("@type"))
{
if (!SqlCommandToModify.CommandText.Contains("libLong")) // 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(",nom=@nom", ",nom=@nom,libLong=@libLong");
SqlCommandToModify.CommandText = SqlCommandToModify.CommandText.Replace("id,nom,type)", "id,nom,type,libLong)");
SqlCommandToModify.CommandText = SqlCommandToModify.CommandText.Replace(",@type)", ",@type,@libLong)");
}
MercatorUi.Forms.Param.ParamCategoriesForm paramCategoriesForm = (MercatorUi.Forms.Param.ParamCategoriesForm)WindowsForm;
string id = SqlCommandToModify.Parameters["@id"].Value.ToString(); // We moeten de ID van de rij kennen om de omschrijving te vinden die bij deze rij hoort.
string type = SqlCommandToModify.Parameters["@type"].Value.ToString();
DataTable dt = (DataTable)paramCategoriesForm.Grids[(Int32.Parse(type) - 1)].DataSource; // Achter het rooster bevindt zich in feite een DataTable
DataRow[] foundRows = dt.Select(string.Format("id='{0}'", Api.UnquoteSql(id))); // De omschrijving zoeken op basis van de ID
if (foundRows.Length > 0) // In principe zal altijd voldaan zijn aan deze voorwaarde
SqlCommandToModify.Parameters.AddWithValue("@libLong", foundRows[0]["libLong"]); // We voegen de SQL-parameter @libLong met de juiste waarde toe
}
}
}
}
}