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

Interactions entre l'environnement de Mercator et l'environnement d'un assembly

0000001368     -      16/05/2011
Obsolète

Par défaut, les environnements de Mercator et d'un assembly sont séparés. Ceci indique qu'un assembly exécuté à partir de Mercator ne pourrait pas connaître une variable de Mercator et pourrait donc encore moins exécuter une procédure contenue dans Mercator. La communication entre ces deux espaces serait donc réduite à une communication trop simple :

  • Mercator passe de paramètres à l'assembly
  • Mercator reçoit en retour une valeur calculée par l'assembly


Afin de dépasser cette limite, Mercator a été doté d'une notion de tunnel.

Le principe est simple : lors de l'instanciation d'une classe managée, nous allons lui passer une classe instanciée à partir de FoxPro. Il s'agit de la classe FoxTunnel, qui existe dans Mercator. Cette classe permet notamment :

  • Eval : l'évaluation d'une variable ou quelconque expression xbase
  • DoCmd : exécution de n'importe quelle commande Xbase (commençant par DO par exemple)
  • AssignVar : l'assignation d'une valeur à un variable
  • AssignField : l'assignation d'une valeur à un champ dans une table
  • CursorToXml : la traduction en chaîne XML d'un alias local

Une classe "symétrique" a été créée dans l'environnement .Net et permet, par réflexion, d'exécuter ces mêmes méthodes. Si l'espace mémoire est commun, l'exécution de ces méthodes se fera bien dans l'environnement de Mercator à partir de l'environnement de l'assembly. En .Net, cette classe s'appelle "TunnelObject", est contenue dans l'espace de nom "MercatorTunnel" de l'assembly "MercatorTunnel.dll" présent dans le répertoire principal de Mercator ou dans le répertoire local si les composants de Mercator sont installés localement.

En C#, il suffit donc de déclarer dans l'entête : using MercatorTunnel; et d'ajouter une référence vers MercatorTunnel.dll.

Dans le constructeur de votre classe, il convient de prévoir un paramètre de type "Tunnel" qui alimente une propriété de votre classe qui sera du même type.

private Tunnel TunnelObject;

public Class1( object FoxObject)
{
     TunnelObject = new Tunnel (FoxObject);
}

La classe"Tunnel" contient notamment les méthodes suivantes :

  • EvalMethod : évaluation d'une méthode de l'objet FoxTunnel passé par FoxPro
  • EvalString : implémentation de la méthode EvalMethod ci-dessus pour une chaîne de caractères
  • EvalInt : implémentation de la méthode EvalMethod ci-dessus pour un numérique de type entier
  • EvalDouble : implémentation de la méthode EvalMethod ci-dessus pour un numérique de type double
  • EvalBool : implémentation de la méthode EvalMethod ci-dessus pour un boolean
  • EvalDateTime : implémentation de la méthode EvalMethod ci-dessus pour une expression renvoyant une date ou un dateTime
  • EvalProp : évaluation d'une propriété de l'objet FoxTunnel passé par FoxPro
  • DataSetFromXml : conversion d'un ou plusieurs alias de Mercator en objet dataSet de .Net
  • DataTableFromXml : conversion d'un alias de Mercator en objet dataTable de .Net

De surcroît, les propriétés suivantes sont disponibles :

  • pict_base = masque devise principale au format Iformat accepté par ToString()
  • pict_euro = masque devise secondaire au format Iformat accepté par ToString()
  • pict_p = masque sur poids au format Iformat accepté par ToString()
  • pict_q = masque sur quantités au format Iformat accepté par ToString()
  • pict_cpta = masque devise de base pour la comptabilité au format Iformat accepté par ToString()
  • _screen = System.Windows.Forms.IWin32Window correspondant au fond d'écran (_screeen) de Mercator

Exemple en C# d'utilisation de ces différentes méthodes et propriétés :

DataTable dt = TunnelObject.DataTableFromXml( "lignes_v_tmp" );
Double ret = Convert .ToDouble(dt.Compute( "sum(tot_net_ht)" , "" ));
String devise = TunnelObject.EvalString( "xdev(pieds_v_tmp.id_dev)" );
MessageBox .Show( "Le total net du document est " + ret.ToString(TunnelObject.pict_base).TrimStart() + " " + devise);

Exemple d'instanciation de la classe FoxTunnel dans un fichier MAI :

Typiquement, la zone "module" de l'éditeur de fichier MAI contiendra :

local ox
ox=createobject('FoxTunnel')

et la zone située à droite du combo de sélection de la classe contiendra :

m.ox



Vous consultez une page relative à une version de Mercator qui n'est plus commercialisée ni supportée.

Mercator est une application .net qui utilise une base de données SQL Server. Les informations sur cette page ne correspondent plus à ces caractéristiques.