Веб-сервисы Exchange и наборы свойств - PullRequest
6 голосов
/ 30 апреля 2009

Мне нужно получить информацию календаря, вызвав веб-службу Exchange в BPOS. Я использую 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);

Ответы [ 3 ]

6 голосов
/ 20 июля 2011

Это должно работать (делает для меня):

service.FindAppointments(WellKnownFolderName.Calendar, new CalendarView(start, end)).Where(s => DateTime.Now < s.Start);
service.LoadPropertiesForItems(appointments, PropertySet.FirstClassProperties);
1 голос
/ 08 апреля 2010

Насколько мне удалось выяснить, EWS немного глючит, когда дело доходит до заполнения полной информации об EmailAddress как в «Встречи для организатора», так и для других вещей, таких как «EmailMessage.From». Когда вы делаете запрос для нескольких элементов, вы не получаете свойства EmailAddress полностью заполненными. Например. используя такие API, как:

Folder.FindItems
ExchangeService.FindAppointments

Я считаю, что только отображаемое имя в полях EmailAddress заполняется.

Чтобы полностью заполнить EmailAddress, я считаю, что мне нужно загрузить / привязать определенный элемент и указать соответствующее свойство EmailAddress, например, Назначение Схема. Организатор в вашем случае. Таким образом, хотя вы указываете одно и то же свойство для загрузки, вы загружаете с помощью одного вызова элемента, а не массового запроса. Например. с помощью:

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.

0 голосов
/ 25 февраля 2013
service.FindAppointments(WellKnownFolderName.Calendar, new CalendarView(start, end)).Where(s => DateTime.Now < s.Start);
service.LoadPropertiesForItems(appointments, PropertySet.FirstClassProperties);

Это сработало для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...