2009-04-30 18 views
6

Exchange Web Hizmetini BPOS içinde çağırarak takvim bilgilerini almam gerekir. Mümkün olduğunca az veri almak için PropertySet ile CalendarView kullanıyorum. Ancak, mülk setleri sınırlı gibi görünüyor. Takvim randevusunu yapan kişinin EmailAddress'a ihtiyacım var, bu yüzden PropertySet'da AppointmentSchema.Organizer'u kullanabileceğimi düşündüm.Exchange Web Hizmetleri ve Mülk Setleri

Tüm randevuyu alırken e-postayı appt.Organizer.EmailAddress aracılığıyla alabilirim. Ancak Organizer.EmailAddress'un altındaki kod her zaman boştur. İzlemeyi etkinleştirdim ve işaretledim ve yalnızca Organizer.Name özelliği gönderildi, başka bir şey yok. PropertySet kullanırken EmailAddress'u nasıl alacağına dair bir çözümü var mı? o Organizatör için Atamalar ve "EmailMessage.From" gibi diğer şeyler için hem tam EmailAddress ayrıntıları doldurma geldiğinde EWS'yi anlamaya mümkün olmuştur gibi en iyi olarak

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

cevap

1

biraz arabası olduğunu. birden çok öğe için bir sorgu yaptığınızda, e-posta adresi özelliklerini tam olarak doldurulur. Örneğin. kullanarak API'ler gibi:

Folder.FindItems 
ExchangeService.FindAppointments 

Ben EmailAddress alanlarda sadece görünen adı doldurulur alır bulmak.

EmailAddress'in tam olarak doldurulduğunu bulmak için, belirli bir öğeye yüklenmemeli/bağlanmalı ve ilgili EmailAddress özelliğini belirtmem gerekir. Senin durumunda RandevuSchema.Organizer. Bu nedenle, tam olarak aynı özelliği yüklemek için belirttiğiniz halde, toplu bir sorgu yerine tek bir öğe çağrısı kullanarak yükleniyorsunuz. Örneğin. kullanarak: ikisi de ServiceObject kapalı türetmek hem Atama ve EmailMessage için kullanılabilir

ServiceObject.Load 

. Item.Bind kullanılarak tanımlanan uygun özellik kümesi de çalışmalıdır. Bir kenara

Burada bahsedilen EwsEditor için kod bakarak bu anladım:

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

EwsEditor kullanılabilirliği oldukça sucky olan

ve kod anlamaya biraz trol alır, ama En azından birçok API'yi egzersiz örnekleri gösterilmektedir.

6

Bu çalışması gerekir (benim için yapar):

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

Benim için çalıştı.

+0

Bu, cevabın sadece bir kopyası @Jordan tarafından değil midir? Cevabın sizin için çalıştığını söylemeye çalışıyorsanız, bu mesajı bu yanıt hakkında yorum olarak göndermelisiniz. – RenniePet