2009-04-30 8 views
6

Ich muss Kalenderinformationen abrufen, indem ich den Exchange-Webdienst in BPOS aufruft. Ich verwende eine CalendarView mit einer PropertySet, um so wenig Daten wie möglich abzurufen. Eigenschaftssätze scheinen jedoch begrenzt zu sein. Ich brauche die EmailAddress desjenigen, der den Kalendertermin gemacht hat, also dachte ich, ich könnte die AppointmentSchema.Organizer in der PropertySet verwenden.Exchange-Webdienste und -Eigenschaften

Wenn eine ganze Termin holen ich die E-Mail durch appt.Organizer.EmailAddress bekommen. Aber mit dem Code unter Organizer.EmailAddress ist immer Null. Ich habe die Ablaufverfolgung aktiviert und überprüft, und nur die Organizer.Name Eigenschaft wird gesendet, nichts anderes. Hat jemand eine Lösung, wie man die EmailAddress bei Verwendung eines PropertySet bekommen?

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); 

Antwort

1

so gut wie ich in der Lage gewesen, EWS, um herauszufinden, ist ein wenig fehlerhaft, wenn es darum geht, die vollen Emailaddress Details zu bevölkern sowohl in Terminen für Veranstalter und für andere Dinge wie „EmailMessage.From“. Wenn Sie eine Abfrage für mehrere Elemente ausführen, erhalten Sie die EmailAddress-Eigenschaften, die vollständig aufgefüllt werden, nicht. Z.B. Verwendung von APIs wie:

Folder.FindItems 
ExchangeService.FindAppointments 

Ich finde, dass nur der Anzeigename in den Feldern Emailaddress bevölkert wird.

Um die Emailaddress zu erhalten voll bestückte Ich finde ich brauche, um den bestimmten Artikel zu laden/binden und die entsprechende Emailaddress-Eigenschaft angeben, zum Beispiel AppointmentSchema.Organizer in Ihrem Fall. Obwohl Sie genau die Eigenschaft angeben, die Sie laden möchten, laden Sie stattdessen einen einzelnen Elementaufruf statt einer Massenabfrage. Z.B. Verwendung:

ServiceObject.Load 

die für beide Ernennung und Emailmessage verfügbar ist, da sie beide ServiceObject ableiten aus. Die Verwendung von Item.Bind mit der entsprechenden definierten Eigenschaft sollte ebenfalls funktionieren.

Als beiseite dachte ich dies für EwsEditor Blick auf den Code aus, die hier erwähnt wird:

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

Die Verwendbarkeit von EwsEditor ist ziemlich sucky, und der Code dauert einige Schleppen, um herauszufinden, aber zumindest zeigt es Beispiele für die Ausübung vieler der APIs.

6

Dies sollte funktionieren (tut für mich):

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); 

Es ist für mich gearbeitet.

+0

Ist das nicht nur eine Kopie der Antwort von @ Jordan? Wenn Sie sagen möchten, dass die Antwort für Sie funktioniert hat, sollten Sie diese Nachricht als Kommentar zu dieser Antwort veröffentlichen. – RenniePet