Exchange EWS Api - 按类别获取日历约会

时间:2015-04-08 07:51:17

标签: c# exchangewebservices

我目前正在开发一款应用,可以检查一个或多个用户日历,查看特定类别下的约会/会议。

刚开始使用EWS时,我一直在尝试找到一个解决方案,以便按类别获取日历项目(约会或会议)或确定约会是否具有特定类别。我目前有以下代码(exService = ExchangeService对象):

foreach (Appointment a in exService.FindItems(WellKnownFolderName.Calendar, new ItemView(int.MaxValue)))
            {
                //Need to check if appointment has category f.x.: "SMS"
            }

有人知道如何实现这一目标吗?

由于

1 个答案:

答案 0 :(得分:4)

当您查询约会时,您想要使用FindAppointments和日历视图,而不是使用FindItems,这将确保扩展任何定期约会,例如参见https://msdn.microsoft.com/en-us/library/office/dn495614(v=exchg.150).aspx

使用类别您需要做的就像

        DateTime startDate = DateTime.Now;
        DateTime endDate = startDate.AddDays(60);
        const int NUM_APPTS = 1000;

        // Initialize the calendar folder object with only the folder ID. 
        CalendarFolder calendar = CalendarFolder.Bind(service, WellKnownFolderName.Calendar, new PropertySet());

        // Set the start and end time and number of appointments to retrieve.
        CalendarView cView = new CalendarView(startDate, endDate, NUM_APPTS);

        // Limit the properties returned to the appointment's subject, start time, and end time.
        cView.PropertySet = new PropertySet(AppointmentSchema.Subject, AppointmentSchema.Start, AppointmentSchema.End,AppointmentSchema.Categories);

        // Retrieve a collection of appointments by using the calendar view.
        FindItemsResults<Appointment> appointments = calendar.FindAppointments(cView);

        Console.WriteLine("\nThe first " + NUM_APPTS + " appointments on your calendar from " + startDate.Date.ToShortDateString() +
                          " to " + endDate.Date.ToShortDateString() + " are: \n");
        foreach (Appointment a in appointments)
        {
            if (a.Categories.Contains("Green"))
            {
                Console.Write("Subject: " + a.Subject.ToString() + " ");
                Console.Write("Start: " + a.Start.ToString() + " ");
                Console.Write("End: " + a.End.ToString());
            }                
            Console.WriteLine();
        }