2012-05-17 3 views
2

Je suis en train de créer un complément Outlook dans Visual Studio 2010, en utilisant VSTO avec VB.net.Comment déterminer si l'élément Outlook est affiché

Pour l'instant je traite des articles de courrier et des articles de poste. Existe-t-il un moyen de déterminer si un article de courrier ou un article de publication est actuellement affiché? Tout ce que je veux faire est de fermer tous les éléments (ouverts) affichés (le cas échéant) avant de les déplacer d'un dossier à un autre.

Je l'ai googlé beaucoup, mais je n'ai pas trouvé de réponse à ma question.

Merci d'avance.

Répondre

1

Il vous suffit de vérifier la propriété MailItem.EntryID pour voir si un article de courrier existe dans la collection de Application.Inspectors et a une Inspector.CurrentItem qui lui est associé avec le même EntryID. Voici une méthode d'aide utile que j'ai utilisée dans le passé.

Remarque: Cette technique doesn't work for new messages (composing) since new mail items don't contain an EntryID until they are saved/sent.

internal static bool HasInspector(Outlook.MailItem mailItem) 
{ 
    bool HasInspector = false; 
    try { 
     if (mailItem == null || string.IsNullOrEmpty(mailItem.EntryID)) return HasInspector; // short-circuit invalid params or new mail message (no entryid since it's not saved) 
     foreach (Outlook.Inspector inspector in Globals.ThisAddIn.Application.Inspectors) 
     { 
      Outlook.MailItem currentMailItem = inspector.CurrentItem as Outlook.MailItem; 
      if (currentMailItem != null && !string.IsNullOrEmpty(currentMailItem.EntryID)) 
      { 
       HasInspector = Globals.ThisAddIn.Application.Session.CompareEntryIDs(currentMailItem.EntryID, mailItem.EntryID); 
       Marshal.ReleaseComObject(currentMailItem); currentMailItem = null; // resource RCW cleanup 
      } 
     }   
    } 
    catch { } // attempt to request inspector for mailitem 
    return HasInspector; 
} 
+1

Malheureusement, ce n'est pas correct. L'appel 'mailItem.GetInspector' créera et affichera un nouvel inspecteur si l'élément de courrier n'en a pas déjà un. Source: http://msdn.microsoft.com/fr-fr/library/office/ff868098(v=office.15).aspx – HughHughTeotl

+0

@HughHughTeotl - bonne prise! J'ai mis à jour la méthode pour refléter cela. Cela nous créait également des problèmes car 'GetInspector' créait' Inspector' au lieu de vérifier s'il existait. Après @Dmitry et votre suggestion pour résoudre correctement. – SliverNinja

1

La seule solution que je l'ai trouvé à ce jour est à boucle à travers Application.Inspectors (rappelez-vous que c'est une collection de base 1 non basé sur 0) et voir si l'un des inspecteurs ont un CurrentItem égal à votre article de courrier.

Vous ne pouvez pas utiliser MailItem.GetInspector car cela créera une fenêtre d'inspecteur pour l'article de courrier s'il n'en existe pas déjà.

Espérons que quelqu'un sera en mesure de fournir une meilleure solution s'il en existe une!

0

Parcourez les inspecteurs de la collection Application.Inspectoes, pour que chaque inspecteur lise la propriété CurrentItem (il peut renvoyer des objets de différents types, par exemple MailItem, ContactItem, etc.). Lisez la propriété EntryID et comparez-la avec l'ID d'entrée de l'élément en question à l'aide de Namespace.CompareEntryIDs.

Questions connexes