我需要通过在BPOS中调用Exchange Web服务来检索日历信息。我使用CalendarView
和PropertySet
来检索尽可能少的数据。但是,财产集似乎有限。我需要预约日历的人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);
答案 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的代码:
EwsEditor的可用性非常糟糕,代码需要一些拖网才能弄清楚,但至少它确实显示了运行许多API的例子。
答案 2 :(得分:0)
service.FindAppointments(WellKnownFolderName.Calendar, new CalendarView(start, end)).Where(s => DateTime.Now < s.Start);
service.LoadPropertiesForItems(appointments, PropertySet.FirstClassProperties);
它对我有用。