2009-04-30 8 views
6

Je dois récupérer des informations de calendrier en appelant le service Web Exchange dans BPOS. J'utilise un CalendarView avec un PropertySet pour récupérer le moins de données possible. Cependant, les ensembles de propriétés semblent être limités. J'ai besoin du EmailAddress de celui qui a fait le rendez-vous de calendrier ainsi j'ai pensé que je pourrais employer le AppointmentSchema.Organizer dans le PropertySet.Services Web Exchange et jeux de propriétés

Lors de la récupération d'un rendez-vous entier, je peux obtenir l'e-mail par appt.Organizer.EmailAddress. Mais avec le code ci-dessous le Organizer.EmailAddress est toujours nul. J'ai activé la trace et l'ai vérifiée et seule la propriété Organizer.Name est envoyée, rien d'autre. Quelqu'un at-il une solution sur la façon d'obtenir le EmailAddress lors de l'utilisation d'un 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); 

Répondre

1

mieux que je suis en mesure de comprendre EWS est un peu buggé quand il vient à peupler les détails de EmailAddress tant en rendez-vous pour l'organisateur et pour d'autres choses comme « EmailMessage.From ». Lorsque vous effectuez une requête pour plusieurs éléments, les propriétés EmailAddress ne sont pas entièrement remplies. Par exemple. utilisant des API comme:

Folder.FindItems 
ExchangeService.FindAppointments 

Je trouve que seulement le nom d'affichage dans les champs EmailAddress se peuplé.

Pour obtenir l'adresse EmailAddress entièrement rempli, je trouve que j'ai besoin de charger/lier à l'élément spécifique et spécifier la propriété EmailAddress pertinente, par ex. AppointmentSchema.Organizer dans votre cas. Ainsi, bien que vous spécifiez exactement la même propriété à charger, vous chargez en utilisant un seul appel d'élément plutôt qu'une requête en bloc. Par exemple. en utilisant:

ServiceObject.Load 

qui est disponible pour les rendez-vous et EmailMessage que les deux tirent hors ServiceObject. L'utilisation de Item.Bind avec l'ensemble de propriétés approprié devrait également fonctionner.

En aparté, je compris cela en regardant le code pour EwsEditor qui est mentionné ici:

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

La facilité d'utilisation de EwsEditor est assez sucky, et le code prend une pêche au chalut à comprendre, mais au moins, il montre des exemples d'exercices de nombreuses API.

6

Cela devrait fonctionner (le fait pour moi):

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

Il a travaillé pour moi.

+0

N'est-ce pas juste une copie de la réponse deJordan? Si vous essayez de dire que la réponse a fonctionné pour vous, vous devriez publier ce message comme commentaire sur cette réponse. – RenniePet