2017-04-13 2 views
0

J'ai un addin de outlook qui gère certains types d'emails envoyés. Pour certains types d'e-mail, les utilisateurs doivent remplir un formulaire avec quelques informations, puis exporter l'e-mail sous forme de MSG vers un arborescence du système de fichiersComplément Outlook VSTO - Gestionnaire à envoyer Les éléments ne fonctionnent pas toujours

J'ai un ruban avec un bouton qui définit un indicateur (userproperty) sur l'e-mail envoyé de sorte que le Addin sait quel email doit être sauvé:

Private Sub Button1_Click(sender As Object, e As RibbonControlEventArgs) Handles Button1.Click 
    Dim oProperties As Outlook.UserProperties 
    Dim oProperty As Outlook.UserProperty 


    oMail = Globals.ThisAddIn.Application.ActiveInspector.CurrentItem 


    If Not oMail Is Nothing Then 

     oProperties = oMail.UserProperties 
     oProperty = oProperties.Add("SALVARAPIGES", Microsoft.Office.Interop.Outlook.OlUserPropertyType.olYesNo) 
     oProperty.Value = True 
     oMail.Save() 
     oMail.Send() 
    Else 
     MsgBox("Err") 
     Exit Sub 
    End If 
End Sub 

au démarrage Addin, j'ai (extrait):

Private Sub ThisAddIn_Startup() Handles Me.Startup 
    Dim sentItems As Outlook.Items 
    Dim sentFolder As Outlook.Folder 
    Dim paisapiges As String 
    Dim aux As String() 
    Dim ns As Microsoft.Office.Interop.Outlook.NameSpace 

    apigesIsLoaded = True 

    'adiciono um trigger para que sempre que for enviado um email e for do tipo SALVARAPIGES, ele fará o tratamento de salvar o email. 
    sentFolder = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail) 
    sentItems = sentFolder.Items 
    AddHandler sentItems.ItemAdd, AddressOf itemadd 

et ma routine ItemAdd:

Sub itemadd(ByVal NewEmailItem As Object) 
    Dim oProperties As Outlook.UserProperties 
    Dim salvaApiges As Boolean 
    Dim sentMessageItem As Outlook.MailItem = CType(NewEmailItem, Outlook.MailItem) 
    Dim mainForm As New formSalvarApiges() 

    salvaApiges = False 
    If Not sentMessageItem Is Nothing Then 
     oProperties = sentMessageItem.UserProperties 
     For Each pr As Outlook.UserProperty In oProperties 
      If pr.Name = "SALVARAPIGES" Then 
       salvaApiges = True 
       Exit For 
      End If 
     Next 

     If salvaApiges Then 
      mainForm.txtAssunto.Text = sentMessageItem.Subject 
      mainForm.sAction = "Acao01" 
      mainForm.sEntryId = sentMessageItem.EntryID 
      mainForm.ShowDialog() 
      mainForm.Close() 
     End If 
    End If 
End Sub 

comme vous pouvez le voir chaque fois qu'un email a cette propriété d'utilisateur "SALVARAPIGES", il doit être enregistré dans MSG dans une arborescence de répertoires. Mais la moitié des utilisateurs disent que cela ne fonctionne pas (LE FORMULAIRE N'EST PAS POPPED), mais chaque fois que je le teste, ça fonctionne. Je suis très nouveau à VSTO et tous les concepts derrière cela ... quelqu'un peut-il me pointer la direction?

J'ai essayé d'utiliser la méthode NameSpace.SendAndReceive, mais ils continuent de se plaindre.

merci d'avance!

Répondre

1

L'objet qui déclenche les événements (sentItems) est déclaré en tant que variable locale. Dès que GC entre en jeu, il est libéré et plus aucun événement n'est levé. Déclarez la variable au niveau de la classe pour vous assurer qu'elle reste en vie.

1

Vous devez déclarer l'objet source au niveau de la classe pour l'empêcher de glisser par le garbage collector:

Dim sentItems As Outlook.Items 

Private Sub ThisAddIn_Startup() Handles Me.Startup 
Dim sentFolder As Outlook.Folder 
Dim paisapiges As String 
Dim aux As String() 
Dim ns As Microsoft.Office.Interop.Outlook.NameSpace 

apigesIsLoaded = True 

'adiciono um trigger para que sempre que for enviado um email e for do tipo SALVARAPIGES, ele fará o tratamento de salvar o email. 
sentFolder = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail) 
sentItems = sentFolder.Items 
AddHandler sentItems.ItemAdd, AddressOf itemadd 
+0

merci pour votre réponse plus complète, mais la première réponse est encore assez pour résoudre le problème , donc je vais lui donner le crédit. Mais merci beaucoup! – fferrandini