Exchange Web服务和属性集

时间:2009-04-30 09:38:55

标签: exchangewebservices ews-managed-api

我需要通过在BPOS中调用Exchange Web服务来检索日历信息。我使用CalendarViewPropertySet来检索尽可能少的数据。但是,财产集似乎有限。我需要预约日历的人EmailAddress,所以我想我可以使用AppointmentSchema.Organizer中的PropertySet

在获取整个约会时,我可以通过appt.Organizer.EmailAddress收到电子邮件。但是使用下面的代码,Organizer.EmailAddress始终为空。我启用了跟踪并检查了它,只发送了Organizer.Name属性,没有别的。有没有人在使用EmailAddress时如何获得PropertySet

CalendarView view = new CalendarView(dtFrom, dtTo);
view.PropertySet = new PropertySet(ItemSchema.Subject);
view.PropertySet.Add(ItemSchema.Id);
view.PropertySet.Add(AppointmentSchema.Start);
view.PropertySet.Add(AppointmentSchema.End);
view.PropertySet.Add(AppointmentSchema.Organizer); // This should contain EmailAddress but it doesn't

Mailbox mailbox = new Mailbox("myemail@test.ab");
FolderId id = new FolderId(WellKnownFolderName.Calendar, mailbox);
CalendarFolder folder = CalendarFolder.Bind(service, id);
FindItemsResults<Appointment> findResults = folder.FindAppointments(view);

3 个答案:

答案 0 :(得分:6)

这应该有效(对我而言):

service.FindAppointments(WellKnownFolderName.Calendar, new CalendarView(start, end)).Where(s => DateTime.Now < s.Start);
service.LoadPropertiesForItems(appointments, PropertySet.FirstClassProperties);

答案 1 :(得分:1)

尽管我已经能够弄清楚EWS在组织者的约会和“EmailMessage.From”等其他内容中填充完整的EmailAddress详细信息是一个小问题。当您对多个项目进行查询时,不会完全填充EmailAddress属性。例如。使用API​​,如:

Folder.FindItems
ExchangeService.FindAppointments

我发现将填充EmailAddress字段中的显示名称。

为了完全填充EmailAddress,我发现我需要加载/绑定到特定项目并指定相关的EmailAddress属性,例如在您的情况下,AppointmentSchema.Organizer。因此,尽管您指定要加载的属性完全相同,但您使用单个项目调用而不是批量查询来加载。例如。使用:

ServiceObject.Load

它可用于Appointment和EmailMessage,因为它们都派生出ServiceObject。使用具有定义的适当属性集的Item.Bind也应该有效。

顺便说一下,我想到了这里提到的EwsEditor的代码:

http://blogs.msdn.com/webdav_101/archive/2009/11/10/ews-has-more-happy-now-ews-managed-api-and-ewseditor.aspx

EwsEditor的可用性非常糟糕,代码需要一些拖网才能弄清楚,但至少它确实显示了运行许多API的例子。

答案 2 :(得分:0)

service.FindAppointments(WellKnownFolderName.Calendar, new CalendarView(start, end)).Where(s => DateTime.Now < s.Start);
service.LoadPropertiesForItems(appointments, PropertySet.FirstClassProperties);

它对我有用。