2009-04-30 13 views
6

Necesito recuperar información del calendario invocando el servicio web de Exchange en BPOS. Estoy usando un CalendarView con un PropertySet para recuperar la menor cantidad de datos posible. Sin embargo, los conjuntos de propiedades parecen ser limitados. Necesito el EmailAddress del que hizo la cita del calendario, así que pensé que podría usar el AppointmentSchema.Organizer en el PropertySet.Servicios web de Exchange y conjuntos de propiedades

Cuando obtengo una cita completa, puedo obtener el correo electrónico a través del appt.Organizer.EmailAddress. Pero con el código a continuación, el Organizer.EmailAddress siempre es nulo. He habilitado el seguimiento y lo he comprobado, y solo se ha enviado la propiedad Organizer.Name, nada más. ¿Alguien tiene una solución sobre cómo obtener el EmailAddress cuando se usa 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); 

Respuesta

1

Lo mejor que he podido averiguar EWS es libre de errores, cuando se trata de rellenar los detalles completos, tanto en EmailAddress Las citas para Organizador y para otras cosas como "EmailMessage.From". Cuando realiza una consulta para artículos múltiples, no obtiene las propiedades EmailAddress completadas. P.ej. utilizando las API gusta:

Folder.FindItems 
ExchangeService.FindAppointments 

encuentro que solamente el nombre para mostrar en los campos EmailAddress se rellena.

Para que la EmailAddress esté completamente poblada, encuentro que necesito cargar/enlazar al elemento específico y especificar la propiedad correspondiente de EmailAddress, p. AppointmentSchema.Organizer en su caso. Por lo tanto, aunque especifique exactamente la misma propiedad para cargar, está cargando con una sola llamada de artículo en lugar de una consulta masiva. P.ej. usando:

ServiceObject.Load 

que está disponible tanto para la Designación y EmailMessage ya que ambos se derivan de ServiceObject. Usar Item.Bind con el conjunto de propiedades apropiado definido también debería funcionar.

Dicho sea de paso me di cuenta de esto mirando el código de EwsEditor que se menciona aquí:

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

La usabilidad de EwsEditor es bastante fastidioso, y el código lleva algún arrastre de averiguar, pero al menos muestra ejemplos de ejercicio de muchas de las API.

6

Esto debería funcionar (no para mí):

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

que trabajó para mí.

+0

¿No es esto solo una copia de la respuesta de @Jordan? Si intentas decir que la respuesta funcionó para ti, debes publicar ese mensaje como un comentario sobre esa respuesta. – RenniePet

Cuestiones relacionadas