2009-04-30 14 views
6

Potrzebuję pobrać informacje z kalendarza, wywołując usługę Exchange Web Service w BPOS. Używam CalendarView z PropertySet, aby pobrać jak najmniej danych. Jednak zestawy właściwości wydają się być ograniczone. Potrzebuję EmailAddress tego, który złożył wizytę w kalendarzu, więc pomyślałem, że mogę użyć AppointmentSchema.Organizer w .Usługi internetowe i zestawy usług Exchange

Podczas pobierania całego spotkania mogę otrzymać e-mail przez appt.Organizer.EmailAddress. Ale z poniższym kodem Organizer.EmailAddress jest zawsze pusty. Włączyłem śledzenie i zaznaczyłem to i wysłano tylko właściwość Organizer.Name, nic więcej. Czy ktoś ma rozwiązanie, jak uzyskać EmailAddress podczas korzystania z 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("[email protected]"); 
FolderId id = new FolderId(WellKnownFolderName.Calendar, mailbox); 
CalendarFolder folder = CalendarFolder.Bind(service, id); 
FindItemsResults<Appointment> findResults = folder.FindAppointments(view); 

Odpowiedz

1

Jak najlepiej jak udało mi się dowiedzieć EWS jest trochę buggy, jeśli chodzi o wypełnianie pełne dane EMAILADDRESS zarówno w Nominacje do Organizatora i do innych rzeczy jak „EmailMessage.From”. Po wykonaniu kwerendy dla wielu elementów, nie zostaną całkowicie wypełnione właściwości EmailAddress. Na przykład. wykorzystujące API jak:

Folder.FindItems 
ExchangeService.FindAppointments 

Uważam, że tylko nazwa wyświetlana na polach EMAILADDRESS zostanie wypełniona.

Aby uzyskać pełny adres e-mail, znajduję potrzebę załadowania/powiązania z określonym elementem i określenia odpowiedniej właściwości EmailAddress, np. AppointmentSchema.Organizer w twoim przypadku. Dlatego, mimo że dokładnie określasz tę samą właściwość do załadowania, ładujesz przy użyciu pojedynczego wywołania, a nie kwerendy zbiorczej. Na przykład. użycie:

ServiceObject.Load 

Który jest dostępny zarówno dla Powołania, jak i wiadomości e-mail, ponieważ oba pochodzą z ServiceObject. Używanie Item.Bind z odpowiednim zestawem właściwości powinno również działać.

Jak z boku I zdobione to patrząc na kod dla EwsEditor który jest wymieniony tutaj:

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

Użyteczność EwsEditor jest dość sucky, a kod zajmuje trochę trałowania, aby dowiedzieć się, ale przynajmniej pokazuje przykłady korzystania z wielu interfejsów API.

6

To powinno działać (nie dla mnie):

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

on pracował dla mnie.

+0

Czy to nie jest tylko kopia odpowiedzi @Jordana? Jeśli chcesz powiedzieć, że odpowiedź zadziałała, powinieneś opublikować tę wiadomość jako komentarz do tej odpowiedzi. – RenniePet

Powiązane problemy