Changer les forms par défaut dans Outlook avec VSTO

Il est possible avec VSTO de surcharger les formulaires par défauts d'Outlook, comme le formulaire d'ajout d'un contact par exemple. Pour cela il y a deux méthodes, l'un avec l'assistant (via Form Region) de Visual Studio, l'autre avec du code en interceptant l'ouverture de celle-ci. Dans le premier cas on surcharge ou on remplace définitivement un formulaire, mais si l'on veut par exemple ajouter un second répertoire contact dans Outlook et qu'en fonction du répertoire, afficher un formulaire différent, comme le formulaire par défaut pour le premier répertoire et un formulaire personnalisé sur le second, et bien avec la première méthode ce n'est pas possible.

Vient alors la seconde méthode qui consiste à surcharger le contrôleur d'instanciation (en fait une liste) des formulaires, nommé Inspectors sur l'objet d'application. Pour information un Inspector est un modèle de formulaire affichable dans Outlook pour la gestion d'un type d'objet précis (Appointement, Contact, ...) Quand, par exemple, on ajoute un nouveau contact, un nouvel Inspector est créé, dans le cas d'un contact c'est l'Inspector de type ContactItem qui est instancié. Si l'on veut donc substituer ce formulaire par notre propre WinForm, il faut d'abord s'abonner sur l'événement NewInspector du contrôleur pour qu'il nous informe de la création d'un nouvel Inspector.

public class ThisAddIn
{
  private Outlook.Inspectors m_oInspectors = null;

  private void ThisAddIn_Startup(object sender, System.EventArgs e)
  {
    this.m_oInspectors = this.Application.Inspectors;
    this.m_oInspectors.NewInspector += new Outlook.InspectorsEvents_NewInspectorEventHandler(this.Inspectors_NewInspector);
  }

  private void Inspectors_NewInspector(Outlook.Inspector p_oInspector)
  {
  }
}

Une fois abonné on peut donc intercepter les ouvertures et les empêcher en s'abonnant sur l'événement Open du nouvel Inspector. Dans cet événement on empêchera son ouverture avec la propriété Cancel de l'argument et ensuite on ouvrira notre propre WinForm.

private void Inspectors_NewInspector(Outlook.Inspector p_oInspector)
{
  // On vérifie que c'est le bon objet que l'on veut intercepter 
  if ( oItem is Outlook.ContactItem )
  {
    // On s'abonne pour pouvoir empêcher l'ouverture
    ((Outlook.ContactItem)oItem).Open += new Microsoft.Office.Interop.Outlook.ItemEvents_10_OpenEventHandler(InspectorItem_Open);

    // Affichage de notre propore WinForm
    using ( MaForm oForm = new MaForm )
    {
      oForm.ShowModal();
    }
  }
}

// Fonction qui va empêcher l'Inspector Contact de s'ouvrir
private void InspectorItem_Open(ref bool Cancel)
{
  Cancel = true;
}

Nous pouvons aussi effectuer cette opération seulement sur certaine actions, comme pour l'ajout d'un contact sur un répertoire que nous avons créé. Pour cela il suffit de vérifier si nous somme bien sur le bon répertoire et de traiter l'action si c'est le cas.

private void Inspectors_NewInspector(Outlook.Inspector p_oInspector)
{
  // On vérifie que c'est le bon objet que l'on veut intercepter 
  // Si c'est le bon on vérifie le nom du répertoire, si il est bon on substitue, sinon on laisse le formulaire par défaut
  if ( oItem is Outlook.ContactItem && this.Application.ActiveExplorer().CurrentFolder.Name == "Mon répertoire contact" )
  {
    // On s'abonne pour pouvoir empêcher l'ouverture
    ((Outlook.ContactItem)oItem).Open += new Microsoft.Office.Interop.Outlook.ItemEvents_10_OpenEventHandler(InspectorItem_Open);

    // Affichage de notre propore WinForm
    using ( MaForm oForm = new MaForm )
    {
      oForm.ShowModal();
    }
  }
}

// Fonction qui va empêcher l'Inspector Contact de s'ouvrir
private void InspectorItem_Open(ref bool Cancel)
{
  Cancel = true;
}

Voilà comment gérer de façon précise l'ouverture des formulaires sous Outlook.


Tags: , , , ,
Catégories: C# | VSTO

0 Commentaires
Actions: Permalink | Comment RSSRSS comment feed

Billets liés

Ajouter un commentaire


 

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Aperçu immédiat

novembre 21. 2008 04:24