2013-06-12 1 views
1

Je veux juste filtrer mes Mails avec la Restreindre méthode comme ceci:Outlook.Items Restreint() le comportement wierd

  restriction += "[ReceivedTime] < '" + ((DateTime)time).ToString("yyyy-MM-dd HH:mm") + "'"; 
      var count = oFolder.Items.Restrict(restriction).Count;//Cast<object>().ToList(); 
      for (int i = 0; i < count; i++) 
      { 
       var crntReceivedTime = ((OutLook.MailItem)oFolder.Items.Restrict(restriction).Cast<object>().ToList()[i]).ReceivedTime; 
       if (crntReceivedTime > time) 
       { 
        string t = ""; 
       } 
      } 

En théorie, la ligne string t = ""; ne devrait jamais être appelé, parce que j'arrêté les éléments de ne jamais avoir entrées dont la valeur de ReceivedTime est supérieure à time. Le problème est que la ligne est appelée, ce qui signifie que la collection d'éléments restreints contient des entrées qu'elle ne doit pas contenir.

Ai-je fait quelque chose de mal ou est le Restrict() -method juste échouer?

Répondre

2

Premièrement, vous utilisez la notation par points multiples. Vous appelez Restreindre (ce qui est cher même s'il est appelé une fois) à chaque étape de la boucle. Appelez-le une fois, mettez en cache la collection Items (restricted) renvoyée, puis faites une boucle sur les éléments de cette collection.

Deuxièmement, quelle est la restriction complète? Vous utilisez + = pour ajouter une restriction supplémentaire sur ReceivedTime. Quelle est la valeur réelle de la variable de restriction?

Edit: J'ai eu aucun problème avec le script suivant exécuté à partir OutlookSpy (cliquez sur le bouton Script, collez le script, cliquez sur Exécuter):

restriction = " [ReceivedTime] < '2011-06-11 00:00' " 
set Folder = Application.ActiveExplorer.CurrentFolder 
set restrItems = Folder.Items.Restrict(restriction) 
for each item in restrItems 
    if TypeName(item) = "MailItem" Then 
    Debug.Print item.ReceivedTime & " - " & item.Subject 
    End If 
next 
+0

Pour votre premier point: C'était uniquement à des fins de test (l'ensemble pour la boucle), c'est pourquoi im utilisant le chemin avec le moins de code. Deuxième point: C'est la restriction complète, je prévois d'ajouter plus de restrictions, c'est pourquoi je commence par 'restriction =" ";' et que continuer à ajouter plus. Mais pour l'instant, cette première ligne est la restriction entière. –

+0

Alors, quelle était la date de restriction et quelle était la valeur de ReceivedTime qui n'a pas satisfait à la restriction mais a quand même été retournée? –

+0

La date de restriction était 2013-06-11 00:00, le ReceivedTime était 2013-11-11 11:39. –

Questions connexes