2013-01-03 88 views
5
类别

我写了这个代码,以查找指定类别的所有约会的指定时间范围内的总时长:筛选Outlook约会的

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

在以下例外此代码的结果与俄罗斯版本中使用展望(我没有英文版本测试它虽然):

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

当我更换[Categories][Категории],即

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

它适用于俄语版的Outlook。但显然它不适用于其他语言。

如何以多语言方式按类别过滤Outlook约会?

回答

6

尝试使用一个SQL查询(前缀查询与“@ SQL =”),并使用DASL名称类别 - http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/Keywords/0x0000101Furn:schemas:mailheader:keywords

4

我想出了以下DASL过滤器对我的作品:

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

其实我已经使用DASL查询构建器构建它:

QueryBuilder

要显示查询生成器标签我已经创建QueryBuilderHKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 14.0 \ Outlookhere。由于Dmitry谁建议使用DASL。