2017-09-28 3 views
0

Je travaille sur un Outlook AddIn avec un ruban personnalisé. L'utilisateur ouvre un élément de courrier en mode Lecture et clique sur un bouton du ruban et le programme déplace l'e-mail vers un dossier (pas la boîte aux lettres personnelle de l'utilisateur, mais plutôt une boîte aux lettres différente à laquelle l'utilisateur a accès).C# VSTO Erreur Outlook "Un objet n'a pas pu être trouvé"

Lorsque le programme est exécuté, il fonctionne la première fois, mais la deuxième fois que l'utilisateur l'exécute, il génère une erreur:

"The attempted operation failed. An object could not be found."

Voici le code correspondant:

(en ThisAddIn .cs)

public partial class ThisAddIn 
    { 
     public Outlook.Application OutlookApplication; 

     void ThisAddIn_Startup(object sender, System.EventArgs e) 
     { 
      OutlookApplication = this.Application; 
     } 
(etc) 

(en Ribbon1.cs, dans une méthode qui est appelée à Button_Click)

Outlook.Inspector inspector = Globals.ThisAddIn.OutlookApplication.ActiveInspector(); 
Outlook.MailItem item = inspector.CurrentItem as Outlook.MailItem; 
Outlook.Stores stores = null; 
Outlook.Folder destinationMailboxFolderInbox = null; 

et

try 
{ 
    // Set the mailbox move location 
    stores = Globals.ThisAddIn.OutlookApplication.GetNamespace("MAPI").Stores; 

    foreach (Outlook.Store store in stores) 
    { 
     attachmentsFoundTotal++; 
     if (store.DisplayName == destinationMailbox) 
     { 
      destinationMailboxFolderInbox = (Outlook.Folder)store.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox); 
      try 
      { 
       // the code breaks on this line below: 
       item.Move(destinationMailboxFolderInbox.Folders[destinationMailboxFolder]); 
      } 
      catch (Exception ex3) 
      { 
       System.Windows.Forms.MessageBox.Show(ex3.Message + " Could not find Outlook folder " + destinationMailboxFolder + ". The mail item was not moved." ); 
      } 
     } 
    } 
} 
catch (Exception ex2) 
{ 
    System.Windows.Forms.MessageBox.Show(ex2.Message); 
} 

MISE À JOUR: test Après erreur essai &, la seule façon que je pouvais résoudre le bug Outlook 2010 était d'avoir le commutateur vue Outlook vers le dossier dans lequel a été déplacé l'élément de courrier, en utilisant cette commande après la commande pour déplacer l'élément dans myfolder.

Globals.ThisAddIn.OutlookApplication.ActiveExplorer().CurrentFolder = myFolder; 
+0

Cela ne signifie-t-il pas que le dossier destinationMailboxFolder n'existe pas? –

+0

Oui, c'est la signification du message d'erreur, mais le dossier doit exister. Il existait la première fois que j'ai cliqué sur le bouton. Peut-être que lorsque l'article de courrier est déplacé, il change le contexte actuel, et la réponse est de le réinitialiser en quelque sorte à la boîte de réception où se trouve l'article suivant. J'ai remarqué que lorsque je clique sur le bouton la première fois, alors je sélectionne un autre dossier puis je retourne dans le premier dossier et je clique une seconde fois sur le bouton sur l'élément suivant, cela fonctionne sans erreur. –

+0

Êtes-vous sûr d'avoir le bon magasin? –

Répondre

0

When the program is run, it works the first time, but the second time the user runs it, it throws an error:

L'interface utilisateur d'Outlook n'est pas actualisé lorsqu'un élément est déplacé vers un autre endroit. Vous devez actualiser la vue par vous-même pour obtenir une référence en direct. Tous les objets d'interface utilisateur contiennent toujours une ancienne référence.

Par exemple, la méthode Move déplace un élément Microsoft Outlook vers un nouveau dossier et retourne une valeur d'objet qui représente l'élément qui a été déplacé dans le dossier désigné.