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

Widgets dans le fond d'écran de Mercator

0000002345     -      30/08/2021

Mercator (version 8.5 ou ultérieure) permet de placer dans son fond d'écran des composants écrits en .net, appelés widgets. Ces composants doivent surclasser MercatorUi.Widgets.WidgetBaseControl. Un assembly contenant un ou plusieurs widgets doit être créé en dehors de Mercator (Visual Studio). Ensuite, le widget est placé à l'endroit souhaité du fond d'écran par un simple "drag & drop" de l'assembly (dll).

Un WidgetBaseControl est en fait un UserControl. Il contient en sus ces propriétés :

  • bool Sizable : la taille du contrôle peut-elle être modifiée par l'utilisateur
  • bool Closable : le contrôle présente-il une case de fermeture permettant de le fermer
  • bool Fill : le contrôle doit-il remplir tout l'espace disponible dans le fond d'écran et s'adapter automatiquement aux changements de taille de celui-ci
  • bool SaveSize : la dimension du widget doit-elle être sauvegardée lors de la fermeture de la session (sinon, le contrôle reprend la dimension prévue dans son code-source)

et ces évènements :

  • EventHandler Shown : lorsque le widget est totalement instancié et correctement placé dans le fond d'écran de Mercator
  • DestroyEventHandler Destroy : lorsque le widget va être fermé, soit parce que l'utilisateur a cliqué dans la case de fermeture, soit parce que la session de l'utilisateur est terminée. Dans le premier cas, on peut mettre à true la propriété Cancel de l'eventargs afin d'empêcher cette fermeture.

La présence et la position des widgets est stockée dans le profil de l'utilisateur. L'onglet interface de "Outils / Utilisateurs" permet de créer un fichier *.mwid contenant le paramétrage de ces widgets pour l'utilisateur dont on édite la fiche. Ce fichier peut ensuite être réouvert dans d'autres profils utilisateurs. Cela permet de dupliquer rapidement une configuration de widgets.

Dans ce même onglet, on trouve aussi une case à cocher "Bloquer modification" qui permet de bloquer les widgets :

  • interdiction d'ajouter de nouveaux widgets
  • interdiction de fermer des widgets
  • interdiction de déplacer des widgets.

Il nous paraît peu réaliste de cocher cette case dans un environnement où un même utilisateur utilise plusieurs définitions d'écran. En effet, il surviendra rapidement une situation où un widget sera rendu invisible de par le changement de taille de l'écran et que son déplacement sera dès lors impossible. (Si on souhaite simplement empêcher la fermeture, il faut gérer cela avec la propriété Cancel du DestroyEventArgs.)

Optionnellement, un widget peut implémenter une ou plusieurs de ces interfaces, qui vont imposer la présence d'une méthode void RefreshContent() :

  • Widgets.Interfaces.IRefreshActions : la méthode RefreshContent du widget sera automatiquemenent appelée après l'enregistrement d'une action
  • Widgets.Interfaces.IRefreshBillings : la méthode RefreshContent du widget sera automatiquemenent appelée après l'enregistrement d'un document de la gestion commerciale
  • Widgets.Interfaces.IRefreshBookings : la méthode RefreshContent du widget sera automatiquemenent appelée après l'enregistrement d'une écriture comptable
  • Widgets.Interfaces.IRefreshInventories : la méthode RefreshContent du widget sera automatiquemenent appelée après l'enregistrement d'un inventaire
  • Widgets.Interfaces.IRefreshTransfers : la méthode RefreshContent du widget sera automatiquemenent appelée après l'enregistrement d'un transfert de dépôt

Un widget doit être compilé pour le framework .net 4.0. Il a besoin des références vers MercatorTunnel.dll, MercatorUi.dll et MercatorComponents.dll, qui se trouvent dans le répertoire principal de Mercator ou dans le répertoire des resources locales.

Si on souhaite créer un widget à partir d'un nouveau projet, voici comment procéder, dans Visual Studio :

  • créer un nouveau projet de type "Bibliothèque de classes"
  • supprimer le fichier Class1.cs qui est automatiquement présent dans le projet
  • ajouter les références indiquées ci-dessus
  • sur le projet, via clic-droit, ajouter un nouvel élément et choisir "Contrôle utilisateur"
  • éditer le code de ce user control, et y remplacer sur la ligne commençant par "public partial class", UserControl par MercatorUi.Widgets.WidgetBaseControl 

Quelques exemples :

Tous ces exemples sont fournis avec les sources complètes compatibles Visual Studio. La DLL se trouvant dans \Bin\Debug est directement exploitable.