Я должен получить информацию календаря путем вызова Exchange Web Service in BPOS. Я использую a CalendarView
с a PropertySet
получать как можно меньше данные. Однако наборы свойств, кажется, ограничены. Мне нужно EmailAddress
из того, который назначил календарную встречу, таким образом, я думал, что мог использовать AppointmentSchema.Organizer
в PropertySet
.
При выборке целого назначения я могу передать электронную почту appt.Organizer.EmailAddress
. Но с кодом ниже Organizer.EmailAddress
является всегда пустым. Я включил трассировку и проверил его и только Organizer.Name
свойство отправляется, ничто иное. Делает у любого есть решение о том, как добраться EmailAddress
при использовании a 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);
Насколько я смог понять, EWS немного глючит, когда дело доходит до заполнения всех деталей EmailAddress как в «Назначениях для организатора», так и для других вещей, таких как «EmailMessage.From». Когда вы выполняете запрос для нескольких элементов, вы не получаете полного заполнения свойств EmailAddress. Например. используя такие API, как:
Folder.FindItems
ExchangeService.FindAppointments
Я обнаружил, что только отображаемое имя в полях EmailAddress заполняется.
Чтобы полностью заполнить EmailAddress, мне нужно загрузить / привязать к конкретному элементу и указать соответствующее свойство EmailAddress, например AppointmentSchema.Organizer в вашем случае. Таким образом, хотя вы указываете для загрузки одно и то же свойство, вы загружаете с помощью одного вызова элемента, а не массового запроса. Например. using:
ServiceObject.Load
Что доступно как для Appointment, так и для EmailMessage, поскольку они оба являются производными от ServiceObject. Использование Item.Bind с определенным соответствующим набором свойств также должно работать.
Кстати, я понял это, глядя на код EwsEditor, который упоминается здесь:
Удобство использования EwsEditor довольно отстойное, и код требует некоторого изучения, но, по крайней мере, он показывает примеры использования многих API.