6

我编写了这段代码来查找指定时间范围内指定类别的所有约会的总持续时间:

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

此代码在与俄文版 Outlook 一起使用时会导致以下异常(虽然我没有使用英文版对其进行测试):

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 约会?

4

2 回答 2

8

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

于 2013-01-03T14:02:38.040 回答
6

我想出了以下适用于我的 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 查询生成器构建了它:

查询生成器

为了显示查询生成器选项卡,我在HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Outlook中创建了QueryBuilder键,如此所述。

感谢建议使用 DASL的Dmitry 。

于 2013-01-04T07:21:55.000 回答