Exchange Web Services和属性集合

6
我需要通过调用BPOS中的Exchange Web服务来检索日历信息。我正在使用一个CalendarView和一个PropertySet来尽可能少地检索数据。然而,属性集似乎是有限制的。我需要制定日历约会的人的EmailAddress,所以我想我可以在PropertySet中使用AppointmentSchema.Organizer
当获取整个约会时,我可以通过appt.Organizer.EmailAddress获得电子邮件。但是,在下面的代码中,Organizer.EmailAddress始终为空。我已经启用了跟踪并进行了检查,只发送了Organizer.Name属性,没有其他信息。是否有人知道如何在使用PropertySet时获取EmailAddress的解决方案?
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个回答

6
这应该可以正常工作(对我而言是这样的):
service.FindAppointments(WellKnownFolderName.Calendar, new CalendarView(start, end)).Where(s => DateTime.Now < s.Start);
service.LoadPropertiesForItems(appointments, PropertySet.FirstClassProperties);

1
据我所知,EWS 在填充组织者预约和其他类似“EmailMessage.From”邮件地址详细信息时存在一些小问题。当您查询多个项目时,您不会得到完全填充的电子邮件地址属性。例如,使用以下 API:
Folder.FindItems
ExchangeService.FindAppointments

我发现只有EmailAddress字段中的显示名称被填充。

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

ServiceObject.Load

这适用于预约和电子邮件消息,因为它们都派生自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 的使用示例。


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

对我来说起作用了。


这不是 @Jordan 的答案的复制吗?如果你想说那个答案对你有用,你应该在那个答案下发表评论。 - RenniePet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接