2009-04-30 4 views
6

BPOS에서 Exchange 웹 서비스를 호출하여 일정 정보를 검색해야합니다. 가능한 한 작은 데이터를 검색하기 위해 PropertySet과 함께 CalendarView을 사용하고 있습니다. 그러나 자산 집합은 제한적인 것으로 보입니다. 약속 예약을 한 사람의 EmailAddress이 필요하므로 PropertySetAppointmentSchema.Organizer을 사용할 수 있다고 생각했습니다.Exchange 웹 서비스 및 속성 집합

전체 약속을 가져올 때 나는 appt.Organizer.EmailAddress을 통해 전자 메일을받을 수 있습니다. 그러나 아래 코드를 사용하면 Organizer.EmailAddress은 항상 null입니다. 추적을 사용하도록 설정하고 확인했으며 Organizer.Name 속성 만 전송되었습니다. 누군가 PropertySet을 사용할 때 EmailAddress을 얻는 방법에 대한 해결책이 있습니까? 이 주최자에 대한 약속과 "EmailMessage.From"와 같은 다른 것들 모두 전체에서 EmailAddress 세부 사항을 채우기에 올 때 나는 EWS를 알아낼 수 있었던 가장 잘으로

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

답변

1

약간 버그가 있습니다. 항목을 여러 번 쿼리하면 EmailAddress 속성이 완전히 채워지지 않습니다. 예 : 사용하는 API는 같은 :

Folder.FindItems 
ExchangeService.FindAppointments 

은 내가 EmailAddress를 필드에 표시 이름이 채워됩니다 것을 찾을 수 있습니다.

EmailAddress가 완전히 채워지려면 특정 항목을로드/바인딩하고 관련 EmailAddress 속성을 지정해야합니다. 귀하의 경우에는 AppointmentSchema.Organizer. 따라서 정확히 동일한 속성을로드하도록 지정했지만 대량 쿼리가 아니라 단일 항목 호출을 사용하여로드하고 있습니다. 예 :

ServiceObject.Load 

ServiceObject에서 파생 된 Appointment와 EmailMessage는 둘 다 사용할 수 있습니다. 적절한 속성 집합이 정의 된 Item.Bind를 사용하여 작업해야합니다. 여담으로

은 여기 언급 EwsEditor의 코드를보고이 알아 낸 :

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

는 EwsEditor의 유용성은 매우 미흡

, 그리고 코드는 알아 내기 위해 몇 가지 트롤 어업이 필요하지만 적어도 많은 API를 사용하는 예를 보여줍니다.

6

이 작동합니다은 (나를 위해 수행) :

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

그것은 나를 위해 일했습니다.

+0

@Jordan의 답변 사본이 아닌가요? 응답이 당신을 위해 일했다고 말하려고한다면, 그 메시지를 그 대답에 대한 코멘트로 게시해야합니다. – RenniePet