2013-01-03 23 views
5

Ho scritto questo codice per trovare la durata complessiva di tutti gli appuntamenti nella categoria specificata in un intervallo di tempo specificato:appuntamenti di filtro di Outlook per categoria

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); 
} 

Questo codice determina la seguente eccezione quando viene utilizzato con la versione russa di Outlook (non ho la prova con la versione inglese però):

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

Quando sostituisco [Categories] con [Категории], cioè

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

funziona con la versione russa di Outlook. Ma ovviamente non funzionerà con altre lingue.

Come filtrare gli appuntamenti di Outlook per categoria in modo multilinguaggio?

risposta

6

tenta di utilizzare una query SQL (prefisso la query con "@ SQL =") e utilizzare il nome DASL per le categorie - http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/Keywords/0x0000101F o urn:schemas:mailheader:keywords.

4

sono venuto su con il seguente filtro DASL che funziona per me:

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); 

In realtà ho costruito utilizzando il generatore di query DASL:

QueryBuilder

Per visualizzare una Query Builder scheda Ho creato QueryBuilder chiave in HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 14.0 \ Outlook come descritto here.

Grazie a Dmitry chi ha suggerito di utilizzare DASL.