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

Ecrans personnalisables : ajouter des objets personnalisés

0000002042     -      31/07/2014

Mercator peut prendre en compte des objets personnalisés, qui seront ajoutables dans les écrans personnalisables au même titre que les objets (MovableObjects) standard de Mercator. Pour cela, il suffit que la classe que l'on souhaite utiliser en tant qu'objet personnalisé implémente l'interface MercatorUi.MovableControls.Interfaces.IMovableControl.

Ci-dessous est repris un exemple de code qui surclasse un UserControl et qui implémente cette interface.

Zoom
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace TestMovableObject
{
    public partial class TestUserControl : UserControl, MercatorUi.MovableControls.Interfaces.IMovableControl
    {

        public TestUserControl()
        {
            InitializeComponent();
        }

#region propriétés requises par IMovableControl

        // la Form qui héberge ce MovableObject
        private MercatorUi.MovableControls.Interfaces.IFormForMovableControls _form = null;
        public MercatorUi.MovableControls.Interfaces.IFormForMovableControls Form { get { return _form; } set { if (_form == null) _form = value; } }


        // indique que le contrôle est à la disposition de l'utilisateur : tous les évènements du style "valueChanged" sont causés par l'utilisateur, pas par Mercator
        private bool _userMode = false;
        public bool UserMode { get { return _userMode; } set { _userMode = value; } }

        internal bool afterDone = false;
        public bool AfterDone { get { return afterDone; } set { afterDone = value; } }
        
        private List<MercatorUi.MovableControls.MovableExpression> _expressionsToRefresh = null;
        public List<MercatorUi.MovableControls.MovableExpression> ExpressionsToRefresh { get { return _expressionsToRefresh; } set { _expressionsToRefresh = value; } }

#endregion


#region méthodes requises par IMovableControl

        public void OnAfterRead(EventArgs e)
        {
            if (Form is MercatorUi.Forms.Sig.SigForm)
            {
                MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)Form;
                label1.Text = string.Format("Vous êtes dans le signalétique {0} et la fiche en cours est \"{1}\" !", sigForm.Sig.Module, sigForm.DataSourceRow[sigForm.Sig.Letter1 + "_ID"]);
            }
        }

        public void OnBeforeWrite(EventArgs e)
        {

        }

        public void OnAfterWrite(EventArgs e)
        {
            
        }

#endregion

        private void button1_Click(object sender, EventArgs e)
        {
            if (Form is MercatorUi.Forms.Sig.SigForm)
            {
                MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)Form;
                if (sigForm.Sig.Module == MercatorUi.Sig._SigEnum.STOCK)
                    MercatorUi.Dialogs.Stop(sigForm.DataSourceRow["S_MODELE"].ToString());
                else
                    MercatorUi.Dialogs.Stop(sigForm.DataSourceRow[sigForm.Sig.Letter1 + "_NOM"].ToString());
            }
        }
    }
}

(Le projet contenant ce code est disponible dans le fichier ZIP. Il doit référencer MercatorUi.dll et MercatorComponent.dll)

La DLL produite doit être ensuite placée dans le répertoire principal de Mercator (ou dans le répertoire local si les ressources sont installées localement). Enfin, cette DLL doit être tirée (drag & drop) dans l'écran accessible via "Outils / Paramètres / Custom Movable Objects". (Si la DLL contient plusieurs classes, la classe souhaitée peut être sélectionnée via le déroulant)

Une fois cette DLL et cette classe inscrites dans le paramétrage de Mercator, elles s'ajoutent dans la liste des objets disponibles. Elles sont mentionnées sous la forme DLL (sans extension) : nom de classe.

custom_object

 


 

Le code repris ci-dessus est à considérer comme un point de départ permettant de réaliser un objet personnalisé. Il ne présente aucune ambition fonctionnelle. Son seul objectif est de montrer comment la mécanique fonctionne. Il a été conçu pour être ajouté dans les signalétiques (SigForm).

  • La méthode OnAfterRead montre comment exécuter un code lors du passage de fiche en fiche, juste après que Mercator ait lu les données de l'enregistrement en cours. Nous l'utilisons pour afficher dans un label un message indiquant notamment le nom du signalétique en cours ainsi que l'identifiant de la fiche.
  • Nous avons ajouté un bouton qui présente une boîte de dialogue montrant le nom de la fiche en cours.


A télécharger : 0000002042.zip (11 Kb - 24/04/2013)