Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Objets utilisés dans les écrans paramétrables

0000002003     -      21/01/2020

Tous les écrans paramétrables de Mercator Aruba (signalétiques, écritures comptables, documents de la gestion commerciale, actions du CRM, ...) répondent à la même structure et utilisent les mêmes classes d'objets. Tous ces objets appartiennent à l'espace de noms MercatorUi.MovableControls.

Chaque objet MovableControls est posé sur une form qui implémente toujours l'interface MercatorUi.MovableControls.Interfaces.IFormForMovableControls. Cette interface se définit comme suit :

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);
}

L'élément central de cette définition est le dictionnaire Dictionary<string, Control> MovableControls. Lors du placement de chacun des contrôles (label, textBox, bouton, ...) sur n'importe quel onglet de cet écran, même dans un rectangle ou dans un groupbox, ce contrôle s'inscrit dans ce dictionnaire. Cela permettra d'adresser facilement un contrôle, quelque soit sa position dans l'arborescence de l'écran. Dans ce dictionnaire, la clé (key) string correspond à l'ID visible dans les propriétés de l'objet en mode "paramétrage d'écrans".

Exemple :

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

Le dictionnaire utilise le type général Control. Si nous savons, comme dans cet exemple, que cela correspond à un textBox, nous pouvons effectuer un cast vers le type précis MercatorUi.MovableControls.MovableTextBox.

Une autre façon d'adresser un contrôle est de le faire par sa source, çàd le nom du champ dans la table principale de l'écran en question. il suffit alors d'utiliser la méthode FindMovableControlsBySource. Celle-ci va renvoyer une liste de contrôles correspondant à ce critère. En effet, un même champ peut être installé plusieurs fois dans le même écran ou être totalement absent.

Exemple :

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

Dans cet exemple, on traite uniquement le premier contrôle trouvé.

Enfin, il est aussi possible de rechercher un contrôle par son type. Dans ce cas, on utilise la méthode FindMovableControlsByType, qui renvoie aussi une liste de contrôles.

Exemple :

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];
    ...
}

L'interface prévoit aussi que chaque écran l'implémentant présente une propriété DataTable DataSource qui contient la table de base de cet écran. Dans le cas d'un signalétique, cette propriété contient une table contenant une seule DataRow, contenant le record actif. Dès lors, par exemple, dans un signalétique clients, on peut accéder au nom du client comme suit : .DataTable.Rows[0]["C_NOM"].ToString() .

Cas particulier pour les signalétiques : les écrans de type MercatorUi.Forms.Sig.SigForm (signalétiques de Mercator), qui implémentent l'interface MercatorUi.MovableControls.Interfaces.IFormForMovableControls, présentent en plus une propriété DataSourceRow, read-only, qui pointe directement vers .DataTable.Rows[0]. Cela permet d'alléger la notation.

Code source de DataSourceRow :

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


 

 

Lorsque, par code, on se trouve dans un contrôle, il est possible de retrouver la form (fenêtre) qui montre ce contrôle, quelque soit l'onglet, le rectangle ou le groupBox qui héberge ce contrôle. Pour cela, il suffit d'exploiter la propriété Form du contrôle. Cela est dû au fait que chaque contrôle implémente l'interface MercatorUi.MovableControls.MovableControl qui exige cette propriété. A partir de cette propriété, on a accès à tout ce que propose l'interface MercatorUi.MovableControls.Interfaces.IFormForMovableControls.


 

Les types propres à chaque objet utilisable dans les écrans paramétrables sont les suivants :

  • MovableButton
  • MovableCheckBox
  • Pour les déroulants :
    • MovableComboBox
    • MovableComboTree (ex : les codes TVA)
  • MovableExpression
  • MovableGroupBox
  • MovableHtmlBox
  • MovableInlineBrowser
  • MovableLabel
  • MovableLine
  • MovablePictureBox
  • MovableRatingStars
  • MovableRectangle
  • Pour les textBoxes :
    • MovableTextBox
    • MovableMaskedTextBox (ex : les VCS)
    • MovableDateTimeBox
    • MovableDoubleBox
    • MovableIntegerBox

Comme vous le constatez, il y a plus de types que d'outils différents dans la palette des outils du paramétrage d'écrans. Cela se justifie, par exemple, par le fait que le type de textBox, varie notamment en fonction du type de données. Tous ces types se trouvent dans l'espace de noms MercatorUi.MovableControls.

Il est possible d'obtenir, par code, le type d'un contrôle (ici dans un customizer clients 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());
        }
    }
}