none
Problème d'appel de méthode d'extension dans thisAddin_startup RRS feed

  • Question

  • Bonjour,

    Je développe un complément VSTO pour Outlook dans lequel j'ai créé une méthode d'extension pour mailItem. Cette méthode de tri fonctionne très bien quand je l'appelle de mon ruban personnalisé ou du menu contextuel.

    Imports System.Runtime.CompilerServices
    
    Module MailFct    
        <Extension()>    
        Public Sub CustTri(ByVal UnMail As Outlook.MailItem)

    J'ai voulu automatiser le processus et donc appeler ma fonction à l'évènement AddItem de mon répertoire de réception.

    J'ai donc ajouté dans la classe ThisAddIn :

    Public Class ThisAddin    
    
        Dim WithEvents ReceivedItems As Outlook.Items       
    
        Private Sub ThisAddIn_Startup() Handles Me.Startup        
    
            ReceivedItems = Globals.ThisAddIn.Application.GetNamespace("MAPI").GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox).Items
    
        End Sub
    
        Private Sub ReceivedItems_ItemAdd(ByVal Item As Object) Handles ReceivedItems.ItemAdd
            If TypeOf (Item) Is Outlook.MailItem Then
                Item.CustTri()
            End If
        End Sub
    End Class

    Or, au déclenchement de l'évènement, j'ai une erreur m'indiquant que ma méthode d'extension n'existe pas. Je suppose qu'au moment ou j'attache mon handle à l'évènement, ma méthode n'est pas encore créée.

    Quelqu'un aurait-il la solution à mon problème ? (autre que remplacer ma méthode par une simple procédure).

    J'ai essayé d'attacher mon handle au moment de la création de mon ruban (Public Sub Ribbon_Load) mais ce n'est pas mieux.

    Merci pour votre aide.

    Luc.

    vendredi 7 juillet 2017 07:03

Réponses

  • La solution m'a été donnée par Edward, en fait il faut effectuer un cast explicit sur une variable MailItem :

            If TypeOf (Item) Is Outlook.MailItem Then
                Dim MailSel As Outlook.MailItem = Item
                MailSel.CustTri()
            End If

    Pas évident quand le message d'erreur parle bien d'un membre de MailItem....

    • Marqué comme réponse Luc69 mardi 18 juillet 2017 12:51
    mardi 18 juillet 2017 12:51

Toutes les réponses

  • Bonjour Luc,

    Or, au déclenchement de l'évènement, j'ai une erreur m'indiquant que ma méthode d'extension n'existe pas.

    Est-ce que le module MailFct où se trouve votre méthode d'extension est différent du module qui contient votre classe? Si c’est bien le cas, avez-vous importé MailFct? Voici l’extrait pertinent de la documentation:

    Typically, the module in which an extension method is defined is not the same module as the one in which it is called. Instead, the module that contains the extension method is imported, if it needs to be, to bring it into scope.

    Cordialement,
    Dimitar


    samedi 8 juillet 2017 04:57
    Modérateur
  • Bonjour Dimitar,

    A priori cela ne provient pas de là. Quand j'ai testé la gestion de l'évènement au chargement de mon ruban, j'ai également l'erreur, alors que la même méthode est utilisée à d'autres moment dans le ruban (donc dans le même module) et qu'elle fonctionn très bien.

    L'erreur exacte est :

    System.MissingMemberException : 'Le membre public 'CustTri' du type 'MailItem' est introuvable.

    Merci pour ton aide.

    Luc

    mardi 11 juillet 2017 07:19
  • La solution m'a été donnée par Edward, en fait il faut effectuer un cast explicit sur une variable MailItem :

            If TypeOf (Item) Is Outlook.MailItem Then
                Dim MailSel As Outlook.MailItem = Item
                MailSel.CustTri()
            End If

    Pas évident quand le message d'erreur parle bien d'un membre de MailItem....

    • Marqué comme réponse Luc69 mardi 18 juillet 2017 12:51
    mardi 18 juillet 2017 12:51