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

Style de programmation : utilisation de la classe Main de MercatorUi

0000001924     -      08/11/2019

Avant la version Mercator Aruba, on utilisait Xdotnet ou XDotnetFromMai pour instancier une classe contenue dans un assembly. Cela posait l'inconvénient que chaque instanciation de cette classe est exécutée dans un AppDomain séparé. En conséquence, il n'était pas possible de disposer de variables globales (statiques) communes à différentes instances de ces classes.

Avec Mercator Aruba, il devient possible de travailler dans un même et seul AppDomain et donc de profiter d'un grand nombre de variables globales correctement initialisées par Mercator. Cela se fait par l'intermédiaire de la classe MercatorUi.Main qui est initialisée au démarrage de Mercator.

mainglobals

La plupart des variables statiques disponibles portent un nom intelligible qui n'appelle à aucun commentaire. Certaines sont commentées ci-dessous :

  • CurrentUser : DataRow contenant tous les champs de table USER pour l'utilisateur actif
    Exemple : nom de l'utilisateur : MercatorUi.Globals.CurrentUser["NOM"].ToString()
  • ExternalGen : DataTable contenant le plan comptable d'une comptabilité autre que Mercator
  • ExternalAna : tableau (array) de 9 DataTables dont chaque élément reprend le plan analytique correspondant (contenant les comptes analytiques d'une comptabilité autre que Mercator). Si le plan n'est pas défini, l'élément correspondant dans le tableau est null. Le plan n° 1 correspond à l'élément n° 0 du tableau, le plan n° 2 correspond à l'élément n° 1 du tableau, ...
  • ExternalObjects : dictionnaire <string, object> contenant les instances de classes chargées par InstanciateExternalClass
  • iw : IWin32Window à passer comme paramètre à Show() ou ShowDialog()
  • Main : pointeur vers la classe MercatorUi.Main
  • ParamIdentif : dictionnaire <string,string> contenant toutes les entrées de "Outils / Identification"
  • ParamPos : dictionnaire <string,string> contenant toutes les entrées de ParamPos.dbf

  • Exemple : port du tiroir : MercatorUi.Globals.ParamPos["PORT_TIR"]
  • Params  : dictionnaire <string,string> contenant toutes les entrées de la table OPTIONS 
    Exemple : option "Reliquats sur ventes" : MercatorUi.Globals.ParamPos["X_BO_V"]
  • TunnelObject : objet tunnel correctement instancié par Mercator.

Comme indiqué ci-dessus, Main.Globals contient un Tunnel correctement initialisé par Mercator. Cela dispense donc de devoir activer cette mécanique pour chaque assembly. Cela offre une meilleure gestion de la mémoire et simplifie de façon importante la mise en place d'assemblies.

Les variables globales sont initialisées lors du démarrage de Mercator. Leur valeur est ensuite maintenue constamment à jour par Mercator. Par exemple :

  • lors d'un changement d'utilisateur : CurrentUser, Langue,  DateDMY, UserId, ... sont bien mis à jour
  • après l'édition des options : les valeurs du dictionnaire Params sont adaptées
  • après l'édition du matériel caisse : les valeurs du dictionnaire ParamPos sont adaptées
  • ...

Remarques :

  • Il est nécessaire d'ajouter une référence vers MercatorUi.dll dans votre projet.
  • Si votre classe n'est pas instanciée par Mercator (projet totalement indépendant de Mercator), ces variables globales disposeront simplement d'une valeur par défaut, qui ne sera bien entendu jamais mise à jour. (En conséquence, ces variables globales ne sont donc pas utilisables par exemple dans un projet ASP.net).