2010-08-21 26 views
15

Tôi đang sử dụng chế độ xem CalendarItemType để truy xuất các mục lịch. Các vật phẩm duy nhất tôi quan tâm là những thứ tôi đã tạo ra và tôi biết rằng chúng đều là những vật phẩm định kỳ hàng tuần. Tôi có thể nhận được mỗi lần xuất hiện cá nhân và, từ bất kỳ mục nào trong số đó là mục chính định kỳ, nhưng tôi muốn thu hẹp phạm vi tìm kiếm của mình chỉ với những mục phù hợp với mẫu của tôi.Làm cách nào để tôi chỉ truy xuất các chủ sự kiện lặp lại bằng các dịch vụ Web Exchange?

Tôi đã thử sử dụng thuộc tính Hạn chế trên FindItemType để chỉ định giới hạn NotEqualTo với hằng số null cho calenderRecurrenceId. Điều này khiến tôi yêu cầu hết thời gian. Cho đến nay tôi đã không thể tải các sự lặp lại với FindItemType và cần phải sử dụng một cuộc gọi GetItemType tiếp theo khi tôi tìm thấy một sự kiện xảy ra trong một chuỗi định kỳ.

Đây là mã tôi bắt đầu. Mã này cần phải hoạt động với cả Exchange 2007 và Exchange 2010.

var findItemRequest = new FindItemType(); 

    findItemRequest.ParentFolderIds = new DistinguishedFolderIdType[] 
    { 
     new DistinguishedFolderIdType() 
    }; 

    ((DistinguishedFolderIdType)findItemequest.ParentFolderIds[0]).Id = DistinguishedFolderIdNameType.calendar; 
    findItemRequest.Traversal = ItemQueryTraversalType.Shallow; 

    var itemShapeDefinition = new ItemResponseShapeType(
    { 
     BaseShape = DefaultShapeNamesType.AllProperties; 
    } 

    findItemRequest.Item = calenderView; 
    findItemRequest.ItemShape = itemShapeDefinition; 

    var findItemResponse = this.esb.FindItem(findItemRequest); 

Ngoài ra, nếu bạn biết bất kỳ nguồn ví dụ nào tốt (ví dụ trong MSDN), tôi sẽ hoan nghênh chúng. Tôi đang nhặt mã của người khác trong trường hợp khẩn cấp và cố gắng tìm hiểu về Dịch vụ Web Exchange khi đang di chuyển.

+0

Khi tôi đang học EWS, tôi đã sử dụng mã của EWSEditor làm tài liệu tham khảo. – Avilo

Trả lời

4

Có thể tôi hiểu nhầm bạn, trong trường hợp này tôi xin lỗi.

Bạn KHÔNG sử dụng Chế độ xem lịch - bạn sử dụng IndexedPageItemView bình thường nếu tất cả những gì bạn muốn là các mục Lịch định kỳ chính.

Bạn sử dụng Chế độ xem lịch để mở rộng các lần lặp lại cho các mục riêng lẻ. Tuy nhiên, sự thỏa hiệp với CalendarView là KHÔNG có giới hạn nào được phép bên cạnh Ngày bắt đầu và Ngày kết thúc. Không ai.

+0

cẩn thận để thêm mẫu mã hoặc bao gồm tham chiếu? Tôi có thể làm mọi thứ, nhưng chỉ bằng cách lọc các câu trả lời. Tôi đã sử dụng mã của người khác làm điểm khởi đầu, đó là lý do tại sao tôi bắt đầu với CalendarItemView (có vẻ hợp lý vì tôi đang tìm kiếm các mục lịch), nhưng tôi muốn thử làm theo cách của bạn. – tvanfosson

+1

Tôi muốn nhưng mã của chúng tôi là thẳng thắn một chút lộn xộn. Chúng tôi bắt đầu với một công cụ gây nhiễu trong 50 mục tại một thời điểm (và một số công cụ điều kiện phức tạp/tránh cuộc đua mà tôi không thích). Điều đó đã thực hiện FindItem (idOnly) theo sau là getItems. Sau đó, chúng tôi thấy rằng trong IndexedPageView bình thường, chúng tôi chỉ có các mục chính.Cho phép tôi giới thiệu THE HOLY GRAIL - nó hơi lỗi thời (các dịch vụ web 2007), nhưng nó là toàn diện, rõ ràng, với rất nhiều ví dụ ...... – MJB

+0

Đó là một cuốn sách có tên Inside Microsoft Exchange Server 2007 Web Services của Microsoft Press. Và nó thảo luận rất nhiều trường hợp góc kỳ lạ của EWS. Mỗi nhóm phát triển cần có một bản sao. Bên trong Dịch vụ Web Microsoft® Exchange Server 2007 bởi David Sterling; Ben Tây Ban Nha; Michael Mainer; Mark Taylor; Huw Upshall ---------------------------------------------- ---------------------------------- Nhà xuất bản: Microsoft Press Ngày phát hành: 28 tháng 11 năm 2007 In ISBN-10: 0-7356-2392-9 In ISBN-13: 978-0-7356-2392-7 – MJB

-1

Bạn có thể tạo bộ lọc tìm kiếm tùy chỉnh. Nếu bạn tìm kiếm từ STARTDATE cụ thể hoặc tài sản isRecurring bạn có cách dễ dàng nhất ... (SearchItems lợi nhuận định kỳ bậc thầy)

List<SearchFilter> searchFilterCollection = new List<SearchFilter>(); 

     SearchFilter.IsGreaterThanOrEqualTo startDatumFilter = new SearchFilter.IsGreaterThanOrEqualTo(AppointmentSchema.Start, new DateTime(2012, 9, 16)); 
     SearchFilter.IsEqualTo masterRecurringFilter = new SearchFilter.IsEqualTo(AppointmentSchema.IsRecurring, true); 

     searchFilterCollection.Add(startDatumFilter); 
     searchFilterCollection.Add(masterRecurringFilter); 

     SearchFilter finalFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, searchFilterCollection); 

     ItemView itemView = new ItemView(100000); 
     itemView.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, AppointmentSchema.AppointmentType); 

     FindItemsResults<Item> items = _service.FindItems(WellKnownFolderName.Calendar, finalFilter, itemView); 
+0

IsRecurring sẽ sai cho các bậc thầy do chủ sở hữu sở hữu. Xem http://msdn.microsoft.com/en-us/library/office/bb204271(v=exchg.150).aspx – Antony

0

Tìm thấy chỉ bất động sản bạn cần là tài sản RecurrenceStart. Vì EWS có giới hạn nên không thể sử dụng tất cả các thuộc tính trong giới hạn. Điều này làm việc như mong đợi.

tham khảo: Find master recurring appointments

0

Bạn có thể tìm kiếm một RecurrenceMaster bằng tái phát PidLid với một ExtendedPropertyDefinition. Điều này làm việc bởi vì, theo tài liệu của họ, "tài sản này không được tồn tại trên các mục lịch thể hiện đơn lẻ."

https://msdn.microsoft.com/en-us/library/cc842017.aspx

// https://msdn.microsoft.com/en-us/library/cc842017.aspx 
ExtendedPropertyDefinition apptType = new ExtendedPropertyDefinition(
    DefaultExtendedPropertySet.Appointment, 
    0x00008216, //PidLidAppointmentRecur 
    MapiPropertyType.Binary); 

var restriction = new SearchFilter.Exists(apptType); 
var iView = new ItemView(10); 
var found = folder.FindItems(restriction, iView); 

Tôi chỉ khẳng định công trình này, ngày hôm nay, khi xem xét lại một số mã cũ mà làm việc với Office365 EWS trong đám mây.

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