2013-01-03 30 views
5

Pisałem ten kod, aby znaleźć całkowity czas trwania wszystkich nominacji do podanej kategorii w określonym przedziale czasowym:Filter Outlook terminy według kategorii

private readonly MAPIFolder _timing; 

private int CalculateTotalDuration(DateTime start, DateTime end, string category) 
{ 
    string filter = String.Format(
     "([Start] >= '{0:g}') AND ([End] <= '{1:g}') AND ([Categories] = '{2}')", 
     start, end, category); 
    return _timing.Items.Restrict(filter).Cast<AppointmentItem>(). 
     Sum(appt => appt.Duration); 
} 

ten kod wyniki w następującym wyjątkiem przypadku korzystania z wersji rosyjskiej Outlook (nie testowałem go w wersji angielskiej choć):

System.Runtime.InteropServices.COMException was unhandled 
    Message=Условие неверно. 
    Source=Microsoft Outlook 
    ErrorCode=-2147352567 
    StackTrace: 
     at Microsoft.Office.Interop.Outlook._Items.Restrict(String Filter) 
     ... 

Kiedy wymienić [Categories] z [Категории], tj

string filter = String.Format(
    "([Start] >= '{0:g}') AND ([End] <= '{1:g}') AND ([Категории] = '{2}')", 
    start, end, category); 

działa z rosyjską wersją programu Outlook. Ale oczywiście nie będzie działać z innymi językami.

Jak filtrować spotkania w programie Outlook według kategorii w sposób wielojęzyczny?

Odpowiedz

6

Spróbuj użyć kwerendy SQL (prefiks zapytaniu SQL z „@ =”) i używać nazwy DASL dla kategorii - http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/Keywords/0x0000101F lub urn:schemas:mailheader:keywords.

4

I mają pochodzić z następującym filtrem DASL że pracuje dla mnie:

var filter = String.Format(
    "@SQL=(\"urn:schemas:calendar:dtstart\" >= '{0:g}' " + 
    "AND \"urn:schemas:calendar:dtend\" <= '{1:g}' " + 
    "AND \"urn:schemas-microsoft-com:office:office#Keywords\" LIKE '%{2}%')", 
    start, end, category); 

Właściwie ja zbudowałem go za pomocą Konstruktora kwerend DASL:

QueryBuilder

Aby wyświetlić kwerend Karta Utworzono QueryBuilder klucz w HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 14.0 \ Outlook zgodnie z opisem here.

Dzięki Dmitry, który zasugerował użycie DASL.