开发者

How to retrieve recurring appointments

I am retrieving appoints from an exchange server using the service.FindItems method and it isn't returning recurring appointments. It returns the first instance of recurring items but no more after that and IsRecurring is set to false on the appointment.

This is the code:

private void loadUsersAppointments(string user, int rscID)
    {
        // Add a search filter that searches on the body or subject.
        List<SearchFilter> searchFilterCollection = new List<SearchFilter>();
        searchFilterCollection.Add(new SearchFilter.IsGreaterThan(AppointmentSchema.Start, DateTime.Today.AddDays(-7)));

        // Create the search filter.
        SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, searchFilterCollection.ToArray());

        CalendarView V = new CalendarView(DateTime.Today.AddDays(-7), DateTime.Today.AddMonths(1), 1000);
        V.PropertySet = new PropertySet(BasePropertySet.IdOnly, AppointmentSchema.Subject, AppointmentSchema.Start, AppointmentSchema.End);
        V.Traversal = ItemTraversal.Shallow;

        // Create a view with a page size of 50.
        ItemView view = new ItemView(10000);

        // Identify the Subject and DateTimeReceived properties to return.
        // Indicate that the base property will be the item identifier
        view.PropertySet = new PropertySet(BasePropertySet.IdOnly, AppointmentSchema.Subject, Ap开发者_如何学JAVApointmentSchema.Start, AppointmentSchema.End);

        // Order the search results by the DateTimeReceived in descending order.
        view.OrderBy.Add(AppointmentSchema.Start, SortDirection.Descending);

        // Set the traversal to shallow. (Shallow is the default option; other options are Associated and SoftDeleted.)
        view.Traversal = ItemTraversal.Shallow;

        // Send the request to search the Inbox and get the results.
        ExchangeService service = GlobalFunc.ElevateGetBinding();
        service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, user+"@works.local");
        FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Calendar, searchFilter, view);

        List<Item> items = new List<Item>();
        foreach (Microsoft.Exchange.WebServices.Data.Appointment appointment in findResults)
        {
            items.Add(appointment);
        }
        service.LoadPropertiesForItems(items, PropertySet.FirstClassProperties);

        // Process each item.
        foreach (Microsoft.Exchange.WebServices.Data.Appointment myItem in items)
        {
            DevExpress.XtraScheduler.Appointment AddAppt = new DevExpress.XtraScheduler.Appointment();

            try {
                if (myItem.Subject.StartsWith("Advisor Appointment"))
                    AddAppt.LabelId = 8;
                else
                    AddAppt.LabelId = 2;
                AddAppt.Subject = myItem.Subject;
            }
            catch { }
            try
            {

            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
            try { AddAppt.Start = myItem.Start; }
            catch { }
            try { AddAppt.Description = myItem.Body; }
            catch { }
            try { AddAppt.End = myItem.End; }
            catch { }
            AddAppt.ResourceId = rscID;




            schStorage.Appointments.Add(AddAppt);
        }
    }

Any ideas would be much appreciated.

Thanks


You need to use a CalendarView to get recurring appointments. Instances of recurring appointments are not real items in the Exchange database. Instead, Exchange creates virtual items on the fly when you query for a specific time range.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜