2013-09-25 5 views
1

개체를 외부 소스에서 가져 오는 작은 응용 프로그램을 만들었습니다. 그런 다음 일부 구성에 따라 Exchange 서버의 사용자 연락처 폴더에 이러한 연락처를 만들거나/upadate해야만 다음에이 사용자가 MS Outlook을 열 때 Exchange Server에서 새 연락처를 볼 수 있습니다. 가장 (impersonation) 기능을 가진 사용자이므로 보안은 중요하지 않습니다.GAL에 연락처가있는 경우 Exchange 웹 서비스 (EWS) FindItems가 작동하지 않습니다.

그 때문에 나는 잘 작동하는 EWS 라이브러리의 FindItems(folderId, filter, view) 방법을 사용합니다. 필터의 경우 사용자의 이메일 주소를 사용하고 있는데 이는 좋은 키입니다 ... 결과가 돌아 오면 이 이미 존재하며 그 대신에 업데이트를 수행해야한다는 것을 의미합니다. 몹시 떠들어 대다. 여기까지 예상대로 작동합니다 ...

(사실 전자 메일 주소) 연락처가 이미 GAL (전체 주소 목록)에있는 경우 문제가 발생합니다. 이 경우 이라는 연락처가있는 경우에도 FindItems 메서드는 결과를 반환하지 않습니다! 교환 서버가 이미 새 연락처가 아닌 GAL에있는 전자 메일 주소를 가진 연락처에 대한 링크를 만드는 것으로 가정합니다 (가정). 그리고이 경우 FindItems 메서드가이 경우 아무 것도 반환하지 않는 이유를 설명 할 수 있습니다. 이상한 점은 다른 속성 (예 : 성 및 성의 조합)을 필터링하는 경우 작동한다는 것입니다.

현재는 무슨 일 이미 GAL에 존재하는 각 연락를 들어, 대신 업데이 트의 생성합니다 (FindItems 방법은 아무 것도 반환하지 않기 때문에) 수행되고 있다는 것입니다 결과, 같은 연락처로 X 번 생성됩니다 (beeing을 한 번 생성 한 다음 X-1 번을 업데이트하는 대신).

질문 : 물론 이 GAL에 이미있을 때 교환 폴더에 있는지 여부는 어떻게 알 수 있습니까?

현재 코드 :

ItemView view = new ItemView(5) 
{ 
    PropertySet = new PropertySet(BasePropertySet.FirstClassProperties) 
}; 
SearchFilter f = new SearchFilter.IsEqualTo(ContactSchema.EmailAddress1, email); 
FindItemsResults<Item> contactItems = _service.FindItems(folderId, f, view); 
int resultCount = contactItems.Count(); // Always 0 if GAL, otherwise it works 

답변

0

마지막으로, 나는 SetExtendedProperty 방법을 사용하여 확장 된 속성을 내 문제를 해결했다. 이 확장 된 필드에서 나는 Id을 넣었고 그 문제를 해결했습니다.

그러나 검색 이메일 주소으로 작동하지 않는 이유는 ... 설명하지 않는 사람은 답을 알고 있다면, 난 여전히 관심이 있어요 :)

새로운 검색은 다음과 같습니다

ItemView view = new ItemView(nb); 
view.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, _extendedPropDef); 
SearchFilter f = new SearchFilter.IsEqualTo(_extendedPropDef, contact.Id); 
FindItemsResults<Item> contactItems = _service.FindItems(folderId, f, view); 

이 코드를 사용하면 모든 것이 예상대로 작동합니다 ...