U bevindt zich nu op een technische pagina over de software Mercator. Deze pagina bevat specifieke informatie die bestemd is voor professionals van de software Mercator. Wenst u naar algemenere informatie over Mercator door te gaan?


   Deze vraag niet meer stellen

Objecten gebruikt in de parametreerbare schermen

0000002003     -      21-01-2020

Alle parametreerbare schermen van Mercator Aruba (informatiebestanden, boekhoudkundige documenten, documenten uit het commercieel beheer, CRM-acties ...) hebben dezelfde structuur en gebruiken dezelfde objectklassen. Al deze objecten behoren tot de namenruimte MercatorUi.MovableControls.

Ieder MovableControls-object wordt op een form geplaatst dat altijd de interface MercatorUi.MovableControls.Interfaces.IFormForMovableControls implementeert. Deze interface wordt als volgt gedefinieerd:

Zoom
public interface IFormForMovableControls
{
    string Name { get; set;}
    bool Saved { get; set;}
    DevComponents.DotNetBar.Validator.Highlighter Highlighter { get;}
    string Smodule { get;}
    Control.ControlCollection Controls { get; }
    DataTable DataSource { get;}
    Dictionary<string, Control> MovableControls { get; }
    BindingContext BindingContext { get;}

    void Close();
    void Show();
    void SuspendLayout();
    void ResumeLayout(bool b);
    List<Control> FindMovableControlsByType(Type t);
    List<Control> FindMovableControlsBySource(string source);
    DevComponents.DotNetBar.TabStrip TabStrip { get; }

    void AfterLeaveControl(Control control);
}

Het centrale element van deze definitie is het woordenboek Dictionary<string, Control> MovableControls. Bij de plaatsing van elk van deze controles (label, textBox, knop ...) op eender welk tabblad van dit scherm, zelfs in een rechthoek of in een groupbox, past deze controle binnen dit woordenboek. Dat laat toe om een controle makkelijk aan te passen, ongeacht de positie ervan binnen de boomstructuur van het scherm. De sleutel (key) string in dit woordenboek komt overeen met de zichtbare ID in de eigenschappen van het object in modus "schermparameterinstelling".

Voorbeeld:

Zoom
MercatorUi.MovableControls.MovableTextBox textBoxTel = (MercatorUi.MovableControls.MovableTextBox)sigForm.MovableControls["D37F122RS5"];

Het woordenboek gebruikt het algemene type Control. Als we weten dat dat overeenkomt met een textBox (zoals in dit voorbeeld), kunnen we een cast uitvoeren naar het specifieke type MercatorUi.MovableControls.MovableTextBox.

Een andere manier om een controle aan te passen, is via de broncode, m.a.w.: de naam van het veld in de hoofdtabel van het scherm in kwestie. In dat geval hoeft men enkel de methode FindMovableControlsBySource te gebruiken. Deze zal een lijst opleveren van controles die overeenstemmen met dat criterium. Want een enkel veld kan meerdere malen in eenzelfde scherm worden geïnstalleerd, of compleet niet voorkomen.

Voorbeeld:

Zoom
List<Control> list = sigForm.FindMovableControlsBySource("C_NOM");
if (list.Count > 0)
{
    MercatorUi.MovableControls.MovableTextBox textBox = (MercatorUi.MovableControls.MovableTextBox)list[0];
    ...
}

In dit voorbeeld behandelen we enkel de eerste gevonden controle.

Tot slot is het ook mogelijk om een controle te zoeken op basis van het type. In dat geval gebruiken we de methode FindMovableControlsByType, die eveneens een lijst van controles oplevert.

Voorbeeld:

Zoom
List<Control> list = sigForm.FindMovableControlsByType(typeof(MercatorUi.Forms.Sig.SigObjects.StockInterro));
if (list.Count > 0)
{
    MercatorUi.Forms.Sig.SigObjects.StockInterro stockInterro = (MercatorUi.Forms.Sig.SigObjects.StockInterro)list[0];
    ...
}

De interface voorziet ook dat ieder scherm waarin deze interface wordt geïmplementeerd, een DataTable DataSource-eigenschap heeft die de basistabel van dat scherm omvat. In het geval van een informatiebestand bevat deze eigenschap een tabel met slechts één DataRow, die het actieve record omvat. Bijgevolg kan men, bijvoorbeeld in een informatiebestand "Klanten", de naam van de klant als volgt openen: .DataTable.Rows[0]["C_NOM"].ToString().

Bijzonder geval voor de informatiebestanden: de schermen van het type MercatorUi.Forms.Sig.SigForm (Mercator-informatiebestanden) die de interface MercatorUi.MovableControls.Interfaces.IFormForMovableControls implementeren, omvatten daarenboven een read-only DataSourceRow-eigenschap die rechtstreeks verwijst naar .DataTable.Rows[0]. Hierdoor kan de notatie vereenvoudigd worden.

Broncode van DataSourceRow:

Zoom
public DataRow DataSourceRow
{
    get
    {
        if ((DataSource == null) || (DataSource.Rows.Count < 1))
            return null;
        else
            return DataSource.Rows[0];
    }
}


 

 

Wanneer men via de code in een controle terechtkomt, is het mogelijk om het form (venster) terug te vinden dat deze controle vertoont, ongeacht het tabblad, de rechthoek of de groupBox waar deze controle zich bevindt. Daartoe volstaat het de eigenschap Form van de controle te gebruiken. Dat is te wijten aan het feit dat iedere controle de interface MercatorUi.MovableControls.MovableControl implementeert, die deze eigenschap vereist. Via deze eigenschap heeft men toegang tot alles wat de interface MercatorUi.MovableControls.Interfaces.IFormForMovableControls voorstelt.


 

Ieder object dat kan worden gebruikt in de parametreerbare schermen heeft de volgende eigen types:

  • MovableButton
  • MovableCheckBox
  • Voor de rolmenu's:
    • MovableComboBox
    • MovableComboTree (bv.: de btw-codes)
  • MovableExpression
  • MovableGroupBox
  • MovableHtmlBox
  • MovableInlineBrowser
  • MovableLabel
  • MovableLine
  • MovablePictureBox
  • MovableRatingStars
  • MovableRectangle
  • Voor de textBoxes:
    • MovableTextBox
    • MovableMaskedTextBox (bv.: de OGM)
    • MovableDateTimeBox
    • MovableDoubleBox
    • MovableIntegerBox

U merkt dat het palet aan tools voor de parameterinstelling van schermen meer types dan verschillende tools omvat. Dat kan bijvoorbeeld verklaard worden door het feit dat het textBox-type met name varieert in functie van het gegevenstype. Al deze types bevinden zich in de namenruimte MercatorUi.MovableControls.

Het is mogelijk om per code het type van een controle te verkrijgen (hier in een klantencustomizer SigCli):

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

namespace SigCli
{
    public class Customizer : MercatorUi.ICustomizers.IFormLoadCustomizer
    {

        public void FormLoadCustomize(System.Windows.Forms.Form WindowsForm)
        {
            MercatorUi.MovableControls.Interfaces.IFormForMovableControls form = (MercatorUi.MovableControls.Interfaces.IFormForMovableControls)WindowsForm;
            List<Control> l = form.FindMovableControlsBySource("C_REGIME");
            if (l.Count > 0)
                Dialogs.Stop(l[0].GetType().ToString());
        }
    }
}