2016-08-07 12 views
7

Tôi đã có đoạn mã sau:đúng cách để truy vấn các mục lịch qua api được quản lý ew?

var startProp = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Meeting, "DTSTART", MapiPropertyType.String); 
var endProp = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Meeting, "DTEND", MapiPropertyType.String); 

var cond1 = new SearchFilter.IsEqualTo(startProp, StartDate); 
var cond2 = new SearchFilter.IsEqualTo(endProp, EndDate); 
var filter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, cond1, cond2); 
var items = svc.FindItems(WellKnownFolderName.Calendar, filter, view); 

Tôi cố gắng để chạy truy vấn này trên một mailbox phòng trao đổi. (Tuy nhiên, điều này không rõ ràng trong đoạn mã trên). Nó có thể đặt trước với thời gian bắt đầu/kết thúc chính xác. Do đó nếu có một đặt chỗ phù hợp với tiêu chí đó, tôi sẽ nhận được ít nhất một mục.

Nền tảng cho điều này: nghĩ về phòng họp và mọi người đang cố gắng chặn cuộc họp. Để trao đổi, đây chỉ là một hộp thư khác, tương tự như hộp thư của người dùng. Vì vậy, trên đặt phòng thành công, hộp thư này nhận được một email với các chi tiết lịch (định dạng iCalendar (*.ics).

Tôi đang mắc kẹt trên hai tội danh khác nhau ...

  1. items không trở lại bất cứ điều gì trong Mã số ở trên: TotalCount bằng 0. Có thể tôi đang làm điều gì đó sai với api.Tôi không thể tìm ra điều này.

  2. Tôi thực sự nhầm lẫn với những gì tôi đang cố truy vấn. Tôi không hiểu độ phân giải của vấn đề này được mô tả dưới đây:

Vì vậy, bạn đã gửi các mục email trong hộp thư phòng. Mỗi email có lịch được nhúng với nó thường với một số mã hóa base64. Lịch có lược đồ cụ thể - chúng tôi chỉ quan tâm đến dữ liệu bạn tìm thấy ở giữa VEVENTS (tức là BEGIN: VEVENT và END: VEVENT). Vấn đề ở đây là đôi khi có thể có nhiều VEVENTS. Vậy làm thế nào để trao đổi thực sự làm điều đó? Nó có chạy qua tất cả các VEVENTS, phù hợp với các tiêu chuẩn hay không; nếu nó khớp thành công, nó có trả lại "email" đó (với lịch được đính kèm/nhúng) không? Hoặc nó là một số cơ chế khác?

Do đó, tôi không chắc chắn về ngữ nghĩa mà tôi đã viết trong mã ở trên. Vì vậy, xin vui lòng tư vấn về điều này.

Trả lời

1

Tìm thấy câu trả lời cho phần đầu tiên:

static void Find(DateTime Start, DateTime End, ExchangeService svc) 
{ 
    var filter1 = new SearchFilter.IsGreaterThanOrEqualTo(MeetingRequestSchema.Start, Start); 
    var filter2 = new SearchFilter.IsLessThanOrEqualTo(MeetingRequestSchema.End, End); 
    var filter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, filter1, filter2); 
    var vw = new ItemView(99); 
    var items = svc.FindItems(WellKnownFolderName.Calendar, filter, vw); 

    Console.WriteLine("Count: {0}", items.TotalCount); 

} 
Các vấn đề liên quan