2013-01-03 19 views
5

Tôi đã viết mã này để tìm ra tổng thời gian của tất cả các cuộc hẹn của một thể loại nào đó trong một phạm vi thời gian quy định:hẹn Lọc Outlook theo thể loại

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

Mã này kết quả trong ngoại lệ sau khi được sử dụng với phiên bản tiếng Nga của Outlook (tôi không thử nghiệm nó với phiên bản tiếng Anh mặc dù):

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

Khi tôi thay [Categories] với [Категории], tức là

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

nó hoạt động với phiên bản Outlook của Nga. Nhưng rõ ràng nó sẽ không hoạt động với các ngôn ngữ khác.

Cách lọc các cuộc hẹn Outlook theo danh mục theo cách đa ngôn ngữ?

Trả lời

6

Cố gắng sử dụng truy vấn SQL (tiền tố truy vấn với "@ SQL =") và sử dụng tên DASL cho Danh mục - http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/Keywords/0x0000101F hoặc urn:schemas:mailheader:keywords.

4

tôi đã đưa ra các bộ lọc DASL sau đó làm việc cho tôi:

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

Thật sự tôi đã xây dựng nó bằng cách sử dụng xây dựng truy vấn DASL:

QueryBuilder

Để hiển thị một Builder Query tab Tôi đã tạo khóa QueryBuilder trong HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 14.0 \ Outlook như được mô tả here.

Cảm ơn Dmitry đã đề xuất sử dụng DASL.